2011-09-06 14 views
18

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

  • GET अनुरोध /new/<keyname> के लिए - हालांकि यह बहुत आसान है मुझे लगता है कि मैं इस का उपयोग नहीं होगा, क्योंकि मैंने सुना प्राप्त पुन: प्राप्त करने और/या सूची में जानकारी के लिए है,
  • /<keyname> पर POST अनुरोध - यह मुझे आसान और सरल लग रहा था, लेकिन अनुरोध निकाय में कोई भी डेटा पास नहीं करता है। क्या मैं इसे इस तरह से कर सकता हूं? क्या यह अजीब है?
  • अनुरोध अनुरोध "keyname=SomeKey" में पास /keys पर POST अनुरोध - क्या यह सही तरीका है?

मैं this API from joyent को देखा और उनके रख सकते हैं और पोस्ट अनुरोध में वे अनुरोध शरीर में कुछ डेटा गुजरती हैं। क्या यह उम्मीद है? क्या वास्तव में गलत है कि एक पुट और POST अनुरोध में अनुरोध निकाय की आवश्यकता नहीं है?

उत्तर

14

मैंने इस प्रश्न को एचटीपी-डब्ल्यूजी पर पूछा। यह सबसे सटीक उत्तर था मुझे http://lists.w3.org/Archives/Public/ietf-http-wg/2010JulSep/0276.html

संक्षेप में, POST को शरीर की आवश्यकता नहीं होती है। मैं उम्मीद करता हूं कि उसी औचित्य को PUT पर लागू किया जा सके।

+5

POST को शरीर की आवश्यकता होती है, लेकिन वह शरीर एक खाली दस्तावेज़ हो सकता है। अंतर सूक्ष्म है, लेकिन यह वही बात नहीं है। उदाहरण के लिए, आपके पास अभी भी खाली दस्तावेज़ के लिए एक mimetype है। –

+1

@PedroWerneck क्या आप उस दावे के लिए संदर्भ प्रदान कर सकते हैं? जो मैंने पढ़ा है वह उस परिप्रेक्ष्य के अनुरूप नहीं है। –

+1

यही वह पोस्ट है जो आपने पोस्ट किया है। एक शून्य लंबाई शरीर शरीर के समान नहीं है। आपको अभी भी खाली दस्तावेज़ से जुड़े कुछ मेटाडेटा भेजना होगा। –

-1

शायद सबसे अच्छा तरीका आपका तीसरा विकल्प है: पर keyname=SomeKey के साथ पोस्ट करें।

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

आप यह कहकर सही हैं कि आपको GET ऑपरेशन "SHOULD NOT have the significance of taking an action other than retrieval." (RFC 2616) के रूप में इस ऑपरेशन को करने के लिए GET का उपयोग नहीं करना चाहिए।

generic-message = start-line 
        *(message-header CRLF) 
        CRLF 
        [ message-body ] 
start-line  = Request-Line | Status-Line

आगे पढ़ना इस देता है::

5

RFC2616 is the base RFC for HTTP 1.1

सबसे सामान्य रूप में, एक HTTP संदेश इस (वैकल्पिक शरीर पर ध्यान दें) है

9.5 POST 

    The POST method is used to request that the origin server accept the 
    entity enclosed in the request as a new subordinate of the resource 
    identified by the Request-URI in the Request-Line. ... 

और

9.6 PUT 

    The PUT method requests that the enclosed entity be stored under the 
    supplied Request-URI. ... 

    The fundamental difference between the POST and PUT requests is 
    reflected in the different meaning of the Request-URI. The URI in a 
    POST request identifies the resource that will handle the enclosed 
    entity. That resource might be a data-accepting process, a gateway to 
    some other protocol, or a separate entity that accepts annotations. 
    In contrast, the URI in a PUT request identifies the entity enclosed 
    with the request -- the user agent knows what URI is intended and the 
    server MUST NOT attempt to apply the request to some other resource.

दोनों पोस्ट और पुट में अनुरोध में संलग्न इकाई शामिल है।

मेरे पढ़ने के आधार पर, मेरा मानना ​​है कि एक पोस्ट वांछित (एक गैर-मानक वर्णन, मुझे पता है) दोनों पोस्ट और पुट के लिए है।

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

+5

"आरईएसटी के संदर्भ में" का क्या मतलब है? आरईएसटी HTTP पोस्ट विधि के अर्थ को फिर से परिभाषित करता है? –

+0

एक REST पोस्ट एक निर्माण अनुरोध है। मैं परिस्थितियों की कल्पना कर सकता हूं जहां मैं सभी डिफ़ॉल्ट मानों (शायद खाली शरीर द्वारा पहचाना गया) का उपयोग करके एक यूआरएल द्वारा पहचाना गया संसाधन बनाना चाहता हूं। – DwB

+6

एक पोस्ट आवश्यक रूप से एक अनुरोध अनुरोध नहीं है। "एक उप-समन्वय संसाधन बनाएं" केवल सुझाए गए अर्थों में से एक है। पोस्ट के बारे में सभी http spec कहते हैं कि यह असुरक्षित और गैर-मूर्ख है। शेष अर्थशास्त्र अनिर्दिष्ट हैं। –

-1

एक प्रश्न में अपने प्रश्न का उत्तर देने के लिए। हां, शरीर में शरीर/सामग्री होने की उम्मीद है, लेकिन इसकी आवश्यकता नहीं है (अनिवार्य)।

-1

okHttp3 (एंड्रॉयड के लिए एक HTTP पुस्तकालय) के अनुसार: पैच, PROPPATCH (WebDAV) और रिपोर्ट (source) पोस्ट, डाल,: निम्न विधियों में एक शरीर की जरूरत है। यदि आप शरीर के बिना दिए गए तरीकों के साथ अनुरोध करने का प्रयास करते हैं तो यह भी दुर्घटनाग्रस्त हो जाता है।

संबंधित मुद्दे