CakeStation, una famosa pasticceria che sforna torte di ogni tipo, ti ha chiesto di creare per loro un sistema di gestione degli ordini online.
I dettagli degli articoli del menu sono i seguenti.
| Articolo | Prezzo |
|---|---|
| Butter Cake | 15 |
| Chocolate Cake | 20 |
| Tres Leches | 25 |
Deve essere possibile fare quanto segue.
pending, in progress o completed).pending.pending.Recuperare il menu
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
Effettuare un ordine
Metodo: POST
Percorso: /order
Richiesta
username: lo username dell'utente (string)order_items: un array di oggetti JSON che rappresentano gli articoli dell'ordine. Ogni oggetto JSON conterrà esattamente due campi: un campo item di tipo stringa che indica il nome dell'articolo e un campo quantity di tipo intero che indica la quantità ordinata per quel particolare articolo.{
"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"
]
}
Risposta
username è vuoto, oppureorder_items è vuoto, oppureorder_items contiene più di un oggetto JSON per un particolare tipo di torta, oppureorder_items ha un campo item con un tipo di torta che non è nel menu, oppureorder_items ha un campo quantity con un valore minore di 1application/json
order_id contenente la stringa dell'ID dell'ordine generata casualmente. Deve essere la rappresentazione sotto forma di stringa di un valore numerico valido.total contenente il valore totale (intero) dell'ordine (cioè la somma di prezzo x quantità per ogni tipo di torta){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Recuperare lo stato di un ordine
GET
/order/{orderId}
orderId specificatocontent-type: application/json
un oggetto JSON con due campi di tipo stringa, order_id e status, che rappresentano rispettivamente l'ID dell'ordine e lo stato (uno tra pending, in progress o completed)
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
Aggiornare un ordine. Consentito solo se lo stato è ancora pending.
Metodo: PUT
Percorso: /order/{orderId}
Richiesta
il payload della richiesta sarà un oggetto JSON con un unico campo order_items.
order_items: un array di oggetti JSON che rappresentano gli articoli dell'ordine. Ogni oggetto JSON conterrà esattamente due campi: un campo item di tipo stringa che indica il nome dell'articolo e un campo quantity di tipo intero che indica la quantità ordinata per quel particolare articolo.{
"type": "object",
"properties": {
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"order_items"
]
}
Risposta
orderId specificatopending (cioè in progress o completed)order_items non soddisfa gli stessi requisiti previsti per effettuare l'ordine (2)content-type: application/json
un oggetto JSON con due campi
order_id contenente la stessa stringa dell'ID dell'ordine originaletotal contenente il valore totale dell'ordine (cioè la somma di prezzo x quantità per ogni tipo di torta){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Nota: se un tentativo di aggiornamento fallisce, non deve essere apportata alcuna modifica all'ordine esistente.
Eliminare un ordine. Consentito solo se lo stato è ancora pending.
DELETE
/order/{orderId}
orderId specificatopending (cioè in progress o completed)L'ID dell'ordine generato deve essere univoco, deve essere una stringa e deve essere la rappresentazione sotto forma di stringa di un numero valido (ad esempio "1", "1234").
configurable port con il valore predefinito 8080 per specificare la porta su cui il servizio resta in ascolto.orderStatus a livello di modulo per mantenere lo stato degli ordini, in cui il valore è "pending", "in progress" o "completed" associato alla stringa dell'ID dell'ordine generata casualmente.
"pending", "in progress" o "completed")orderStatus con il valore "pending" per ogni nuovo ordine.Recupero del menu.
$ curl -v http://localhost:8080/menu
< HTTP/1.1 200 OK
< content-type: application/json
{"Butter Cake":15, "Chocolate Cake":20, "Tres Leches":25}
Tentativo di effettuare l'ordine con un payload valido.
$ 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}
Nota: "order_id" sarà, o dovrebbe essere, una stringa univoca generata casualmente.
Tentativo di effettuare l'ordine con un payload che non corrisponde al formato previsto.
$ 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) può essere usato per usare order (che è una parola chiave) come percorso.Iscriviti a Exercism per imparare e padroneggiare Ballerina con 60 esercizi e il mentoring di persone reali, tutto gratis.