http - रीस्टफुल प्रोग्रामिंग वास्तव में क्या है?




rest definition (20)

आरईएसटी क्या है?

आरईएसटी प्रतिनिधि राज्य हस्तांतरण के लिए खड़ा है। (इसे कभी-कभी "रीस्ट" लिखा जाता है।) यह एक स्टेटलेस, क्लाइंट-सर्वर, कैशबल संचार प्रोटोकॉल पर निर्भर करता है - और लगभग सभी मामलों में, HTTP प्रोटोकॉल का उपयोग किया जाता है।

आरईएसटी नेटवर्किंग अनुप्रयोगों को डिजाइन करने के लिए एक वास्तुकला शैली है। विचार यह है कि, मशीनों के बीच कनेक्ट करने के लिए कॉरबा, आरपीसी या एसओएपी जैसी जटिल तंत्रों का उपयोग करने के बजाय, सरल HTTP का उपयोग मशीनों के बीच कॉल करने के लिए किया जाता है।

कई मायनों में, HTTP वाइड वेब स्वयं HTTP पर आधारित है, जिसे आरईएसटी-आधारित आर्किटेक्चर के रूप में देखा जा सकता है। रीस्टफुल एप्लिकेशन एप्लिकेशन (डेटा बनाने और / या अपडेट) पोस्ट करने के लिए HTTP अनुरोधों का उपयोग करते हैं, डेटा पढ़ते हैं (उदाहरण के लिए, क्वेरी बनाते हैं), और डेटा हटाते हैं। इस प्रकार, आरईएसटी सभी चार सीआरयूडी (बनाएँ / पढ़ें / अपडेट / हटाएं) संचालन के लिए HTTP का उपयोग करता है।

आरईएसटी आरपीसी (रिमोट प्रोसेसर कॉल) और वेब सर्विसेज (एसओएपी, डब्ल्यूएसडीएल, एट अल।) जैसे तंत्रों के लिए हल्का विकल्प है। बाद में, हम देखेंगे कि आरईएसटी कितना आसान है।

सरल होने के बावजूद, आरईएसटी पूरी तरह से फीचर्ड है; मूल रूप से ऐसा कुछ भी नहीं है जो आप वेब सेवाओं में कर सकते हैं जो एक विश्वसनीय वास्तुकला के साथ नहीं किया जा सकता है। आरईएसटी एक "मानक" नहीं है। उदाहरण के लिए, आरईएसटी के लिए कभी भी W3C अनुशंसा नहीं होगी। और आरईएसटी प्रोग्रामिंग ढांचे के दौरान, आरईएसटी के साथ काम करना इतना आसान है कि आप अक्सर पर्ल, जावा या सी # जैसी भाषाओं में मानक पुस्तकालय सुविधाओं के साथ "अपना खुद का रोल" कर सकते हैं।

जब मैं आराम के सरल वास्तविक अर्थ को खोजने का प्रयास करता हूं तो मुझे सबसे अच्छा संदर्भ मिला।

http://rest.elkstein.org/

रीस्टफुल प्रोग्रामिंग वास्तव में क्या है?


आरईएसटी एक वास्तुकला शैली है जो वेब-मानकों और HTTP प्रोटोकॉल (2000 में पेश की गई) पर आधारित है।

एक आरईएसटी आधारित वास्तुकला में, सब कुछ एक संसाधन है (उपयोगकर्ता, आदेश, टिप्पणियां)। HTTP मानक विधियों (GET, PUT, पैच, डिलीट इत्यादि) के आधार पर एक संसाधन को एक सामान्य इंटरफ़ेस के माध्यम से एक्सेस किया जाता है।

एक आरईएसटी आधारित वास्तुकला में आपके पास एक आरईएसटी सर्वर है जो संसाधनों तक पहुंच प्रदान करता है। एक आरईएसटी ग्राहक आरईएसटी संसाधनों तक पहुंच और संशोधित कर सकता है।

प्रत्येक संसाधन को HTTP सामान्य संचालन का समर्थन करना चाहिए। संसाधनों को वैश्विक आईडी द्वारा पहचाना जाता है (जो आमतौर पर यूआरआई होते हैं)।

आरईएसटी अनुमति देता है कि संसाधनों के अलग-अलग प्रतिनिधित्व होते हैं, उदाहरण के लिए, टेक्स्ट, एक्सएमएल, जेएसओएन आदि। आरईएसटी क्लाइंट HTTP प्रोटोकॉल (सामग्री वार्ता) के माध्यम से एक विशिष्ट प्रतिनिधित्व के लिए पूछ सकता है।

