CakeStation, eine beliebte Bäckerei, die verschiedene Kuchen backt, hat dich gebeten, ein Online-Bestellsystem für sie einzurichten.
Die Einträge auf der Speisekarte sehen wie folgt aus.
| Artikel | Preis |
|---|---|
| Butter Cake | 15 |
| Chocolate Cake | 20 |
| Tres Leches | 25 |
Folgendes sollte möglich sein.
pending, in progress oder completed).pending ist.pending ist.Die Speisekarte abrufen
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
Eine Bestellung aufgeben
Methode - POST
Pfad - /order
Anfrage
username - Benutzername des Nutzers (string)order_items - ein Array aus JSON-Objekten, die die Bestellpositionen darstellen. Jedes JSON-Objekt enthält genau zwei Felder: ein Feld item (String), das den Namen des Artikels angibt, und ein Feld quantity (Ganzzahl), das die Bestellmenge für den jeweiligen Artikel angibt.{
"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"
]
}
Antwort
username leer ist oderorder_items leer ist oderorder_items mehr als ein JSON-Objekt für eine bestimmte Kuchenart enthält oderorder_items ein item-Feld mit einer Kuchenart enthält, die nicht auf der Speisekarte steht oderorder_items ein quantity-Feld mit einem Wert kleiner als 1 enthältapplication/json
order_id mit der zufällig generierten Bestell-ID als String. Dies sollte die String-Darstellung eines gültigen numerischen Werts sein.total mit dem Gesamtwert (Ganzzahl) der Bestellung (d. h. die Summe von Preis x Menge für jede Kuchenart){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Den Status einer Bestellung abrufen
GET
/order/{orderId}
orderId gibtcontent-type - application/json
ein JSON-Objekt mit zwei String-Feldern order_id und status, die die Bestell-ID bzw. den Status darstellen (entweder pending, in progress oder completed)
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
Eine Bestellung aktualisieren. Nur erlaubt, wenn der Status noch pending ist.
Methode - PUT
Pfad - /order/{orderId}
Anfrage
die Anfrage-Payload ist ein JSON-Objekt mit einem einzigen Feld order_items.
order_items - ein Array aus JSON-Objekten, die die Bestellpositionen darstellen. Jedes JSON-Objekt enthält genau zwei Felder: ein Feld item (String), das den Namen des Artikels angibt, und ein Feld quantity (Ganzzahl), das die Bestellmenge für den jeweiligen Artikel angibt.{
"type": "object",
"properties": {
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"order_items"
]
}
Antwort
orderId gibtpending ist (d. h. in progress oder completed)order_items nicht die gleichen Anforderungen erfüllt wie beim Aufgeben einer Bestellung (2)content-type - application/json
ein JSON-Objekt mit zwei Feldern
order_id mit derselben Bestell-ID wie die ursprüngliche Bestellungtotal mit dem Gesamtwert der Bestellung (d. h. die Summe von Preis x Menge für jede Kuchenart){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Hinweis: Wenn ein Aktualisierungsversuch fehlschlägt, dürfen keine Änderungen an der bestehenden Bestellung vorgenommen werden.
Eine Bestellung löschen. Nur erlaubt, wenn der Status noch pending ist.
DELETE
/order/{orderId}
orderId gibtpending ist (d. h. in progress oder completed)Die generierte Bestell-ID sollte eindeutig sein, ein String sein und die String-Darstellung einer gültigen Zahl sein (z. B. "1", "1234").
configurable-Variable port mit dem Standardwert 8080, um den Port anzugeben, auf dem der Dienst lauscht.orderStatus-Map auf Modulebene, um den Status der Bestellungen zu verwalten, wobei der Wert entweder "pending", "in progress" oder "completed" ist, zugeordnet zur zufällig generierten Bestell-ID als String.
"pending", "in progress" oder "completed")orderStatus-Map mit dem Wert "pending" für jede neue Bestellung.Die Speisekarte abrufen.
$ curl -v http://localhost:8080/menu
< HTTP/1.1 200 OK
< content-type: application/json
{"Butter Cake":15, "Chocolate Cake":20, "Tres Leches":25}
Versuch, die Bestellung mit einer gültigen Payload aufzugeben.
$ 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}
Hinweis: „order_id“ sollte/wird ein zufällig generierter eindeutiger String sein.
Versuch, die Bestellung mit einer Payload aufzugeben, die nicht dem erwarteten Format entspricht.
$ 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) kann verwendet werden, um order (ein Schlüsselwort) als Pfad zu nutzen.Melde dich bei Exercism an, um Ballerina mit 60 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.