रेस्टफुल एपीआई के तरीके; सिर और विकल्प


92

मैं PHP में एक एप्लिकेशन के लिए एक RESTful एपीआई मॉड्यूल लिख रहा हूं, और मैं क्रियाओं पर थोड़ा मिश्रित हूं HEADऔर OPTIONS

  • OPTIONS  किसी दिए गए संसाधन के लिए उपलब्ध HTTP क्रियाओं को पुनः प्राप्त करने के लिए उपयोग किया जाता है?
  • HEAD यह निर्धारित करने के लिए उपयोग किया जाता है कि क्या कोई दिया गया संसाधन उपलब्ध है?

अगर कोई इन क्रियाओं को स्पष्ट कर सकता है, तो इसकी बहुत प्रशंसा होगी।

* स्पष्टीकरण RESTful API आर्किटेक्चर के संबंध में HTTP क्रियाओं को फिर से प्रस्तुत करने के संबंध में था। मैं के बाद से प्राप्ति दोनों कि पर आए हैं HEADऔर OPTIONSचाहिए नहीं सोद्देश्य हो, और बदले के रूप में किसी HTTP आवेदन करना चाहिए जाहिर व्यवहार करते हैं। ओह, हम 2 साल में कैसे विकसित होते हैं।


संभावना है कि HTTP चश्मा वेब पर आसानी से उपलब्ध हैं।
गॉर्डन

@Gordon - पर्याप्त रूप से उचित है, और जब मैं समझता हूं कि RESTful API सेवाओं का उद्देश्य मौजूदा HTTP विशिष्टताओं का लाभ उठाना है, तो मुझे लगता है कि मैंने कार्यान्वयन विवरण के लिए कुछ आंशिक विचलन मान लिया है। मेरी गलती।
डेन लैग

14
अधिकांश चीज़ों के लिए विवरण वेब पर आसानी से उपलब्ध हैं। SO पर प्रश्न प्रलेखन से परे स्पष्टीकरण के लिए हैं। यह बात फिट बैठती है।
एंड्रयू एनस्ले

जवाबों:


60

यथा: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

9.2 विकल्प

विकल्प विधि अनुरोध-प्रतिक्रिया श्रृंखला पर उपलब्ध अनुरोध / प्रतिक्रिया श्रृंखला पर उपलब्ध संचार विकल्पों के बारे में जानकारी के लिए एक अनुरोध का प्रतिनिधित्व करती है। यह विधि क्लाइंट को संसाधन कार्रवाई से जुड़े संसाधन या पुनर्प्राप्ति के बिना किसी संसाधन से जुड़े विकल्पों और / या आवश्यकताओं, या सर्वर की क्षमताओं को निर्धारित करने की अनुमति देती है।

इस पद्धति के लिए जवाबदेही उपलब्ध नहीं हैं।

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

यदि अनुरोध-URI एक तारांकन चिह्न ("*") है, तो विकल्प अनुरोध एक विशिष्ट संसाधन के बजाय सामान्य रूप से सर्वर पर लागू करने का है। चूंकि सर्वर के संचार विकल्प आमतौर पर संसाधन पर निर्भर करते हैं, इसलिए "*" अनुरोध केवल "पिंग" या "नो-ऑप" विधि के रूप में उपयोगी है; यह क्लाइंट को सर्वर की क्षमताओं का परीक्षण करने की अनुमति देने से परे कुछ नहीं करता है। उदाहरण के लिए, इसका उपयोग HTTP / 1.1 अनुपालन (या इसके अभाव) के लिए एक प्रॉक्सी का परीक्षण करने के लिए किया जा सकता है।

यदि अनुरोध-URI एक तारांकित नहीं है, तो विकल्प अनुरोध केवल उस विकल्प पर लागू होता है जो उस संसाधन के साथ संचार करते समय उपलब्ध होता है।

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

