طلب منك 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 بقيمة أقل من 1application/json
order_id يحتوي على سلسلة معرّف الطلبية المُولَّدة عشوائيًا. ينبغي أن تكون هذه السلسلة تمثيلًا نصيًا لقيمة رقمية صالحة.total يحتوي على القيمة الإجمالية (عدد صحيح) للطلبية (أي مجموع السعر × الكمية لكل نوع من الكعك){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
استرجاع حالة طلبية
GET
/order/{orderId}
orderId المحددنوع المحتوى - 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 المتطلبات نفسها المطلوبة لتقديم الطلبية (2)نوع المحتوى - 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 (وهي كلمة مفتاحية) كمسار.سجّل في Exercism لتتعلّم وتتقن Ballerina عبر 60 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.