HTTP विधियां:

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

  • बिना साइड इफेक्ट्स के संसाधन के पढ़ने की पहुंच को परिभाषित करता है। संसाधन जीईटी अनुरोध के माध्यम से कभी नहीं बदला जाता है, उदाहरण के लिए, अनुरोध का कोई दुष्प्रभाव नहीं है (idempotent)।
  • PUT एक नया संसाधन बनाता है। यह भी बेवकूफ होना चाहिए।
  • हटाएं संसाधनों को हटा दें। ऑपरेशन बेवकूफ हैं। वे अलग-अलग परिणामों के बिना दोहरा सकते हैं।
  • POST एक मौजूदा संसाधन अद्यतन करता है या एक नया संसाधन बनाता है।

आरईएसटी डेटा को कुशल बनाने के लिए विभिन्न HTTP विधियों (मुख्य रूप से GET / PUT / DELETE) का उपयोग कर रहा है।

किसी विधि को हटाने के लिए एक विशिष्ट यूआरएल का उपयोग करने के बजाय (कहें, /user/123/delete ), आप /user/[id] को संपादित करने के लिए उपयोगकर्ता को संपादित करने के लिए /user/[id] यूआरएल को एक डेली अनुरोध भेज देंगे, आपके द्वारा भेजे गए उपयोगकर्ता पर जानकारी पुनर्प्राप्त करने के लिए एक अनुरोध /user/[id]

उदाहरण के लिए, इसके बजाय यूआरएल का एक सेट जो निम्न में से कुछ जैसा दिख सकता है ..

GET /delete_user.x?id=123
GET /user/delete
GET /new_user.x
GET /user/new
GET /user?id=1
GET /user/id/1

आप HTTP "क्रियाएं" का उपयोग करते हैं और ..

GET /user/2
DELETE /user/2
PUT /user

आरईएसटी पर एक महान पुस्तक अभ्यास में आरईएसटी है।

पढ़ना चाहिए ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm और roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

एक विश्वसनीय सेवा क्या है, इस पर एक स्पष्टीकरण के लिए मार्टिन फाउलर्स रिचर्डसन परिपक्वता मॉडल (आरएमएम) लेख देखें।

पुनर्स्थापित करने के लिए एक सेवा को हाइपरमीडिया को आवेदन राज्य के इंजन के रूप में पूरा करने की आवश्यकता है (हेटोआस) , यानी, इसे आरएमएम में स्तर 3 तक पहुंचने की जरूरत है, विवरण के लिए लेख या क्यूकन टॉक से स्लाइड पढ़ें

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

...

एक विश्वसनीय एप्लिकेशन के क्लाइंट को केवल इसे एक्सेस करने के लिए एक निश्चित यूआरएल पता होना चाहिए। सभी भविष्य की कार्रवाइयों को उन यूआरएल से लौटाए गए संसाधनों के प्रतिनिधित्व में शामिल हाइपरमीडिया लिंक से गतिशील रूप से खोजा जाना चाहिए। मानकीकृत मीडिया प्रकारों को किसी भी क्लाइंट द्वारा समझा जा सकता है जो एक विश्वसनीय API का उपयोग कर सकता है। (विकिपीडिया, मुक्त विश्वकोश से)

वेब फ्रेमवर्क के लिए आरईएसटी लिटमस टेस्ट वेब ढांचे के लिए एक समान परिपक्वता परीक्षण है।

शुद्ध REST के पास: HATEOAS से प्यार करना सीखना लिंक का एक अच्छा संग्रह है।

सार्वजनिक क्लाउड के लिए एसओएपी बनाम आरईएसटी आरईएसटी उपयोग के मौजूदा स्तर पर चर्चा करता है।

आरईएसटी और वर्जनिंग संशोधनीयता के माध्यम से एक्स्टेंसिबिलिटी, वर्जनिंग , इवोल्वबिलिटी इत्यादि पर चर्चा करता है


मैं कहूंगा कि रीस्टफुल प्रोग्रामिंग सिस्टम (एपीआई) बनाने के बारे में होगा जो आरईएसटी वास्तुशिल्प शैली का पालन करें।

मुझे डॉ। एम। एलकस्टीन द्वारा आरईएसटी के बारे में ट्यूटोरियल समझने और उस भाग को उद्धृत करने के लिए यह शानदार, संक्षिप्त और आसान पाया गया जो अधिकांश भाग के लिए आपके प्रश्न का उत्तर देगा:

http://rest.elkstein.org/

