REST में इकाई संबंध बनाना: क्या मैं चाइल्ड आईडी पर पोस्ट करके माता-पिता बना सकता हूँ?


9

हम वर्तमान में शास्त्रीय ग्राहक डेटा तक पहुंचने के लिए एक REST API डिज़ाइन कर रहे हैं। एपीआई में तत्वों में से एक उपयोगकर्ता की संपत्ति हैं। परिसंपत्तियाँ किसी दी गई सेवा के तहत जोड़ी जाती हैं। बैकएंड एपीआई किसी दी गई सेवा के तहत केवल उपयोगकर्ता के लिए एक संपत्ति जोड़ देगा। तो, कोई उपयोगकर्ता नहीं है - संपत्ति संबंध, लेकिन एक उपयोगकर्ता - [सेवा] - संपत्ति संबंध।

हमारा यूआरआई इस तरह दिखेगा:

/users/{id}/assets/{id}/services/{id}

एपीआई के उपयोग से नई प्रविष्टि बनाने के लिए संपत्ति आईडी और सेवा आईडी का पता चल जाएगा। हम जिस चीज से जूझ रहे हैं वह इस संबंध का निर्माण है।

एक सीधा तरीका यह होगा कि पूरे संबंध को पोस्ट किया जाए /users/{id}/assets/

POST /users/{id}/assets    
{asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"}

लेकिन तब हम वास्तव में एक संपत्ति नहीं बना रहे हैं जैसा कि यूआरआई इंगित कर सकता है, लेकिन एक परिसंपत्ति-सेवा संबंध।

एक विकल्प के रूप में, हम URI के संबंध को POST'ing पर विचार कर रहे हैं, जो इस प्रकार है:

POST /users/{id}/assets/{id}/service/{id}
{attribute1:"{var}", attribute2:"{var}"}

लेकिन इस मामले में, संसाधन पथ /users/{id}/assets/{id}POST से पहले मौजूद नहीं होगा और इसे साइड-इफ़ेक्ट के रूप में बनाया जाएगा।

क्या POST'ing एक संसाधन पथ है जो अभी तक मौजूद नहीं है?

आपके विचारों के लिए धन्यवाद,

जेरार्ड।

जवाबों:


3

ऐसा लगता है कि आप सुझाव दे रहे हैं कि, जब भी कोई उपयोगकर्ता किसी गैर-मौजूद संबंध में पहली बार पोस्ट करेगा, तो आप इसे पोस्ट के हिस्से के रूप में बनाएंगे।

यदि आप पूछ रहे हैं कि क्या इस तरह का क्रिएट-ऑन-एक्सेस पैटर्न एक मान्य, स्वीकार्य विकास पैटर्न है, तो इसका उत्तर है हां यह है - यह दोनों मान्य है, और देखने के लिए एक काफी सामान्य पैटर्न है।


1
जवाब के लिए धन्यवाद। किसी संदर्भ के लिए कोई संकेत जो मैं परामर्श कर सकता हूं?
मासस

2

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

दूसरा: आपका JSON सही नहीं है, आपको सेवा के साथ एक और वस्तु के रूप में निपटना होगा जैसे कि एसेट ऑब्जेक्ट के अंदर संसाधन URI सेवा "s" में आपको इसके साथ सरणी के रूप में निपटना होगा।

POST /users/{id}/assets    
{asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"}

होना ही पड़ेगा:

POST /users/{id}/assets    
{services:[{ attribute1:"var", attribute2:"var"}]}

यदि आप इस तरह से उपयोग करने जा रहे हैं

तीसरा: मैं डिजाइन प्रस्ताव के लिए इस तरह का उपयोग करना पसंद नहीं करता, अगर यह मामला विफल रहा तो आप कैसे जान सकते हैं कि संपत्ति या सेवा बनाते समय यह विफल हो गया है,


0

यहाँ विचार की एक अलग पंक्ति है:

POST /relationships
{ relationship:${id}, asset:{id}, service:{id}, user:{id}, data:"some data" }

इस तरह आप रिश्तों को संपत्ति, सेवा और उपयोगकर्ता के बीच तीन तरह की कड़ी के रूप में परिभाषित कर रहे हैं और किसी भी श्रेणीबद्ध संबंध को लागू नहीं कर रहे हैं

आप फिर से एक विशिष्ट संबंध प्राप्त कर सकते हैं:

GET /relationships?id="2144321"

या रिश्तों के सबसेट के लिए खोजें:

GET /relationships?user="43434"

या

GET /relationships?asset="12433"

मूल तरीका गलत नहीं है, लेकिन यह दृष्टिकोण आपको अधिक लचीलापन दे सकता है जो इसका उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.