मैक्स-फॉरवर्ड अनुरोध-हेडर फ़ील्ड MAY का उपयोग अनुरोध श्रृंखला में एक विशिष्ट प्रॉक्सी को लक्षित करने के लिए किया जाता है। जब किसी प्रॉक्सी को निरपेक्षता पर एक ऑप्‍शन रिक्‍वेस्‍ट मिलती है, जिसके लिए फॉरवर्डिंग के लिए अनुरोध किया जाता है, तो प्रॉक्सी को मैक्स-फॉर्वर्ड फ़ील्ड के लिए चेक करना होगा। यदि मैक्स-फ़ॉरवर्ड फ़ील्ड-मान शून्य ("0") है, तो प्रॉक्सी संदेश को अग्रेषित नहीं करेगा; इसके बजाय, प्रॉक्सी अपने स्वयं के संचार विकल्पों के साथ जवाब देना चाहिए। यदि मैक्स-फ़ॉर्वर्ड फ़ील्ड-मान शून्य से अधिक पूर्णांक है, तो अनुरोध के बाद प्रॉक्सी को फ़ील्ड-मान को घटा देना चाहिए। यदि अनुरोध में कोई मैक्स-फ़ॉर्वर्ड फ़ील्ड मौजूद नहीं है, तो अग्रेषित अनुरोध में अधिकतम-फ़ॉर्वर्ड फ़ील्ड शामिल नहीं होना चाहिए।

9.4 हेड

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

HEAD रिक्वेस्ट MAY की प्रतिक्रिया इस अर्थ में अस्वीकार्य है कि प्रतिक्रिया MAY में निहित जानकारी का उपयोग उस संसाधन से पहले कैश्ड इकाई को अपडेट करने के लिए किया जाए। यदि नए फ़ील्ड मान इंगित करते हैं कि कैश्ड इकाई वर्तमान इकाई से भिन्न होती है (जैसा कि सामग्री-लंबाई, सामग्री-एमडी 5, ईटाग या अंतिम-संशोधित में परिवर्तन द्वारा इंगित किया जाएगा), तो कैश को कैश प्रविष्टि को बासी मानना ​​चाहिए।


1
व्यापक उद्धरण के लिए धन्यवाद @ डॉल्गी; हालाँकि, व्यवहार में (है चाहिए कई सफल RESTful API मॉड्यूल इन HTTP मानकों का अनुपालन करते हैं), या वहाँ एक स्वीकार्य है स्लिम इन कार्यों के लिए प्रतिक्रिया? आलस्य से नहीं, बल्कि केवल जिज्ञासा से; मैं संभवतः पालन करने के लिए आवश्यक सब कुछ लागू करूँगा।
डैन लुग जुएल

2
यदि आप अपना स्वयं का निर्माण कर रहे हैं, जो मुझे लगता है कि आप हैं, तो आपको अपने जीवन को आसान बनाने के लिए प्रलेखित मानकों के साथ कुछ संरेखण बनाए रखने की कोशिश करनी चाहिए ... और जो आपके एपीआई का उपभोग करने वाले लोग हैं ... Microsoft का अनुसरण नहीं करते हैं। RFC के साथ संरेखित करने के लिए एक अच्छी बात है
sdolgy

साभार @sdolgy लिंक किए गए डॉक्टर को संक्षिप्त करने के बाद, मैंने CONNECTक्रिया को अंत में देखा । क्या रेस्टफुल ऑथेंटिकेशन के लिए उस तरीके का उपभोग करना एक खराब विकल्प होगा?
डेन लैग

यह सुनिश्चित नहीं था कि यह इच्छित उद्देश्य था "यह विनिर्देश एक प्रॉक्सी के साथ उपयोग के लिए विधि नाम CONNECT को सुरक्षित रखता है जो गतिशील रूप से एक सुरंग में परिवर्तित हो सकता है (जैसे SSL सुरंग [44])।" ... एक पर एक और प्रश्न पोस्ट करने के लिए सहायक हो सकता है। इसके बारे में stackexchange.com साइट्स ...
sdolgy

