CakeStation، یک قنادی محبوب که انواع کیک میپزد، از شما خواسته است یک سیستم مدیریت سفارش آنلاین برایش راهاندازی کنید.
جزئیات موارد موجود در منو به این شرح است.
| مورد | قیمت |
|---|---|
| Butter Cake | 15 |
| Chocolate Cake | 20 |
| Tres Leches | 25 |
انتظار میرود انجام موارد زیر ممکن باشد.
pending، in progress یا completed).pending باشد.pending باشد.دریافت منو
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
ثبت سفارش
متد - POST
مسیر - /order
درخواست
username - اسم کاربر (string)order_items - آرایهای از شیءهای JSON که موارد سفارش را نشان میدهد. هر شیء JSON دقیقاً دو فیلد خواهد داشت: یک فیلد item از نوع رشته که اسم مورد را مشخص میکند و یک فیلد quantity از نوع عدد صحیح که تعداد سفارش برای آن مورد خاص را نشان میدهد.{
"type": "object",
"properties": {
"username": {
"type": "string"
},
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"username",
"order_items"
]
}
پاسخ
username خالی باشد، یاorder_items خالی باشد، یاorder_items برای یک نوع کیک خاص بیش از یک شیء JSON داشته باشد، یاorder_items فیلد item داشته باشد که نوع کیکی در آن آمده باشد که روی منو نیست، یاorder_items فیلد quantity داشته باشد که مقدارش کمتر از ۱ باشدapplication/json
order_id که شامل رشتهی شناسهی سفارش تولیدشده بهصورت تصادفی است. این باید نمایش رشتهای یک مقدار عددی معتبر باشد.total که مقدار کل سفارش (عدد صحیح) را در خود دارد (یعنی مجموع قیمت × تعداد برای هر نوع کیک){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
دریافت وضعیت یک سفارش
GET
/order/{orderId}
orderId مشخصشده وجود نداشته باشدcontent-type - application/json
یک شیء JSON با دو فیلد رشتهای order_id و status که بهترتیب شناسهی سفارش و وضعیت (یکی از pending، in progress یا completed) را نشان میدهند
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
بهروزرسانی یک سفارش. فقط در صورتی مجاز است که وضعیت هنوز pending باشد.
متد - PUT
مسیر - /order/{orderId}
درخواست
محتوای درخواست یک شیء JSON با یک فیلد order_items خواهد بود.
order_items - آرایهای از شیءهای JSON که موارد سفارش را نشان میدهد. هر شیء JSON دقیقاً دو فیلد خواهد داشت: یک فیلد item از نوع رشته که اسم مورد را مشخص میکند و یک فیلد quantity از نوع عدد صحیح که تعداد سفارش برای آن مورد خاص را نشان میدهد.{
"type": "object",
"properties": {
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"order_items"
]
}
پاسخ
orderId مشخصشده وجود نداشته باشدpending نباشد (یعنی in progress یا completed)order_items همان شرایط لازم برای ثبت سفارش (۲) را برآورده نکندcontent-type - application/json
یک شیء JSON با دو فیلد
order_id که همان رشتهی شناسهی سفارش اصلی را در خود داردtotal که مقدار کل سفارش را در خود دارد (یعنی مجموع قیمت × تعداد برای هر نوع کیک){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
توجه: اگر تلاش برای بهروزرسانی شکست بخورد، نباید هیچ تغییری در سفارش موجود اعمال شود.
حذف یک سفارش. فقط در صورتی مجاز است که وضعیت هنوز pending باشد.
DELETE
/order/{orderId}
orderId مشخصشده وجود نداشته باشدpending نباشد (یعنی in progress یا completed)شناسهی سفارش تولیدشده باید یکتا باشد، باید یک رشته باشد و باید نمایش رشتهای یک عدد معتبر باشد (مثلاً "1"، "1234").
configurable به اسم port با مقدار پیشفرض 8080 استفاده کنید تا پورتی که سرویس روی آن گوش میدهد مشخص شود.orderStatus در سطح ماژول برای نگهداشتن وضعیت سفارشها استفاده کنید، که در آن مقدار برای هر رشتهی شناسهی سفارش که بهصورت تصادفی تولید شده، یکی از "pending"، "in progress" یا "completed" است.
"pending"، "in progress" یا "completed")orderStatus را برای هر سفارش جدید با مقدار "pending" بهروزرسانی کنید.دریافت منو.
$ curl -v http://localhost:8080/menu
< HTTP/1.1 200 OK
< content-type: application/json
{"Butter Cake":15, "Chocolate Cake":20, "Tres Leches":25}
تلاش برای ثبت سفارش با یک محتوای معتبر.
$ curl -v http://localhost:8080/order -d '{"username": "mary", "order_items": [{"item": "Tres Leches", "quantity": 1}, {"item": "Chocolate Cake", "quantity": 2}]}' -H 'Content-Type: application/json'
< HTTP/1.1 201 Created
< content-type: application/json
{"order_id":"7", "total":65}
توجه: «order_id» باید یک رشتهی یکتا باشد و بهصورت تصادفی تولید خواهد شد.
تلاش برای ثبت سفارش با محتوایی که با قالب مورد انتظار مطابقت ندارد.
$ curl -v http://localhost:8080/order -d '{"username": "mary", "order_items": [{"Tres Leches": 1}, {"Chocolate Cake": 2}]}' -H 'Content-Type: application/json'
< HTTP/1.1 400 Bad Request
'order) میتوان استفاده کرد تا order (که یک کلیدواژه است) را بهعنوان مسیر به کار ببرید.