REST करने का उचित तरीका क्या है?


36

आजकल हर कोई SOA करता है , भले ही कुछ वास्तव में यह न समझें कि आखिर क्या है। तो वे गलत करते हैं। एक सादृश्य के रूप में इसका उपयोग करके मुझे पता है कि REST क्या है (या कम से कम मुझे लगता है कि मैं ऐसा करता हूं) और इसमें से कुछ करना चाहता हूं। लेकिन मैं इसे सही करना चाहता हूं।

तो मेरा सवाल यह है कि REST करने का उचित तरीका क्या है?


1
स्टैक ओवरफ्लो 'बाकी' टैग विकी के रूप में स्टैक एक्सचेंज नेटवर्क के संदर्भ में विहित संसाधन के रूप में करीब हो गया लगता है
gnat

17
मैंने बस थोड़ी देर के लिए अपनी आँखें बंद कर लीं ... शायद बाइक की सवारी के लिए चला गया और फिर लेट गया।
एडवर्ड स्ट्रेंज

क्या मूल रूप से केवल एक url जैसे mydomain.com/accounts और एक ऑपरेशन को शुरू करने के लिए एक HTTP क्रिया का उपयोग नहीं है? जहां क्रिया इंगित करती है कि क्या आप डेटा प्राप्त करना, बनाना, अपडेट करना या हटाना चाहते हैं? जब मुझे लगता है कि बाकी मैं ऐसा सोचता हूं।
मफिन मैन

2
@ निक, वह सबसे आम व्याख्या है, 'वास्तविक चीज' बहुत अधिक कठिन है, और (जहाँ तक मैं बता सकता हूँ) वास्तव में कहीं भी लागू करने के लिए बहुत कठिन है ... (विल्क का जवाब देखें)
बेंजोल

3
@ आपकी समझ में REST नहीं है, यह HTTP पर RPC है

जवाबों:


30

खैर, बहुत सारे तरीके हैं जानने के लिए कि कैसे एक RESTful वेब एप्लिकेशन का निर्माण किया जाए और नहीं, कोई अनूठा सही तरीका नहीं है। रेस्टफुल एक मानक नहीं है, लेकिन यह मानकों (HTTP, URI, माइम टाइप, ...) के एक सेट का उपयोग करता है।

इसके साथ शुरू करें: मैंने अपनी पत्नी को कैसे समझाया

फिर, इसके साथ आगे बढ़ें: Restful Web Services Cookbook

और फिर वेब अनुप्रयोगों को विकसित करने के लिए अपना पूरा प्रयास करें क्योंकि सीखने का सबसे अच्छा तरीका प्रयोग कर रहा है और आप अपनी गलतियों से बहुत कुछ सीख सकते हैं;)

अगर आपका पहला वेब ऐप पूरी तरह से Restful नहीं होगा, तो चिंता न करें: आपको इसे करने का तरीका मिल जाएगा!

तो, ओबी-वान केनबी को उद्धृत करते हुए, "बल आपके साथ हो सकता है!" ;)

संपादित करें

ठीक है, मुझे और अधिक विशिष्ट होने दें। तुम कुछ खुश करना चाहते हैं webapp, हुह? खैर, जैसा कि मैंने कहा कि इसे करने के कई तरीके हैं लेकिन यह मुख्य दिशानिर्देश है।

परिभाषा

REST (प्रतिनिधि राज्य स्थानांतरण) वितरित प्रणाली (जैसे WWW) के लिए एक सॉफ्टवेयर आर्किटेक्चर की शैली है। यह एक मानक नहीं है, लेकिन यह मानकों के एक सेट का उपयोग करता है: HTTP, AJAX, HTML, URI, माइम प्रकार, आदि। हम किसी संसाधन के प्रतिनिधित्व के बारे में बात कर रहे हैं, न कि किसी संसाधन के बारे में। 'मैंने अपनी पत्नी को कैसे समझाए' से लिया:

पत्नी : एक वेब पेज एक संसाधन है?

रयान : की तरह। एक वेब पेज एक संसाधन का एक प्रतिनिधित्व है। संसाधन सिर्फ अवधारणाएं हैं।

