2012-08-14 35 views
32

के लिए प्राप्त में सरणी पासिंग मैं इस तरह एक उपयोगकर्ता के लिए नियुक्तियों को लाने के लिए एक यूआरएल है:से REST कॉल

/user/:userId/appointments 

कैसे यूआरएल की तरह अगर मैं एकाधिक उपयोगकर्ताओं के लिए नियुक्तियों प्राप्त करना चाहते हैं देखना चाहिए?

यह होना चाहिए:

/appointments?users=1d1,1d2.. 

धन्यवाद, क्रिस।

उत्तर

43

संग्रह एक संसाधन हैं इसलिए/नियुक्ति संसाधन के रूप में ठीक है।

संग्रह आमतौर पर क्वेरीस्ट्रिंग के माध्यम से फ़िल्टर प्रदान करते हैं जो अनिवार्य रूप से उपयोगकर्ता = id1, id2 ... है।

तो,

/appointments?users=id1,id2 

फ़िल्टर किए गए RESTful संसाधन के रूप में ठीक है।

1
/appointments?users=1d1,1d2.. 

ठीक है। यह आपके एकमात्र समझदार विकल्प है क्योंकि आप एक जीईटी के साथ शरीर में नहीं जा सकते हैं।

6

मुझे लगता है कि, अपने REST कॉल मानकों को क्रमानुसार करने आमतौर पर करके एक बेहतर अभ्यास है उन्हें JSON-एन्कोडिंग:

/appointments?users=[id1,id2] 

या यहाँ तक कि:

/appointments?params={users:[id1,id2]} 

उसके बाद आप उन्हें सर्वर पर अन-सांकेतिक शब्दों में बदलना । यह आपको लंबे समय तक अधिक लचीलापन देने जा रहा है।

बस आप उन्हें भेजने से पहले पैराम को यूआरएलएनकोड करना सुनिश्चित करें!

+2

? {उपयोगकर्ता: [id1, id2]} क्वेरीस्ट्रिंग पैराम सम्मेलनों का पालन नहीं करता है? Key1 = val2 और key2 = val2। – bryanmac

+0

अच्छी पकड़! फिक्स करने के लिए संपादन ... – sgress454

+1

इसके अलावा, क्या आपके पास क्वेरीस्ट्रिंग फ़िल्टर में सीरियलाइज्ड ऑब्जेक्ट्स की पेशकश करने वाली प्रमुख सेवाओं का उदाहरण है? जो मैंने देखा है, उससे ओमाटा – bryanmac

-1

http GET का उपयोग करने के बजाय, http POST का उपयोग करें। और जेएसओएन। या एक्सएमएल

इस प्रकार सर्वर पर आपका अनुरोध स्ट्रीम कैसा दिखता है।

POST /appointments HTTP/1.0 
Content-Type: application/json 
Content-Length: (calculated by your utility) 

{users: [user:{id:id1}, user:{id:id2}]} 

या XML में,

POST /appointments HTTP/1.0 
Content-Type: application/json 
Content-Length: (calculated by your utility) 

<users><user id='id1'/><user id='id2'/></users> 

आप निश्चित रूप से के रूप में यह निश्चित रूप से आसान है, जैसा कि आप का प्रस्ताव किया है प्राप्त का उपयोग जारी रखने सकता है।

/appointments?users=1d1,1d2 

जिसका अर्थ है कि आपको अपने डेटा संरचनाओं को बहुत सरल रखना होगा।

हालांकि, यदि आपकी डेटा संरचना अधिक जटिल हो जाती है, तो http GET और JSON के बिना, आपके प्रोग्रामिंग और डेटा को पहचानने की क्षमता बहुत मुश्किल हो जाती है।

इसलिए, जब तक कि आप अपनी डेटा संरचना को सरल नहीं रख सकें, मैं आपको डेटा हस्तांतरण ढांचे को अपनाने का आग्रह करता हूं। यदि आपके अनुरोध ब्राउज़र आधारित हैं, तो उद्योग सामान्य अभ्यास JSON है। यदि आपके अनुरोध सर्वर-सर्वर हैं, तो एक्सएमएल की तुलना में सबसे सुविधाजनक ढांचा है।

JQuery

अपने ग्राहक एक ब्राउज़र है और आप GWT उपयोग नहीं कर रहे हैं, तो आप jQuery बाकी उपयोग करने पर विचार करना चाहिए। JQuery के साथ रीस्टफुल सेवाओं पर Google।

+5

जैसे अल्पविराम सीमित विकल्पों या क्वेरी प्रारूपों के सबसे सरल फ़िल्टर प्रदान करते हैं, मुझे नहीं लगता कि यह इसके बारे में जाने का सही तरीका है। आप एक संसाधन प्राप्त कर रहे हैं जो एक नया पोस्ट नहीं कर रहा है। –

+1

मुझे नहीं लगता कि आप http GET/POST उपयोगों को समझते हैं। वे उन शब्दों के लिए अंग्रेजी शब्दकोष के अनुरूप नहीं हैं। पोस्ट प्राप्त करने का प्रयास करते समय पोस्ट होता है लेकिन तर्कों के साथ यूआरएल में नहीं बल्कि आईओ स्ट्रीम में रखा जाता है। –

+1

पोस्ट विधि की अपर्याप्त समझ के साथ किसी को भी परेशान करना बहुत मुश्किल है, लेकिन मुझे अंग्रेजी वोट करने के अर्थ के आधार पर, मुझे वोट देने के लिए बहुत परेशान है। आप उन लोगों द्वारा किए गए वाक्य रचनात्मक निर्णयों के लिए मुझे दोष नहीं दे सकते जिन्होंने इसे इस तरह परिभाषित करना चुना। दूत को मत मारो। –

3

ऐसा करने का एक और तरीका, जो आपके सर्वर आर्किटेक्चर/पसंद के ढांचे के आधार पर समझ में आता है, वही तर्क दोबारा दोहराना है। कुछ इस तरह:

/appointments?users=id1&users=id2 

इस मामले में एकवचन में मैं पैरामीटर नाम का उपयोग करना चाहिये:

/appointments?user=id1&user=id2 

इस तरह जर्सी (जावा के लिए) के रूप में चौखटे द्वारा मूल रूप से समर्थित है। अधिक जानकारी के लिए this question पर एक नज़र डालें।