आरईएसटी नेटवर्किंग अनुप्रयोगों को डिजाइन करने के लिए एक वास्तुकला शैली है । विचार यह है कि, मशीनों के बीच कनेक्ट करने के लिए कॉरबा, आरपीसी या एसओएपी जैसी जटिल तंत्रों का उपयोग करने के बजाय, सरल HTTP का उपयोग मशीनों के बीच कॉल करने के लिए किया जाता है।

  • कई मायनों में, HTTP वाइड वेब स्वयं HTTP पर आधारित है, जिसे आरईएसटी-आधारित आर्किटेक्चर के रूप में देखा जा सकता है।

रीस्टफुल एप्लिकेशन एप्लिकेशन (डेटा बनाने और / या अपडेट) पोस्ट करने के लिए HTTP अनुरोधों का उपयोग करते हैं, डेटा पढ़ते हैं (उदाहरण के लिए, क्वेरी बनाते हैं), और डेटा हटाते हैं। इस प्रकार, आरईएसटी सभी चार सीआरयूडी (बनाएँ / पढ़ें / अपडेट / हटाएं) संचालन के लिए HTTP का उपयोग करता है।

मुझे नहीं लगता कि आपको स्टैक ओवरफ्लो के बाहर आरईएसटी के बारे में सुनने के लिए बेवकूफ महसूस करना चाहिए ..., मैं एक ही स्थिति में होगा !; इस अन्य सवाल के जवाब में आरईएसटी अब बड़ा क्यों हो रहा है, कुछ भावनाओं को कम कर सकता है।


मैं जवाबों का एक समूह देखता हूं जो कहता है कि संसाधन "/ उपयोगकर्ता / 123" पर उपयोगकर्ता 123 के बारे में सबकुछ डालना विश्वसनीय है।

रॉय फील्डिंग, जिन्होंने इस शब्द को तैयार किया, कहते हैं कि roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven । विशेष रूप से, "एक आरईएसटी एपीआई निश्चित संसाधन नाम या पदानुक्रम परिभाषित नहीं करना चाहिए"।

तो यदि आपका "/ उपयोगकर्ता / 123" पथ क्लाइंट पर हार्डकोड किया गया है, तो यह वास्तव में रीस्टफुल नहीं है। HTTP का एक अच्छा उपयोग, शायद, शायद नहीं। लेकिन रीस्टफुल नहीं। इसे हाइपरटेक्स्ट से आना है।


यह प्रोग्रामिंग है जहां आपके सिस्टम की वास्तुकला रॉय फील्डिंग द्वारा अपनी थीसिस में रखी गई ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm फिट बैठती है। चूंकि यह वास्तुशिल्प शैली है जो वेब (अधिक या कम) का वर्णन करती है, इसलिए बहुत से लोग इसमें रूचि रखते हैं।

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


यह वही दिख सकता है।

तीन गुणों वाला उपयोगकर्ता बनाएं:

POST /user
fname=John&lname=Doe&age=25

सर्वर जवाब देता है:

200 OK
Location: /user/123

भविष्य में, आप उपयोगकर्ता जानकारी पुनर्प्राप्त कर सकते हैं:

GET /user/123

सर्वर जवाब देता है:

200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>

रिकॉर्ड को संशोधित करने के लिए ( lname और age अपरिवर्तित रहेगी):

PATCH /user/123
fname=Johnny

रिकॉर्ड को अपडेट करने के लिए (और इसके परिणामस्वरूप lname और age शून्य होगी):

PUT /user/123
fname=Johnny

RESTful (प्रतिनिधि राज्य हस्तांतरण) एपीआई प्रोग्रामिंग 5 बुनियादी सॉफ्टवेयर वास्तुकला शैली सिद्धांतों का पालन ​​करके किसी भी प्रोग्रामिंग भाषा में वेब अनुप्रयोग लिख रही है :

  1. संसाधन (डेटा, सूचना)।
  2. अद्वितीय वैश्विक पहचानकर्ता (सभी संसाधन अद्वितीय URI द्वारा पहचाने जाते हैं )।
  3. वर्दी इंटरफ़ेस - सरल और मानक इंटरफ़ेस (HTTP) का उपयोग करें।
  4. प्रतिनिधित्व - सभी संचार प्रतिनिधित्व द्वारा किया जाता है (जैसे XML / JSON )
  5. Stateless (प्रत्येक अनुरोध पूर्ण अलगाव में होता है, कैश और लोड-बैलेंस करना आसान है),