आर्किटेक्चर की बाधाएं

  • क्लाइंट-सर्वर : क्लाइंट और सर्वर यूनिफ़ॉर्म इंटरफ़ेस (नीचे वर्णित) द्वारा अलग किए जाते हैं।
  • स्टेटलेस : सर्वर-क्लाइंट संचार सर्वर पर किसी विशेष क्लाइंट स्थिति को सहेजे बिना किया जाता है।
  • Cachable : क्लाइंट के पास पहले से किए गए अनुरोधों की प्रतिक्रियाओं का एक कैश हो सकता है।
  • स्तरित प्रणाली : क्लाइंट को यह नहीं पता होता है कि यह सीधे एंड-सर्वर से जुड़ा है या यदि संचार मध्यवर्ती के माध्यम से किया जाता है।

यूनिफ़ॉर्म इंटरफ़ेस

  • संसाधन की पहचान : प्रत्येक संसाधन की पहचान एक यूआरआई द्वारा की जानी चाहिए।
  • प्रोटोकॉल : संचार क्लाइंट और सर्वर में प्राप्त करने के लिए, एक प्रोटोकॉल पहले किया जाना है। प्रत्येक अनुरोध में सही MIME प्रकार (एप्लिकेशन / xml, पाठ / HTML, एप्लिकेशन / rdf + xml, आदि), सही शीर्ष लेख और सही HTTP विधि (नीचे CRUD विवरण देखें) हो सकता है।

CRUD

ठीक है, हमने देखा कि संसाधनों की पहचान करने के लिए हम यूआरआई का उपयोग कर सकते हैं, लेकिन हमें क्रियाओं के लिए कुछ और चाहिए (जोड़ें, संशोधित करें, हटाएं, आदि): सीआरयूडी (क्रिएट, रीड, अपडेट और डिलीट) का शानदार स्वागत।

  • बनाएं { HTTP: पोस्ट } { एसक्यूएल: सम्मिलित करें } => एक नया संसाधन बनाने
  • पढ़ें { HTTP: प्राप्त } { एसक्यूएल: चयन } => प्राप्त एक संसाधन
  • अद्यतन { HTTP: PUT } { SQL: UPDATE } => एक संसाधन को संशोधित करें
  • हटाएँ { : नष्ट करें HTTP {} एसक्यूएल: हटाने } => एक संसाधन हटाना

अब, PUT और DELETE के विषय में, कुछ तकनीकी समस्याएं दिखाई दे सकती हैं (आप उन्हें HTML फॉर्म के साथ प्राप्त कर सकते हैं): अक्सर डेवलपर्स प्रत्येक 'PUT' और 'DELETE' अनुरोध के लिए POST का उपयोग करके इस समस्या को दरकिनार कर देते हैं। आधिकारिक तौर पर, आपको PUT और DELETE का उपयोग करना होगा। वैसे, आप जो चाहते हैं वो करें। मेरा अनुभव मुझे हर बार POST और GET का उपयोग करने के लिए प्रेरित करता है।

--- अगले भाग का उपयोग किया जाना चाहिए लेकिन यह REST का बंधन नहीं है: यह लिंक्ड डेटा की चिंता करता है ---

यूआरआई

तकनीकी विवरण से सार URI! यूआरआई को अलविदा कहिए:

http://www.example.com/index.php?query=search&id=9823&date=08272012

यूआरआई फिर से डिजाइन! उपरोक्त लिंक लें और इसे निम्नानुसार बदलें:

http://www.example.com/search/2012/08/27/9823

यह बेहतर है, हुह? यह द्वारा किया जा सकता है:

एक और बात: विभिन्न संसाधनों का प्रतिनिधित्व करने के लिए अलग-अलग यूआरआई का उपयोग करें:

ध्यान दें : about.html और about.rdf फाइलें नहीं हैं! वे एक XSLT परिवर्तन का परिणाम हो सकता है!

सामग्री बातचीत

यदि आप इस बिंदु पर पहुंच गए हैं, तो बधाई! संभवतः, आप अधिक अमूर्त अवधारणाएँ प्राप्त करने के लिए तैयार हैं क्योंकि हम सेमेटिक वेब तकनीकी विवरणों में प्रवेश कर रहे हैं;) ठीक है, जब आपका ग्राहक एक संसाधन चाहता है, तो यह आम तौर पर निम्नलिखित अनुरोध करता है:

GET http://www.example.com/about
Accept: application/rdf+xml

