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, що містить загальну вартість замовлення (ціле число) (тобто суму ціна x кількість для кожного виду торта){
"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 не відповідає тим самим вимогам, що й для оформлення замовлення (2)content-type - application/json
JSON-обʼєкт із двома полями
order_id, що містить той самий рядок ідентифікатора замовлення, що й початкове замовленняtotal, що містить загальну вартість замовлення (тобто суму ціна x кількість для кожного виду торта){
"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 (яке є ключовим словом) як шлях.