दूसरे शब्दों में आप HTTP पर सरल पॉइंट-टू-पॉइंट नेटवर्क एप्लिकेशन लिख रहे हैं जो रीस्टफुल आर्किटेक्चर को कार्यान्वित करके जीईटी, पोस्ट, पुट या डिलीट जैसे क्रियाओं का उपयोग करता है जो प्रत्येक "संसाधन" के इंटरफेस के मानकीकरण का प्रस्ताव करता है। यह कुछ भी नहीं है कि वेब की वर्तमान विशेषताओं का उपयोग एक सरल और प्रभावी तरीके से (अत्यधिक सफल, साबित और वितरित आर्किटेक्चर) में किया जाता है। यह SOAP , CORBA और RPC जैसे जटिल CORBA लिए एक विकल्प है ।

रीस्टफुल प्रोग्रामिंग वेब आर्किटेक्चर डिज़ाइन के अनुरूप है और, यदि सही तरीके से लागू किया गया है, तो यह आपको स्केलेबल वेब इंफ्रास्ट्रक्चर का पूर्ण लाभ लेने की अनुमति देता है।


आरईएसटी (प्रतिनिधि राज्य हस्तांतरण) नामक एक वास्तुकला शैली का समर्थन करता है कि वेब अनुप्रयोगों को HTTP का उपयोग करना चाहिए क्योंकि यह मूल रूप से कल्पना की गई थी । लुकअप को GET अनुरोधों का उपयोग करना चाहिए। GET क्रमशः उत्परिवर्तन, निर्माण और हटाने के लिए उपयोग किया जाना चाहिए।

आरईएसटी समर्थक यूआरएल का समर्थन करते हैं, जैसे कि

http://myserver.com/catalog/item/1729

लेकिन आरईएसटी आर्किटेक्चर को इन "सुंदर यूआरएल" की आवश्यकता नहीं है। पैरामीटर के साथ एक अनुरोध प्राप्त करें

http://myserver.com/catalog?item=1729

रीस्टफुल के रूप में हर बिट है।

ध्यान रखें कि जानकारी अपडेट करने के लिए अनुरोधों का कभी भी उपयोग नहीं किया जाना चाहिए। उदाहरण के लिए, एक कार्ट में एक आइटम जोड़ने के लिए एक GET अनुरोध

http://myserver.com/addToCart?cart=314159&item=1729

उचित नहीं होगा। अनुरोध प्राप्त करें idempotent होना चाहिए। यही है, दो बार अनुरोध जारी करना एक बार इसे जारी करने से अलग नहीं होना चाहिए। अनुरोधों को कैश करने योग्य बनाता है। एक "कार्ट में जोड़ें" अनुरोध बेवकूफ नहीं है-इसे दो बार जारी करने से आइटम की दो प्रतियां कार्ट में जोड़ती हैं। इस संदर्भ में एक POST अनुरोध स्पष्ट रूप से उपयुक्त है। इस प्रकार, यहां तक ​​कि एक विश्वसनीय वेब एप्लिकेशन को POST अनुरोधों के अपने हिस्से की आवश्यकता होती है।

यह डेविड एम। गेरी द्वारा उत्कृष्ट पुस्तक कोर जावासेवर चेहरे की किताब से लिया गया है।


बात करना केवल जानकारी का आदान-प्रदान करने से कहीं अधिक है । एक प्रोटोकॉल वास्तव में डिज़ाइन किया गया है ताकि कोई बात न हो। प्रत्येक पार्टी जानता है कि उनका विशेष काम क्या है क्योंकि यह प्रोटोकॉल में निर्दिष्ट है। प्रोटोकॉल संभावित कार्यों में किसी भी बदलाव के खर्च पर शुद्ध सूचना विनिमय की अनुमति देते हैं। दूसरी तरफ बात करते हुए, एक पार्टी को यह पूछने की अनुमति मिलती है कि दूसरी पार्टी से और क्या कदम उठाए जा सकते हैं। वे दो बार एक ही प्रश्न पूछ सकते हैं और दो अलग-अलग उत्तर प्राप्त कर सकते हैं, क्योंकि दूसरी पार्टी का राज्य अंतरिम में बदल सकता है। बात करना अचल वास्तुकला है । फील्डिंग की थीसिस आर्किटेक्चर को निर्दिष्ट करती है कि अगर किसी को मशीनों को एक दूसरे से बात करने की इजाजत देना है तो उसे पालन करना होगासंवाद


एपीआई परीक्षण क्या है ?

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

बाकी एपीआई