लेकिन सर्वर इस बारे में कोई प्रतिक्रिया नहीं देगा। क्योंकि इसमें एक अलग URI ( http://www.example.com/about.rdf ) है। तो, चलिए 303 पैटर्न पर एक नजर डालते हैं ! सर्वर इसे लौटाएगा:

303 See Other
Location: http://www.example.com/about.rdf

और ग्राहक निम्नानुसार दिए गए लिंक का अनुसरण करेगा:

GET http://www.example.com/about.rdf
Accept: application/rdf+xml

अंत में, सर्वर अनुरोधित संसाधन लौटाएगा:

200 OK
about.rdf

चिंता न करें: आपका क्लाइंट एप्लिकेशन इसमें से कुछ भी नहीं करेगा! 303 पैटर्न सर्वर एप्लिकेशन द्वारा किया जाना चाहिए और आपका ब्राउज़र बाकी काम करेगा;)

निष्कर्ष

अक्सर सिद्धांत बहुत दूर है, अभ्यास से बहुत दूर है। हाँ, अब आप जानते हैं कि कैसे एक Restful एप्लिकेशन को डिज़ाइन और विकसित करना है लेकिन ऊपर दिए गए दिशानिर्देश केवल एक संकेत है। आपको वेब एप्लिकेशन बनाने का अपना सबसे अच्छा तरीका मिल जाएगा और शायद यह वैसा नहीं होगा जैसा कि सिद्धांत चाहता है। यह एक लानत मत करो: डी!

ग्रन्थसूची

रेस्टफुल वेब सर्विसेज, समीर त्यागी

बाकी एपीआई हाइपरटेक्स्ट-चालित, रॉय थॉमस फील्डिंग होना चाहिए

प्रतिष्ठित वेब सेवाएं: मूल बातें, एलेक्स रोड्रिगेज

वेबर रीस्ट वर्कफ़्लो


1
आप इस लिंक को जोड़ने पर विचार कर सकते हैं , जो कि मेरा पूरा गाइड है।
बेंजोल

मैंने उनके अर्थों के साथ PUT और POST का उपयोग किया है (आपके उत्तर के संबंध में) अदला-बदली: POST -> create, PUT - अपडेट। कोई भी विचार जिसका अर्थ अधिक व्यापक रूप से उपयोग किया जाता है?
एंड्रेस एफ।

@Andres F .: jcalcote.wordpress.com/2008/10/16/… कहते हैं: बनाएँ = यदि आप निर्दिष्ट संसाधन (URL) की पूरी सामग्री भेज रहे हैं, तो भेजें । यदि आप कुछ सर्वर-साइड एल्गोरिथ्म का उपयोग करके निर्दिष्ट संसाधन के अधीनस्थ बनाने के लिए सर्वर पर कमांड भेज रहे हैं, तो = पोस्ट बनाएं। अद्यतन = यदि आप निर्दिष्ट संसाधन की पूरी सामग्री को अपडेट कर रहे हैं तो पीयूटी। अद्यतन = POST यदि आप सर्वर से निर्दिष्ट संसाधन के एक या अधिक अधीनस्थों को अद्यतन करने का अनुरोध कर रहे हैं।
विल्क

@ बैंजोल: मैं आपके सुझाव के साथ संपादित करने जा रहा हूं;) धन्यवाद!
विल्क

1
@Wilk कुछ बहुत सी बातों पर विचार करें! संभवतः किसी को यह अधिकार क्यों नहीं मिला: पी
एंड्रेस एफ

5

REST बाईबल पुस्तक या कुछ और ...।

कोई बाइबिल आवश्यक पुस्तक; मेरे पास एक ही सटीक प्रश्न थे, और इन तीनों लेखों को पढ़कर मुझे जो कुछ भी चाहिए था, उसके बारे में जानना या REST के बारे में जानना चाहते थे:

  1. एक शुरुआती का परिचय HTTP और REST नेट नेट + से
  2. प्रतिष्ठित वेब सेवाएं: आईबीएम डेवलपरवेयर से मूल बातें
  3. InfoQ से व्यवहार्य HTTP

लेकिन मैं इसे सही करना चाहता हूं।

जैसा कि आप ऊपर के लेखों में पढ़ चुके हैं, कुंजी आपके एप्लिकेशन के सुलभ टुकड़ों को "संसाधन" के रूप में सोचने की है जो मौजूदा HTTP "क्रियाओं" का उपयोग करके बनाया, पुनर्प्राप्त, अद्यतन या हटाया जा सकता है: GET, PUT, POST , DELETE।

इसके अलावा, PUT और POST के बीच अंतर को जानें , और उनका उपयोग कब करें। GET, PUT, और DELETE को बेरोजगार लेनदेन होना चाहिए, POST नहीं होना चाहिए।

साथ ही, क्लाइंट को वापस संचार करते समय HTTP स्थिति कोड का उचित उपयोग करें।

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