2
@DanLugg आपके आवेदन का उपयोग CONNECTएसएसएल टनलिंग के तरीके में नहीं किया जा सकता है , लेकिन कल्पना करें कि यदि आपके आवेदन के उपभोक्ता ने प्रॉक्सी CONNECTको आरएफसी में निर्दिष्ट तरीके से लागू किया हो तो क्या होगा , अनुरोध आपके पास नहीं हो सकते हैं आवेदन।
स्टीव बुज़ोनास

80

OPTIONSविधि एपीआई के बारे में जानकारी देता है (विधियाँ / सामग्री प्रकार)

HEADविधि संसाधन के बारे में जानकारी देता है (संस्करण / लंबाई / प्रकार)

सर्वर प्रतिक्रिया

विकल्प

HTTP/1.1 200 OK
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:24:43 GMT
Content-Length: 0

सिर

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:12:29 GMT
ETag: "780602-4f6-4db31b2978ec0"
Last-Modified: Thu, 25 Apr 2013 16:13:23 GMT
Content-Length: 1270
  • OPTIONS यह पता लगाना कि कौन से HTTP तरीके एक संसाधन का समर्थन करते हैं, उदाहरण के लिए क्या हम इसे डिलीट कर सकते हैं या इसे PUT के माध्यम से अपडेट कर सकते हैं?
  • HEADयह देखना कि क्या एक संसाधन बदल गया है। संसाधन के कैश्ड संस्करण को बनाए रखने के लिए यह उपयोगी है
  • HEAD संभावित रूप से महंगा पुनर्प्राप्ति करने से पहले संसाधन के बारे में मेटाडेटा को पुनः प्राप्त करना, जैसे कि इसका मीडिया प्रकार या इसका आकार
  • HEAD, OPTIONSपरीक्षण कि क्या एक संसाधन मौजूद है और सुलभ है। उदाहरण के लिए, किसी एप्लिकेशन में उपयोगकर्ता द्वारा सबमिट किए गए लिंक को मान्य करना

यहाँ अच्छा और संक्षिप्त लेख है कि कैसे और विकल्प RESTful वास्तुकला में फिट होते हैं।


9
महान जवाब, बहुत बुरा यह देर से पार्टी दंड का भुगतान करेगा। कॉपी-पेस्ट किए गए स्वीकार किए गए उत्तर भी इन क्रियाओं को विशेष रूप से एक प्रतिष्ठित वास्तुकला में जगह देना शुरू नहीं करते हैं।
टोड मेनियर

1
आपका लिंक मर चुका है। यहाँ इसका आखिरी स्नैपशॉट है: web.archive.org/web/20160528151316/https://…
kolobok

29

विकल्प आपको ऐसी चीजें बताते हैं जैसे "इस संसाधन के लिए कौन से तरीके अनुमत हैं"।

यदि आप एक GET अनुरोध किया है, लेकिन शरीर के बिना HTTP हेडर आपको मिलेगा। इससे क्लाइंट को कैशिंग जानकारी निर्धारित करने में मदद मिलती है कि किस सामग्री-प्रकार को लौटाया जाएगा, किस स्थिति कोड को लौटाया जाएगा। उपलब्धता केवल इसका एक छोटा सा हिस्सा है।


धन्यवाद @Quentin; OPTIONSक्या मुझे लगा था, और मेरे मौजूदा दृष्टिकोण के साथ ऐसा कार्यान्वयन आसान होगा। Sdolgy के RFC उद्धरण के अनुसार, OPTIONSप्रारूप में कोई मानक निर्धारित नहीं करता है। क्या यह माना जाता है कि प्रतिक्रिया प्रारूप अन्य प्रतिक्रियाओं के समान है? ( उदाहरण; जेन्सन, एक्सएमएल, आदि )
डैन लुग जुग

@Tomcat RFC को उद्धृत करते हुए: "उपयुक्त प्रतिक्रिया प्रारूप का चयन करने के लिए सामग्री बातचीत MAY का उपयोग किया जाना चाहिए।" दूसरे शब्दों में: प्रतिक्रिया वही होनी चाहिए जो शीर्ष लेख में अनुरोध के लिए कहा गया है।
गॉर्डन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.