आरईएसटी: प्रतिनिधि राज्य स्थानांतरण।

  • यह उन कार्यों की व्यवस्था है जिन पर परीक्षक अनुरोध करते हैं और प्रतिक्रिया प्राप्त करते हैं। आरईएसटी एपीआई इंटरैक्शन में HTTP प्रोटोकॉल के माध्यम से किए जाते हैं।
  • आरईएसटी नेटवर्क पर एक दूसरे के साथ कंप्यूटर के बीच संचार की अनुमति भी देता है।
  • संदेशों को भेजने और प्राप्त करने के लिए, इसमें HTTP विधियों का उपयोग करना शामिल है, और वेब सेवाओं के विपरीत, इसे सख्त संदेश परिभाषा की आवश्यकता नहीं है।
  • आरईएसटी संदेश अक्सर फॉर्म को एक्सएमएल, या जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (जेएसओएन) के रूप में स्वीकार करते हैं।

4 आम तौर पर प्रयुक्त एपीआई तरीके: -

  1. प्राप्त करें: - यह केवल संसाधन तक पहुंच प्रदान करता है।
  2. पोस्ट: - इसका उपयोग नए संसाधन को बनाने या अपडेट करने के लिए किया जाता है।
  3. PUT: - इसका उपयोग किसी मौजूदा संसाधन को अद्यतन या प्रतिस्थापित करने या नया संसाधन बनाने के लिए किया जाता है।
  4. हटाएं: - इसका उपयोग संसाधन को हटाने के लिए किया जाता है।

टेस्ट एपीआई मैन्युअल रूप से कदम: -

एपीआई मैन्युअल रूप से उपयोग करने के लिए, हम ब्राउज़र आधारित आरईएसटी एपीआई प्लगइन्स का उपयोग कर सकते हैं।

  1. पोस्टमैन (क्रोम) / आरईएसटी (फ़ायरफ़ॉक्स) प्लगइन स्थापित करें
  2. एपीआई यूआरएल दर्ज करें
  3. आरईएसटी विधि का चयन करें
  4. सामग्री-शीर्षलेख का चयन करें
  5. अनुरोध JSON दर्ज करें (पोस्ट)
  6. भेजने पर क्लिक करें
  7. यह आउटपुट प्रतिक्रिया वापस कर देगा

आरईएसटी एपीआई स्वचालित करने के लिए कदम


अगर मुझे आरईएसटी पर केवल 3 लघु वाक्यों में मूल शोध प्रबंध को कम करना पड़ा, तो मुझे लगता है कि निम्नलिखित इसके सार को कैप्चर करता है:

  1. यूआरएल के माध्यम से संसाधनों का अनुरोध किया जाता है।
  2. प्रोटोकॉल यूआरएल का उपयोग करके आप संचार कर सकते हैं तक ही सीमित हैं।
  3. मेटाडेटा नाम-मूल्य जोड़े (पोस्ट डेटा और क्वेरी स्ट्रिंग पैरामीटर) के रूप में पारित किया जाता है।

उसके बाद, अनुकूलन, कोडिंग सम्मेलनों और सर्वोत्तम प्रथाओं के बारे में बहस में पड़ना आसान है।

दिलचस्प बात यह है कि शोध प्रबंध में एचटीटीपी पोस्ट, जीईटी, डिलीट, या पीयूटी ऑपरेशंस का कोई उल्लेख नहीं है। यह "वर्दी इंटरफ़ेस" के लिए "सर्वोत्तम अभ्यास" की किसी की बाद में व्याख्या होना चाहिए।

जब वेब सेवाओं की बात आती है, ऐसा लगता है कि हमें डब्लूएसडीएल और एसओएपी आधारित आर्किटेक्चरों को अलग करने के कुछ तरीके की आवश्यकता है जो इंटरफेस के लिए काफी ओवरहेड और तर्कसंगत रूप से बहुत अनावश्यक जटिलता जोड़ते हैं। उन्हें लागू करने के लिए अतिरिक्त ढांचे और डेवलपर टूल की भी आवश्यकता होती है। मुझे यकीन नहीं है कि आरईएसटी सामान्य ज्ञान इंटरफेस और डब्ल्यूएसडीएल और एसओएपी जैसे अत्यधिक इंजीनियर इंटरफेस के बीच अंतर करने का सबसे अच्छा शब्द है। लेकिन हमें कुछ चाहिए।


आरईएसटी एक वितरित सिस्टम (जैसे डब्ल्यूडब्ल्यूडब्ल्यू) सॉफ्टवेयर आर्किटेक्चर शैली है, आप कल्पना कर सकते हैं कि यह एक अच्छी तरह से डिज़ाइन किया गया वेब एप्लिकेशन नियम है: इंटरनेट वेब पेजों का एक समूह (वर्चुअल स्टेट मशीन), जिसमें लिंक पर क्लिक करके हाइपरलिंक (राज्य संक्रमण ), परिणाम अगला वेब पेज है (जिसका अर्थ है कि आवेदन की अगली स्थिति)।

