2012-06-18 22 views
18

मैं एक आरईएसटी एपीआई लागू करना चाहता हूं और मेरे जीईटी अनुरोधों पर एक शरीर की आवश्यकता है। (यहां चर्चा की तरह: HTTP GET with request body)आरईएसटी एपीआई: शरीर के साथ अनुरोध प्राप्त करें

क्या ऐसे ग्राहक हैं जो एक जीईटी अनुरोध के साथ शरीर भेजने में सक्षम नहीं हैं? फिडलर ऐसा करने में सक्षम है, हालांकि संदेश बॉक्स लाल है।

उत्तर

25

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

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

+1

हाँ यह मेरी दूसरी पसंद होगा। यह सच है कि एक जीईटी अनुरोध पर एक शरीर का उपयोग पूरी तरह से आराम से नहीं है, लेकिन यह आवश्यक है। यूआरएल की लंबाई सीमित है और अक्सर जटिल डेटा के साथ समस्याएं होती हैं। यदि जीईटी के लिए कोई संभावना नहीं है तो मैं POST का उपयोग करूंगा, लेकिन उपयोगकर्ता डेटा पुनर्प्राप्त करने के लिए बनाने और प्राप्त करने के लिए POST की अपेक्षा करेंगे। हालांकि, मुझे कोई अन्य विकल्प नहीं दिख रहा है। – user437899

+5

मुझे बिंदु दिखाई देता है, लेकिन मुझे लगता है कि उपयोगकर्ताओं को एक पोस्ट प्रदाता के रूप में पोस्ट एंडपॉइंट की कल्पना करने के लिए कम उत्परिवर्ती महसूस होगा जो उनके जटिल एक्सएमएल/जेएसओएन डेटा को संसाधित कर रहा है और परिणाम के साथ प्रतिक्रिया दे रहा है, इससे एक गैर-मानक अनुरोध प्राप्त करें। POST अक्सर इस तरह से प्रयोग किया जाता है, जीईटी नहीं है। – Ben

9

HTTP अनुरोधों को प्राप्त करने में शरीर का उपयोग करना एक बुरा विचार है। हां, ऐसा लगता है कि "डी ज्यूर" HTTP प्राप्त करने के लिए शरीर हो सकता है, लेकिन "वास्तव में" आपको समस्याएं हो सकती हैं:

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

क्या आप कड़ी मेहनत की तलाश में हैं? शरीर के साथ प्राप्त करने के साथ आपको इतनी सारी समस्याएं मिलेंगी। अन्य HTTP क्रिया का उपयोग क्यों नहीं करें?

उदाहरण उपयोग पद के लिए (या कुछ अन्य क्रियाएं), की तुलना में:

  1. यह आसान है पहले से ही तैयार क्लाइंट लाइब्रेरी है,
  2. सर्वर या सर्वर विन्यास के साथ कोई समस्या नहीं,
  3. यह दूसरे से स्पष्ट है

कठिन रास्तों की तलाश में नहीं है :)

+0

क्या आप औचित्य साबित कर सकते हैं "और वैसे भी यह मानक तरीका नहीं है", कृपया। आप किस "मानक" का जिक्र कर रहे हैं? –

+1

मैं HTTP मानकों और आरएफसी पेपर का जिक्र कर रहा हूं, उदा। http://tools.ietf.org/html/rfc2616। HTTP के साथ HTTP GET अनुरोध गैर-मानक – Regfor

+2

ठीक है, HTTP 1.1 जीईटी अनुरोधों के लिए संदेश-निकाय की अनुमति देता है (इसे प्रतिबंधित नहीं कर रहा है): 'अनुरोध विधि के विनिर्देशन में एक संदेश-निकाय को अनुरोध में शामिल नहीं किया जाना चाहिए (धारा 5.1।1) अनुरोधों में इकाई-निकाय भेजने की अनुमति नहीं देता है। '5.1.1 में जीईटी विनिर्देश "अनुमति नहीं है" प्रतीत होता है। –

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

  • कोई संबंधित समस्या नहीं^_^