2013-11-15 12 views
12

में बनाम बनाम लिंक शामिल करें तो एक विश्वसनीय एपीआई के लिए सामान्य पैटर्न एक ऑब्जेक्ट को एम्बेडेड लिंक के साथ वापस करना है जिसका उपयोग आप संबंधित ऑब्जेक्ट्स को पुनर्प्राप्त करने के लिए कर सकते हैं। लेकिन कभी-कभी सुविधा के लिए आप ऑब्जेक्ट ग्राफ़ के एक पूरे हिस्से को एक बार में खींचना चाहते हैं।रीस्टफुल एपीआई

उदाहरण के लिए, मान लीजिए कि आप ग्राहकों, आदेश, और रिटर्न के साथ एक दुकान आवेदन डालते हैं। तुम्हें पता है, एक साथ, ग्राहक आईडी 12345 (संभवतः वहाँ हमेशा नहीं लौटने के आदेश और ग्राहक व्यक्तिगत जानकारी के साथ रिटर्न के लिए अच्छे कारणों।)

विशुद्ध रूप से RESTful रास्ता के लिए व्यक्तिगत जानकारी, सभी आदेशों, और सभी रिटर्न प्रदर्शित करना चाहते हैं

  1. GET /
    • ग्राहकों
  2. के लिए क्वेरी करने के लिए एक सहित लिंक टेम्पलेट की सूची देता है, ऐसा करने के लिए कुछ की तरह है 210
  3. GET /customers/12345
    • रिटर्न ग्राहक व्यक्तिगत जानकारी
    • रिटर्न लिंक इस ग्राहक के आदेश प्राप्त करने के लिए (/ से लिंक टेम्पलेट के आधार पर) और रिटर्न
  4. GET /orders?customerId=12345 (/customers/12345 से प्रतिक्रिया)
    • आदेश हो जाता है ग्राहक 12345
  5. GET /returns?customerId=12345 (/customers/12345 से प्रतिक्रिया)
    • ग्राहक 12345

के लिए रिटर्न हो जाता है लेकिन यह अच्छा है एक बार आप, customers यूआरआई है एक क्वेरी में सभी वापस इस खींचने के लिए सक्षम होने के लिए होगा, । क्या इस तरह की सुविधा क्वेरी के लिए सबसे अच्छा अभ्यास है, जहां आप एकाधिक अनुरोध करने के बजाय कुछ या सभी लिंक को स्थानांतरित करना चाहते हैं? मैं कुछ ऐसा सोच रहा हूं:

GET /customers/12345?include=orders,returns 

लेकिन अगर कोई तरीका है कि लोग इसे बाहर कर रहे हैं तो मैं बस कुछ नहीं करूँगा।

(Fwiw, मैं एक दुकान का निर्माण नहीं कर रहा हूँ, तो चलो के बारे में इन मॉडल, या कैसे आप वास्तविक उत्पादों, या जो कुछ भी करने के लिए नीचे ड्रिल करने जा रहे हैं के लिए सही वस्तुओं रहे हैं कि क्या वक्रोक्ति नहीं करते हैं।)


जोड़ने के लिए अपडेट किया गया: ऐसा लगता है कि HAL speak में इन 'एम्बेड किए गए संसाधन' कहा जाता है है, लेकिन पता चला उदाहरण में, वहाँ किसी भी तरह से जो संसाधनों एम्बेड करने के लिए चयन करने के लिए होने के लिए प्रतीत नहीं होता।मैं one blog post पाया कि मैं क्या ऊपर वर्णित की तरह कुछ सुझाव दे, क्वेरी पैरामीटर के रूप embed का उपयोग कर:

GET /ticket/12?embed=customer.name,assigned_user 

यह एक मानक या अर्द्ध मानक अभ्यास, या बस कुछ एक ब्लॉगर बना है?

उत्तर

1

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

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

+1

आपके द्वारा प्रदान किया गया $ विस्तार पैरामीटर लिंक टूटा हुआ है। –

+1

टूटा हुआ लिंक प्रतिस्थापित किया जाना चाहिए [इस पृष्ठ] के $ विस्तार अनुभाग (http://www.odata.org/blog/enhancing-odata-support-for-querying-derived-types-revisited/)। – Leith

+0

धन्यवाद, लीथ! फिक्स्ड। –

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