आरईएसटी नेटवर्क सिस्टम का वर्णन करता है जिसमें तीन भाग होते हैं:

  1. डेटा तत्व (संसाधन, संसाधन पहचानकर्ता, प्रतिनिधित्व)
  2. कनेक्टर (क्लाइंट, सर्वर, कैश, रिज़ॉल्वर, सुरंग)
  3. घटक (मूल सर्वर, गेटवे, प्रॉक्सी, उपयोगकर्ता एजेंट)

आरईएसटी निम्नलिखित शर्तों को सख्ती से पूरा करता है:

  1. एप्लिकेशन कार्यक्षमता की स्थिति संसाधनों में विभाजित है
  2. प्रत्येक संसाधन हाइपरलिंक्स पोजीशनिंग सिंटैक्स के रूप में उपयोग किया जाता है (यानी, डब्ल्यूडब्ल्यूडब्ल्यू यूआरआई में)
  3. सभी संसाधन संसाधन संक्रमण स्थिति के साथ क्लाइंट के बीच एक समान इंटरफ़ेस साझा करते हैं, जिनमें निम्न शामिल हैं:
    1. अच्छी तरह से परिभाषित संचालन का सीमित सेट (यानी HTTP GET / POST / PUT / DELETE में)
    2. सामग्री प्रारूप सामग्री प्रकारों का एक सीमित सेट, जिसमें निष्पादन योग्य कोड शामिल हो सकता है (यानी, WWW जावास्क्रिप्ट में)

यह आश्चर्यजनक रूप से लंबी "चर्चा" है और अभी तक कम से कम कहने में उलझन में है।

IMO:

1) एक बड़ी संयुक्त और बियर के बहुत सारे बिना आराम से प्रोग्रामिंग जैसी कोई चीज नहीं है :)

2) प्रतिनिधि राज्य स्थानांतरण (आरईएसटी) रॉय फील्डिंग के शोध प्रबंध में निर्दिष्ट एक वास्तुशिल्प शैली है । इसमें कई बाधाएं हैं। यदि आपकी सेवा / ग्राहक उन पर सम्मान करते हैं तो यह सही है। यह बात है।

आप बाधाओं को संक्षेप में सारांशित कर सकते हैं:

  • स्टेटलेस संचार
  • सम्मान HTTP चश्मा (यदि HTTP का उपयोग किया जाता है)
  • संचरित सामग्री स्वरूपों को स्पष्ट रूप से संचारित करता है
  • आवेदन राज्य के इंजन के रूप में hypermedia का उपयोग करें

एक और roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven जो चीजों को अच्छी तरह से बताती है।

बहुत से जवाब कॉपी / पेस्ट की गई वैध जानकारी को मिश्रित करते हैं और कुछ भ्रम जोड़ते हैं। लोग यहां रेस्टफुल यूआरआई के बारे में स्तरों के बारे में बात करते हैं (ऐसी कोई बात नहीं है!), HTTP विधियों को प्राप्त करें, पोस्ट करें, पुट करें ... REST इसके बारे में नहीं है या न केवल इसके बारे में है।

उदाहरण के लिए लिंक - एक सुंदर दिखने वाला एपीआई होना अच्छा लगता है लेकिन अंत में क्लाइंट / सर्वर वास्तव में उन लिंकों की परवाह नहीं करता है जिन्हें आप प्राप्त करते हैं / भेजते हैं, यह महत्वपूर्ण सामग्री है।

अंत में किसी भी विश्वसनीय ग्राहक को तब तक किसी भी विश्वसनीय सेवा का उपभोग करने में सक्षम होना चाहिए जब तक कि सामग्री प्रारूप ज्ञात न हो।


REST === HTTP अनुरूपता तब तक सही नहीं है जब तक आप इस तथ्य पर दबाव नहीं HATEOAS कि यह " HATEOAS संचालित " होना चाहिए ।

रॉय ने खुद इसे roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven मंजूरी दी ।

