एक OO मॉडल के साथ REST [api] संरचना की तुलना में, मुझे ये समानताएं दिखाई देती हैं:
दोनों:
क्या डेटा ओरिएंटेड हैं
- REST = संसाधन
- ऊ = वस्तुएँ
डेटा के आसपास संचालन
- REST = चारों ओर VERBS (Get, Post, ...) संसाधनों के आसपास
- OO = इनकैप्सुलेशन द्वारा ऑब्जेक्ट्स के आसपास ऑपरेशन को बढ़ावा देना
हालाँकि, अच्छा OO अभ्यास हमेशा REST एपिस पर नहीं खड़ा होता है जब उदाहरण के लिए मुखौटा पैटर्न लागू करने की कोशिश की जाती है: REST में, आपके पास सभी अनुरोधों को संभालने के लिए 1 नियंत्रक नहीं है और आप आंतरिक ऑब्जेक्ट जटिलता को नहीं छिपाते हैं।
इसके विपरीत, REST संसाधन और अन्य के साथ कम से कम दो रूपों में सभी संबंधों के प्रकाशन को बढ़ावा देता है:
संसाधन पदानुक्रम संबंधों के माध्यम से (आईडी 43 का एक संपर्क 453 पते से बना है):
/api/contacts/43/addresses/453
REST json प्रतिक्रिया में लिंक के माध्यम से:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
OO में वापस आकर, मुखौटा डिज़ाइन पैटर्न Low Coupling
किसी ऑब्जेक्ट और उसके ' ऑब्जेक्ट ' क्लाइंट के बीच और High Cohesion
इस ऑब्जेक्ट और इसके आंतरिक ऑब्जेक्ट कंपोज़िशन ( objectC , objectD ) के लिए सम्मान करता है । साथ objectA इंटरफेस, इस पर सीमा प्रभाव के लिए एक डेवलपर के लिए अनुमति देते objectB की objectA आंतरिक परिवर्तन (में objectC और objectD ), जब तक कि objectA एपीआई (संचालन) अभी भी सम्मान किया जाता है।
REST में, डेटा (संसाधन), संबंध (लिंक), और व्यवहार (क्रिया) विभिन्न तत्वों में विस्फोट होते हैं और वेब पर उपलब्ध होते हैं।
REST के साथ खेलने पर, मेरे ग्राहक और सर्वर के बीच कोड परिवर्तन पर हमेशा प्रभाव पड़ता है: क्योंकि मेरे पास High Coupling
मेरे Backbone.js
अनुरोधों और Low Cohesion
संसाधनों के बीच है।
मैं कभी नहीं पता चल मेरे जाने के लिए कैसे Backbone.js javascript application
के साथ सौदा " बाकी संसाधनों और सुविधाओं " खोज बाकी लिंक द्वारा पदोन्नत। मैं समझता हूं कि डब्ल्यूडब्ल्यूडब्ल्यू को बहु सर्वरों द्वारा सेवा देने के लिए है, और यह कि ओओ तत्वों को वहां कई मेजबानों द्वारा सेवित किया जाना था, लेकिन एक सरल परिदृश्य जैसे "पृष्ठ" को बचाने के लिए, जो अपने पते के साथ संपर्क दिखाता है, मैं इसके साथ समाप्त होता हूं:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
जो मुझे ब्राउज़रों के अनुप्रयोगों (दो संसाधनों को अलग से संबोधित किया जा सकता है) पर बचत कार्रवाई परमाणु लेनदेन संबंधी जिम्मेदारी को आगे बढ़ाने के लिए नेतृत्व करता है।
इसे ध्यान में रखते हुए, अगर मैं अपने विकास को सरल नहीं बना सकता (मुखौटा डिजाइन पैटर्न लागू नहीं है), और अगर मैं अपने ग्राहक के लिए और अधिक जटिलता लाता हूं (लेन-देन परमाणु बचत को संभालना), तो RESTful होने का लाभ कहां है?
PUT /api/contacts/43
आंतरिक वस्तुओं के अपडेट को कैस्केड करने के साथ समस्या क्या है ? मेरे पास इस तरह से डिज़ाइन किए गए बहुत सारे एपीआई थे (मास्टर URL "पूरे" को पढ़ता / बनाता है / अपडेट करता है और उप-यूआरएल टुकड़ों को अपडेट करता है)। बस यह सुनिश्चित करें कि जब कोई बदलाव आवश्यक न हो (प्रदर्शन कारणों से) तो आप पते को अपडेट न करें।