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 फील्ड की वैल्यू 1 से कम हैapplication/json
order_id, जिसमें बेतरतीब ढंग से बनाई गई ऑर्डर 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
दो स्ट्रिंग फील्ड order_id और status वाला एक JSON ऑब्जेक्ट, जो क्रमशः ऑर्डर ID और स्थिति (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, जिसमें मूल ऑर्डर वाली ही ऑर्डर 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)बनाई गई ऑर्डर ID अद्वितीय होनी चाहिए, स्ट्रिंग होनी चाहिए, और किसी मान्य संख्या का स्ट्रिंग रूप होनी चाहिए (जैसे "1", "1234")।
8080 वाला एक configurable वेरिएबल port इस्तेमाल कीजिए।orderStatus मैप इस्तेमाल कीजिए, जिसमें बेतरतीब ढंग से बनाई गई ऑर्डर ID स्ट्रिंग के सामने वैल्यू "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) का उपयोग किया जा सकता है।