प्रारंभिक यूआरआई (बुकमार्क) से परे पूर्व ज्ञान के साथ एक आरईएसटी एपीआई दर्ज की जानी चाहिए और इच्छित मीडिया प्रकारों का सेट जो लक्षित दर्शकों के लिए उचित हैं (यानी, किसी भी क्लाइंट द्वारा समझा जा सकता है जो एपीआई का उपयोग कर सकता है)। उस बिंदु से, सभी आवेदन राज्य संक्रमणों को सर्वर द्वारा प्रदान किए गए विकल्पों के क्लाइंट चयन द्वारा संचालित किया जाना चाहिए जो प्राप्त प्रस्तुतियों में मौजूद हैं या उन प्रस्तुतियों के उपयोगकर्ता के हेरफेर द्वारा निहित हैं। संक्रमण को मीडिया प्रकारों और संसाधन संचार तंत्र के क्लाइंट के ज्ञान को निर्धारित (या सीमित) किया जा सकता है, जिनमें से दोनों को उड़ान भरने में सुधार किया जा सकता है (उदाहरण के लिए, कोड-ऑन-डिमांड)।

[यहां विफलता का तात्पर्य है कि ऑफ-ऑफ-बैंड जानकारी हाइपरटेक्स्ट की बजाय बातचीत चला रही है।]


आरईएसटी एक वास्तुकला पैटर्न और लेखन वितरित अनुप्रयोगों की शैली है। यह संकीर्ण अर्थ में एक प्रोग्रामिंग शैली नहीं है।

कह रहे हैं कि आप आरईएसटी शैली का उपयोग करते हुए यह कहने के समान हैं कि आपने एक विशेष शैली में एक घर बनाया है: उदाहरण के लिए ट्यूडर या विक्टोरियन। आरईएसटी दोनों एक सॉफ्टवेयर शैली के रूप में और ट्यूडर या विक्टोरियन को घर शैली के रूप में परिभाषित किया जा सकता है जो उन्हें बनाए रखने वाले गुणों और बाधाओं से परिभाषित किया जा सकता है। उदाहरण के लिए आरईएसटी में क्लाइंट सर्वर अलगाव होना चाहिए जहां संदेश स्वयं वर्णन कर रहे हैं। ट्यूडर शैली के घरों में ओवरलैपिंग गेबल्स और छत हैं जो सामने वाले चेहरे के साथ सीधे ढंके हुए हैं। आरईएसटी बनाने वाली बाधाओं और गुणों के बारे में अधिक जानने के लिए आप रॉय के शोध प्रबंध को पढ़ सकते हैं।

घर शैली के विपरीत आरईएसटी लगातार और व्यावहारिक रूप से लागू होने का कठिन समय रहा है। यह जानबूझकर हो सकता है। डिजाइनर को अपना वास्तविक कार्यान्वयन छोड़ना। तो आप जो भी चाहते हैं उसे करने के लिए स्वतंत्र हैं, जब तक आप शोध प्रबंध में निर्धारित बाधाओं को पूरा करते हैं, आप आरईएसटी सिस्टम बना रहे हैं।

बोनस:

संपूर्ण वेब आरईएसटी पर आधारित है (या आरईएसटी वेब पर आधारित था)। इसलिए एक वेब डेवलपर के रूप में आप इसके बारे में जानना चाहते हैं हालांकि अच्छे वेब ऐप्स लिखना आवश्यक नहीं है।


आरईएसटी की मेरी मूल रूपरेखा यहां दी गई है। मैंने एक यथार्थवादी वास्तुकला में प्रत्येक घटकों के पीछे सोच को प्रदर्शित करने की कोशिश की ताकि अवधारणा को समझना अधिक सहज हो। उम्मीद है कि यह कुछ लोगों के लिए आरईएसटी को नष्ट करने में मदद करता है!

आरईएसटी (प्रतिनिधि राज्य हस्तांतरण) एक डिज़ाइन आर्किटेक्चर है जो बताता है कि नेटवर्क किए गए संसाधन (यानी नोड्स जो जानकारी साझा करते हैं) को डिज़ाइन और संबोधित किया जाता है। आम तौर पर, एक विश्वसनीय वास्तुकला यह बनाता है कि क्लाइंट (अनुरोध करने वाली मशीन) और सर्वर (प्रतिक्रिया मशीन) क्लाइंट के बिना डेटा को पढ़ने, लिखने और अपडेट करने का अनुरोध कर सकता है, यह जानने के लिए कि सर्वर कैसे काम करता है और सर्वर पास कर सकता है क्लाइंट के बारे में कुछ भी जानने की आवश्यकता के बिना इसे वापस। ठीक है, अच्छा ... लेकिन हम अभ्यास में यह कैसे करते हैं?

  • सबसे स्पष्ट आवश्यकता यह है कि किसी प्रकार की सार्वभौमिक भाषा होने की आवश्यकता है ताकि सर्वर क्लाइंट को बता सके कि वह अनुरोध के साथ क्या करने का प्रयास कर रहा है और सर्वर के जवाब देने के लिए क्या कर रहा है।

  • लेकिन किसी दिए गए संसाधन को खोजने के लिए और फिर क्लाइंट को बताएं कि वह संसाधन कहां रहता है, संसाधनों पर इशारा करने का सार्वभौमिक तरीका होना चाहिए। यह वह जगह है जहां यूनिवर्सल रिसोर्स आइडेंटिफायर (यूआरआई) आते हैं; वे संसाधन खोजने के लिए मूल रूप से अद्वितीय पते हैं।

