REST मॉडल में नेस्टिंग संसाधनों का उचित तरीका क्या है?


14

मैं सेवा की एक REST API डिजाइन कर रहा हूं और उचित संसाधनों पर घोंसला बनाने के लिए अटक गया हूं।

संसाधन: भागीदार, टिकट, सेटिंग्स

संसाधनों के बीच संबंध:

  • साथी के पास कई टिकट हैं,
  • पार्टनर ने सेटिंग की,

Bussines तर्क:

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

मैंने अब तक क्या किया:

साझेदार संसाधन

GET / साझेदार - सभी भागीदारों की सूची
GET / साझेदार /: id - द्वारा निर्दिष्ट साथी के विवरण दिखाएं: id पैरामीटर
GET / साझेदार /: साझेदार_द / टिकट - साथी के टिकटों की सूची
GET / साझेदार /: साथी_id / टिकट / आईडी - विवरण निर्दिष्ट साथी के टिकट
POST / साझेदार /: partner_id / टिकट - नए टिकट
PUT / साझेदार / बचाता है : partner_id / टिकट /: id - द्वारा निर्दिष्ट टिकट को अपडेट करता है: id पैरामीटर
GET / भागीदारों /: partner_id / settings - सूची भागीदार की सेटिंग
PUT / Partners /: partner_id / settings - पार्टनर की सेटिंग अपडेट करें

समस्या / प्रश्न

क्या संसाधनों को अलग करने के लिए नेस्टेड संसाधनों (टिकट, सेटिंग्स) को विभाजित करना या उन्हें अलग संसाधनों के रूप में डुप्लिकेट करना उचित होगा?

उदाहरण के लिए

GET / टिकट /: आईडी
POST / टिकट
PUT / टिकट /: आईडी

GET /
Settings PUT / settings करें

जवाबों:


8

HATEOAS :

GET /partners/:partner_id/tickets - पार्टनर के टिकटों की सूची, यानी यूआरआई की सूची, संभवत: फॉर्म की वापसी /tickets/:id

GET /partners/:partner_id/tickets/:id - जरूरत नहीं

POST /partners/:partner_id/tickets - एक टिकट बनाता है और साथी को सहयोगी बनाता है, फॉर्म के नए यूआरआई के साथ एक 201 देता है /tickets/:id


2
अब मुझे और समझ में आया। बहुत बहुत धन्यवाद :) लेकिन प्रदर्शन के बारे में क्या? उस स्थिति को मान लेने दें: आप कुछ संक्षिप्त सूचनाओं के साथ टिकटों की सूची बनाना चाहते हैं। आपको साथी के लिए टिकटों की सूची का अनुरोध करना होगा और उसके बाद प्रत्येक टिकट को अलग-अलग अनुरोध करना होगा। क्या मैं सही हू?
प्रिजेमेक

सही है। या आप /partners/:partner_id/ticketsसूची बना सकते हैं प्रत्येक टिकट के लिए कुछ उपयोगी डेटा शामिल हैं, न कि केवल टिकट के विहित यूआरआई। उदाहरण के लिए, JSON में हो सकता है [{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}], इसलिए क्लाइंट तुरंत कुछ तालिका दिखा सकता है, और अतिरिक्त हेरफेर के लिए पूर्ण टिकट संसाधन (एस) प्राप्त कर सकता है।
जेवियर

ठीक है यह स्पष्ट है।
प्रेज़ेमेक

Btw। / साझेदार /: साझेदार के लिए / टिकट / टिकट साथी या टिकट संसाधन अनुभाग में दिए जाने चाहिए?
प्रेजेमेक

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