2013-02-14 4 views
9

में HTTP पोस्ट अनुरोध मैं एक विश्वसनीय हैटोज़ एपीआई लिख रहा हूं। मेरे पास कंपाउंड इकाइयां हैं जिन्हें मुझे प्राप्त करना, पोस्ट करना और पुट करना है। जीईटी भाग आसान है, और इसमें कई उदाहरण हैं। प्रतिक्रिया में इकाई के आदिम गुण होते हैं, और नेस्टेड इकाइयों के लिंक होते हैं। उदाहरण के लिए:एक आरईएसटीफ़ुल हैटओएएस एपीआई

{ 
"id":"2", 
"firstName":"Brad", 
"lastName":"Pitt", 
"balance":1234.5, 
"transactions":"http://localhost:8080/jersey-poc/api/v1.1/account/1/transactions", 
"self":"http://localhost:8080/api/v1.1/account/1", 
"accountType":"http://localhost:8080/api/v1.1/account/1/accountType" 
} 

समस्या पैदा होती है जब मैं खाता बनाने या संशोधित करना चाहते हैं। मुझे खाते को एक खाता टाइप के साथ जोड़ना होगा। मैं एक POST अनुरोध भेज सकता हूं जैसे कि: {"firstName":"Michael","lastName":"Jackson","balance":300.0,"accountTypeId":5}
लेकिन यह हैटओएएस प्रतिमान को तोड़ देगा। पोस्ट/पंप यौगिक इकाइयों को सबसे अच्छा अभ्यास क्या है?

उत्तर

4

उस पेलोड के बारे में कुछ भी खास नहीं है जो हैटोस के खिलाफ होगा; केवल वास्तविक समस्या यह है कि accountTypeId बहुत खोजने योग्य नहीं है। (जादू आईडी हमेशा छोटे वर्णनात्मक तारों में मैप किए जाने से बेहतर होती हैं; उनके बारे में सोचें कि एक गणना की तरह है।) हैटओएएस मॉडल पर काम करते समय याद रखने वाली प्रमुख चीजों में से एक यह है कि उपयोगकर्ता पोस्ट जो उपयोगकर्ता पोस्ट करने की आवश्यकता नहीं है वास्तव में वह संस्था जो संसाधन बनाती है; आप इसे संशोधित कर सकते हैं, इसे एनोटेट कर सकते हैं, इसका अनुवाद कर सकते हैं। यह अभी भी अवधारणात्मक रूप से होना चाहिए, लेकिन यह समान होने के लिए बिल्कुल अलग है। (आईडी और सृजन टाइमस्टैम्प जोड़ना उत्कृष्ट उदाहरण होगा कि विस्तार कैसे पूरी तरह से उचित होगा।)

मेरे लिए ऐसा लगता है कि आपकी वास्तविक समस्या यह है कि आपको पोस्ट करने के दौरान केवल जानकारी क्लाइंट को जमा करना चाहिए, और कैसे आप ग्राहकों को बताते हैं कि उन्हें पोस्ट करते समय उन्हें वह जानकारी जमा करनी चाहिए। खुद, मैं यहां अपलोड करने के लिए एक्सएमएल का उपयोग करना पसंद करता हूं, क्योंकि मैं आसानी से ग्राहकों को बता सकता हूं कि उनके पोस्ट पेलोड को किसी विशेष स्कीमा के अनुरूप होना चाहिए (और दोनों एक्सएमएल स्कीमा और रिलाक्स एनजी बाधाओं का वर्णन करने के लिए मेरे लिए पर्याप्त समृद्ध हैं)। मुझे यकीन है कि ऐसा करने का एकमात्र तरीका नहीं है।

+0

धन्यवाद। इससे स्पष्ट हुआ। मुझे यकीन था कि अनुरोध और प्रतिक्रिया समान होना चाहिए। –

संबंधित मुद्दे