लेकिन आरईएसटी आर्किटेक्चर वहां खत्म नहीं होता है! जबकि उपरोक्त हम जो चाहते हैं उसकी मूलभूत आवश्यकताओं को पूरा करते हैं, हम भी एक आर्किटेक्चर चाहते हैं जो उच्च मात्रा यातायात का समर्थन करता है क्योंकि किसी दिए गए सर्वर आमतौर पर कई ग्राहकों से प्रतिक्रियाओं को संभालता है। इस प्रकार, हम पिछले अनुरोधों के बारे में जानकारी याद रखने के द्वारा सर्वर को अभिभूत नहीं करना चाहते हैं।

  • इसलिए, हम प्रतिबंध लगाते हैं कि क्लाइंट और सर्वर के बीच प्रत्येक अनुरोध-प्रतिक्रिया जोड़ी स्वतंत्र है, जिसका अर्थ है कि सर्वर को पिछले अनुरोधों (क्लाइंट-सर्वर इंटरैक्शन के पिछले राज्य) के बारे में कुछ भी याद नहीं करना है निवेदन। इसका मतलब है कि हम चाहते हैं कि हमारी बातचीत स्टेटलेस हो।

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

  • आखिरी चीज जो आप अक्सर यहां तक ​​कि रिक्त आर्किटेक्चर के बारे में बताते हैं कि वे स्तरित हैं। ग्राहक और सर्वर के बीच बातचीत की हमारी चर्चा में हम वास्तव में इस आवश्यकता पर पूरी तरह से चर्चा कर रहे हैं। असल में, इसका मतलब है कि हमारी प्रणाली में प्रत्येक परत केवल आसन्न परतों के साथ बातचीत करती है। तो हमारी चर्चा में, क्लाइंट लेयर हमारी सर्वर परत (और इसके विपरीत) के साथ इंटरैक्ट करता है, लेकिन अन्य सर्वर परतें हो सकती हैं जो प्राथमिक सर्वर प्रक्रिया को उस अनुरोध के लिए मदद करती हैं जो क्लाइंट सीधे संवाद नहीं करता है। इसके बजाय, सर्वर आवश्यकतानुसार अनुरोध पर गुजरता है।

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


प्रति सत्र "रीस्टफुल प्रोग्रामिंग" जैसी कोई धारणा नहीं है। इसे बेहतर प्रतिमान या बेहतर रीस्टफुल आर्किटेक्चर कहा जाएगा। यह एक प्रोग्रामिंग भाषा नहीं है। यह एक प्रतिमान है।

विकिपीडिया से :

कंप्यूटिंग में, प्रतिनिधित्वकारी राज्य हस्तांतरण (आरईएसटी) वेब विकास के लिए उपयोग की जाने वाली एक वास्तुशिल्प शैली है।


मुझे लगता है कि एक स्टेटलेस ट्रांसपोर्ट लेयर के रूप में इंटरनेट (प्रोटोकॉल) का उपयोग करते समय आराम से बिंदु एक उच्च परत में राज्य की स्थिति को अलग करना है । अधिकांश अन्य दृष्टिकोण चीजों को मिलाते हैं।

इंटरनेट युग में प्रोग्रामिंग के मौलिक परिवर्तनों को संभालने के लिए यह सबसे अच्छा व्यावहारिक दृष्टिकोण रहा है। मौलिक परिवर्तनों के बारे में, एरिक मीजर के यहां शो पर एक चर्चा है: http://www.infoq.com/interviews/erik-meijer-programming-language-design-effects-purity#view_93197 । वह इसे पांच प्रभावों के रूप में सारांशित करता है, और एक प्रोग्रामिंग भाषा में समाधान को डिजाइन करके समाधान प्रस्तुत करता है। समाधान, भाषा के बावजूद मंच या सिस्टम स्तर पर भी हासिल किया जा सकता है। शेष को उन समाधानों में से एक के रूप में देखा जा सकता है जो वर्तमान अभ्यास में बहुत सफल रहे हैं।

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

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

बस मेरे 2 सी।

संपादित करें: दो और महत्वपूर्ण पहलू:







definition