मैं डब्ल्यूसीएफ डेटा सेवाओं (ओडाटा वी 3 एप्लिकेशन/जेसन, ओडाटा = वर्बोज़ पेलोड प्रारूप का उपयोग कर ओडीटा सेवा का उपयोग करके एक साधारण परिदृश्य था जो मैंने सोचा था, इसे लागू करने की कोशिश कर रहा हूं। मैं JSON लाइट प्रारूप का उपयोग कर सकता हूं भविष्य)। बुनियादी परिदृश्य इस प्रकार है:मैं ओडाटा इकाई को कैसे अपडेट करूं और एक अनुरोध में अपनी नेविगेशन गुणों को संशोधित कैसे करूं?
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual PersonCategory Category { get; set; }
}
class PersonCategory
{
public int ID { get; set; }
public string Description { get; set; }
public virtual ICollection<Person> People { get; set; }
}
अब, मैं एक व्यक्ति के लिए एक सरल संपादित करें पृष्ठ बनाना चाहते हैं:
मैं दो संस्थाओं की है। इस संपादन पृष्ठ में नाम के लिए इनपुट हो सकता है, और व्यक्ति की श्रेणी के लिए इनपुट या ड्रॉप-डाउन हो सकता है।
तो, परिदृश्य जाता है:
- कोड व्यक्ति $ का उपयोग कर श्रेणी के लिए विस्तार डाउनलोड: प्राप्त /api.svc/People(1)?$expand=Category
- उपयोगकर्ता संपादन दोनों व्यक्ति के नाम संपत्ति और उनकी श्रेणी।
- पृष्ठ के लिए कोड उस व्यक्ति का नाम और श्रेणी गुण अपडेट करने का एकमात्र अनुरोध करता है।
यहां कुंजी "एक ही अनुरोध" में है। यह वह हिस्सा है जिसके लिए मुझे दस्तावेज़ ढूंढने में परेशानी हो रही है। मैंने उदाहरण देखे हैं जहां उन्होंने उपरोक्त संख्या 3 को दो अनुरोधों में विभाजित किया है। कुछ इस तरह (मैं सही प्रारूप याद नहीं है - मैं भी यकीन नहीं है अगर आप PUT करने से पहले श्रेणी लिंक हटाने के लिए होगा):
PATCH /api.svc/People(1) with content: {"Name": "new name" }
PUT /api.svc/People(1)/$links/Category with content: { "url": "/api.svc/Categories(2)" }
लेकिन, मैं भी यह सुना है ने कहा, लेकिन प्रदर्शित नहीं किया है, कि व्यक्ति अद्यतन में अन्य परिवर्तनों के साथ निर्दिष्ट श्रेणी नेविगेशन संपत्ति में बदलाव के साथ एक ही अनुरोध के रूप में इस अद्यतन को लागू करना संभव है। क्या कोई मुझे उदाहरण दे सकता है कि यह कैसे किया जा सकता है? साथ ही, क्या आप मुझे दिखा सकते हैं कि यह कई से अधिक नेविगेशन प्रॉपर्टी के साथ कैसे किया जाएगा, जैसा कि मैंने ऊपर वर्णित एक से अधिक के विरोध में किया है।
और अंत में, मैं वर्तमान में वर्बोज़ JSON प्रारूप, V3 का उपयोग कर रहा हूं। यदि मैं इसके बजाय नए JSON प्रकाश प्रारूप का उपयोग करता हूं तो ऊपर दिए गए प्रश्नों के आपके उत्तर अलग होंगे? यदि हां, तो कैसे?
आप बैच अनुरोध भेज सकते हैं - यह एक ही अनुरोध होगा जिसमें दोनों ऑपरेशन होंगे। – Pawel
क्या बैच अनुरोध के अलावा ऐसा करने का कोई और तरीका नहीं है? इससे क्लाइंट पक्ष पर राउंड-ट्रिपिंग कोड में कुछ अतिरिक्त जटिलता शामिल होगी जिसे मैं टालना पसंद करूंगा। आदर्श रूप में मैं बस अपने पैच/एपीआई/गतिविधि (1) अनुरोध को कुछ ऐसा करने के लिए प्रारूपित करना चाहता हूं: {"श्रेणी": {"__deferred": {"uri": "/api.svc/Categories(2)"} }} हालांकि यह काम करने के लिए प्रतीत नहीं होता है। मुझे 204 प्रतिक्रिया मिलती है, लेकिन संपत्ति सर्वर की तरफ अपरिवर्तित बनी हुई है। –
इसलिए गहरे अपडेट (जो आप यहां चाहते हैं) कहा जाता है, वे डब्ल्यूसीएफ डाटा सर्विसेज द्वारा समर्थित नहीं हैं। वास्तव में ओडाटा भी वास्तव में इसे परिभाषित नहीं करता है। यह कुछ मामलों में इसका अर्थ क्या है इसके बजाय यह जटिल हो सकता है। मुझे डर है बैच इस के लिए एकमात्र समाधान है। गहरे आवेषण समर्थित हैं (लेकिन फिर से केवल प्रविष्टियां, मौजूदा कुछ भी संशोधित नहीं) हालांकि। –