PUT, POST और PATCH में क्या अंतर है? [बन्द है]


281

HTTP प्रोटोकॉल में PUT, POST और PATCH तरीकों में क्या अंतर है?




12
GET / POST के अलावा किसी भी चीज़ का उपयोग करना आधुनिक वेब APIs में पागल है। बहुत करते हैं। अधिकांश आधुनिक ऐप्स में पहचाने जाने वाले URI में संसाधन नहीं हैं, उन्हें अपडेट किया गया है, आदि वे दस्तावेज़ नहीं हैं। वे प्रक्रियाएं कहलाती हैं। URI स्वयं ही एक वास्तविक संसाधन की पहचान करता है, जो विधि द्वारा लागू किए जाने के अलावा है। इसलिए, अनुरोध के शरीर में JSON डेटा या फ़ाइलों को पोस्ट करने की आवश्यकता होने पर अनुरोधों और POSTs के लिए GET का उपयोग करें। IMO, अप्रत्यक्ष अवधारणाओं को URI और स्थिर HTML दस्तावेज़ों पर एक नए आर्किटेक्चर में शामिल करने की कोशिश कर रहा है, जो इसके जैसा कुछ नहीं दिखता है।
त्रिकोको

1
सभी शानदार जवाब। मैं मतभेदों के
ट्रेन

@ ट्रिएन्को और आप जिन प्रक्रियाओं का उल्लेख कर रहे हैं , उनमें संसाधनों का सृजन , विलोपन और संशोधन शामिल है। रेस्टफुल होने की तुलना में इस तरह के विचारों को व्यक्त करने का कोई बेहतर तरीका नहीं है। क्यों नहीं?
Константин Ван

जवाबों:


200

HTTP Verbs में PUT, POST, GET, DELETE और PATCH के बीच अंतर:

डेटाबेस में सबसे अधिक इस्तेमाल होने वाली HTTP क्रियाएं POST, GET, PUT, DELETE, CRUD (क्रिएट, रीड, अपडेट और डिलीट) ऑपरेशन्स के समान हैं। हम इन HTTP क्रियाओं को पूंजी मामले में निर्दिष्ट करते हैं । तो, नीचे उनके बीच तुलना है।

  1. बनाएँ - पोस्ट
  2. पढ़ें - जी.ई.टी.
  3. अद्यतन - PUT
  4. हटाएं - DELETE

PATCH: किसी संसाधन में आंशिक संशोधन करता है। यदि आपको संसाधन के लिए केवल एक फ़ील्ड अपडेट करने की आवश्यकता है, तो आप PATCH विधि का उपयोग करना चाह सकते हैं।

नोट:
चूंकि POST, PUT, DELETE सामग्री को संशोधित करता है, नीचे दिए गए url के लिए Fiddler के साथ परीक्षण केवल अपडेशन की नकल करता है। यह वास्तव में हटा या संशोधित नहीं करता है। हम केवल यह देखने के लिए कि क्या सम्मिलन, अपडेशन, विलोपन होते हैं, स्थिति कोड देख सकते हैं।

URL: http://jsonplaceholder.typicode.com/posts/

1) प्राप्त करें:

GET HTTP अनुरोध विधि का सबसे सरल प्रकार है; हर बार जब आप किसी लिंक पर क्लिक करते हैं या एड्रेस बार में एक URL टाइप करते हैं, तो ब्राउज़र का उपयोग होता है। यह सर्वर को URL द्वारा पहचाने गए डेटा को क्लाइंट तक पहुँचाने का निर्देश देता है। GET अनुरोध के परिणामस्वरूप डेटा को कभी भी सर्वर साइड पर संशोधित नहीं किया जाना चाहिए। इस अर्थ में, एक GET अनुरोध केवल पढ़ने के लिए है।

फ़िडलर या पोस्टमैन के साथ जाँच: हम रिस्पांस की जाँच के लिए फ़िडलर का उपयोग कर सकते हैं। फ़िडलर खोलें और कम्पोज़ टैब चुनें। नीचे दिए गए अनुसार क्रिया और यूआरएल निर्दिष्ट करें और प्रतिक्रिया की जांच करने के लिए निष्पादन पर क्लिक करें।

क्रिया: प्राप्त

url: http://jsonplaceholder.typicode.com/posts/

प्रतिक्रिया: आपको प्रतिक्रिया इस प्रकार मिलेगी:

"userId": 1, "id": 1, "शीर्षक": "sunt aut ...", "बॉडी": "quia et suscipit ..."

"खुश" (या गैर-त्रुटि) पथ में, GET XML या JSON में प्रतिनिधित्व और 200 का एक HTTP प्रतिक्रिया कोड (OK) देता है। त्रुटि के मामले में, यह अक्सर 404 (NOT FOUND) या 400 (BAD REQUEST) देता है।

2) पोस्ट:

POST क्रिया का उपयोग ज्यादातर नए संसाधन बनाने के लिए किया जाता है । विशेष रूप से, इसका उपयोग अधीनस्थ संसाधन बनाने के लिए किया जाता है। अर्थात्, कुछ अन्य (जैसे माता-पिता) संसाधन के अधीनस्थ।

सफल निर्माण पर, HTTP स्थिति 201 को लौटाएं, 201 HTTP स्थिति के साथ नव-निर्मित संसाधन के लिंक के साथ एक स्थान हेडर लौटाएं।

फ़िडलर या पोस्टमैन के साथ जाँच: हम रिस्पांस की जाँच के लिए फ़िडलर का उपयोग कर सकते हैं। फ़िडलर खोलें और कम्पोज़ टैब चुनें। नीचे दिए गए अनुसार क्रिया और यूआरएल निर्दिष्ट करें और प्रतिक्रिया की जांच करने के लिए निष्पादन पर क्लिक करें।

क्रिया: POST

url: http://jsonplaceholder.typicode.com/posts/

अनुरोध निकाय:

डेटा: {शीर्षक: 'फू', बॉडी: 'बार', यूजरआईडी: १०००, आईडी: १०००}

प्रतिक्रिया: आपको 201 के रूप में प्रतिक्रिया कोड प्राप्त होगा।

यदि हम Id = 1000 के साथ सम्मिलित रिकॉर्ड को जांचना चाहते हैं, तो उसी url को पाने और उपयोग करने के लिए क्रिया को बदलें और Execute पर क्लिक करें।

जैसा कि पहले कहा गया था, उपरोक्त url केवल रीड (GET) की अनुमति देता है, हम अपडेट किए गए डेटा को वास्तविक में नहीं पढ़ सकते हैं।

3) PUT:

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

फ़िडलर या पोस्टमैन के साथ जाँच: हम रिस्पांस की जाँच के लिए फ़िडलर का उपयोग कर सकते हैं। फ़िडलर खोलें और कम्पोज़ टैब चुनें। नीचे दिए गए अनुसार क्रिया और यूआरएल निर्दिष्ट करें और प्रतिक्रिया की जांच करने के लिए निष्पादन पर क्लिक करें।

क्रिया: PUT

url: http://jsonplaceholder.typicode.com/posts/1

अनुरोध निकाय:

डेटा: {शीर्षक: 'फू', बॉडी: 'बार', उपयोगकर्ता आईडी: १, आईडी: १}

प्रतिक्रिया: सफल अपडेट पर यह 200 (या 204 यदि शरीर में कोई भी सामग्री नहीं लौटाता है) एक पीयूटी से लौटाता है।

4) DELETE:

DELETE समझने में बहुत आसान है। इसका उपयोग URI द्वारा पहचाने गए संसाधन को हटाने के लिए किया जाता है ।

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

फ़िडलर या पोस्टमैन के साथ जाँच: हम रिस्पांस की जाँच के लिए फ़िडलर का उपयोग कर सकते हैं। फ़िडलर खोलें और कम्पोज़ टैब चुनें। नीचे दिए गए अनुसार क्रिया और यूआरएल निर्दिष्ट करें और प्रतिक्रिया की जांच करने के लिए निष्पादन पर क्लिक करें।

क्रिया: DELETE

url: http://jsonplaceholder.typicode.com/posts/1

प्रतिक्रिया: सफल विलोपन पर यह प्रतिसाद निकाय के साथ HTTP स्थिति 200 (OK) देता है।

PUT और PATCH के बीच का उदाहरण

डाल

अगर मुझे अपना पहला नाम बदलना है तो अपडेट के लिए PUT अनुरोध भेजें:

{"प्रथम": "नज़्मुल", "अंतिम": "हसन"} तो, यहां पहले नाम को अद्यतन करने के लिए हमें डेटा के सभी मापदंडों को फिर से भेजने की आवश्यकता है।

PATCH:

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

कृपया अधिक जानकारी के लिए नीचे दिए गए लिंक देखें:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

PATCH और PUT अनुरोध के बीच मुख्य अंतर क्या है?

http://www.restapitutorial.com/lessons/httpmethods.html


62
PUT अपडेट नहीं है। PUT दिए गए URI में इकाई को बनाता या प्रतिस्थापित करता है। एचटीटीपी युक्ति के अनुसार, पीयूटी बेकार है। हां, इसे अपडेट करने के लिए इस्तेमाल किया जा सकता है, लेकिन केवल अपडेट के बारे में सोचना सही नहीं है।
मालदोन

2
मैं मानता हूं कि PUT अपडेट नहीं है, इसे प्रतिस्थापित करने के साथ मैप किया जा सकता है, क्योंकि जब आप PUT भेजते हैं, तो यह मौजूदा संसाधन को ओवरराइड करता है। लेकिन अगर हम PATCH भेजते हैं, तो यह केवल निर्दिष्ट प्रविष्टियों को बदल देगा।
अतुल चव्हाण

1
क्योंकि PUT को बनाने के लिए भी उपयोग किया जा सकता है, मुझे यकीन नहीं है कि आपका उत्तर कैसे इंगित करता है जो मुझे उपयोग करना चाहिए?
रोब पी।

1
यह उत्तर बहुत बेहतर है, लेकिन PATCH: stackoverflow.com/a/630475/2391795
Vadorequest

47

PUT = ENTIRE RESOURCE को नए प्रतिनिधित्व के साथ बदलें

PATCH = प्रदान किए गए मानों के साथ स्रोत संसाधन के कुछ हिस्सों को प्रतिस्थापित करें। या संसाधन के अन्य भागों को अद्यतन किया जाता है जिसे आपने प्रदान किया है (टाइमस्टैम्प) और | संसाधन प्रभाव को अद्यतन करने से अन्य संसाधन (संबंध)

https://laracasts.com/discuss/channels/general-discussion/whats-the-differences-between-put-and-patch?page=1


11

नीचे दी गई परिभाषा वास्तविक दुनिया उदाहरण से है।

उदाहरण अवलोकन
प्रत्येक ग्राहक डेटा के लिए, हम उस क्लाइंट डेटा को खोजने के लिए एक पहचानकर्ता का भंडारण कर रहे हैं और हम उस पहचानकर्ता को संदर्भ के लिए उस ग्राहक को वापस भेज देंगे।

  1. पद

    • यदि क्लाइंट POST पद्धति का उपयोग किए बिना किसी भी पहचानकर्ता के बिना डेटा भेजता है तो हम इसे संग्रहीत करेंगे और एक नया पहचानकर्ता असाइन करेंगे।
    • यदि क्लाइंट फिर से उसी डेटा को बिना किसी पहचानकर्ता के POST विधि का उपयोग करके भेजता है , तो हम इसे संग्रहीत करेंगे और एक नया पहचानकर्ता असाइन करेंगे।
    • नोट : यहां डुप्लीकेशन की अनुमति है
  2. डाल

    • यदि क्लाइंट पहचानकर्ता के साथ डेटा भेजता है, तो हम जांच करेंगे कि क्या वह पहचानकर्ता मौजूद है। यदि पहचानकर्ता मौजूद है तो हम डेटा को अपडेट करेंगे और हम इसे बनाएंगे और एक नया पहचानकर्ता असाइन करेंगे।
  3. PATCH

    • यदि क्लाइंट पहचानकर्ता के साथ डेटा भेजता है, तो हम जांच करेंगे कि क्या वह पहचानकर्ता मौजूद है। यदि पहचानकर्ता मौजूद है तो हम डेटा को अपडेट करेंगे और हम एक अपवाद फेंक देंगे।

नोट: पुट विधि पर, हम एक अपवाद नहीं फेंक रहे हैं यदि कोई पहचानकर्ता नहीं मिला है। लेकिन में पैच विधि, तो एक अपवाद फेंक रहे हैं, तो पहचानकर्ता नहीं मिला है।

क्या आपको पता है कि आपके ऊपर कोई सवाल है।


8

अनुरोध प्रकार

  • बनाएँ - पोस्ट
  • पढ़ें - जी.ई.टी.
  • create or update - PUT
  • हटाएं - DELETE
  • अद्यतन - पथ

जीईटी / पीयूटी बेमतलब है PATCH कभी-कभी बेकार हो सकता है

क्या है बेरोजगार - इसका मतलब है कि अगर हम कई बार क्वेरी को आग लगाते हैं, तो इसका परिणाम प्रभावित नहीं करना चाहिए। (एक ही आउटपुट। एक गाय गर्भवती है और अगर हम इसे फिर से प्रजनन करते हैं तो यह कई बार गर्भवती नहीं हो सकती है)

get : -

सरल मिलता है। सर्वर से डेटा प्राप्त करें और इसे उपयोगकर्ता को दिखाएं

{
id:1
name:parth
email:x@x.com
}

post : -

डेटाबेस में नया संसाधन बनाएँ। इसका मतलब है कि यह नया डेटा जोड़ता है। इसका कोई मतलब नहीं है।

put : -

नया संसाधन बनाएं अन्यथा मौजूदा में जोड़ें। बेरोजगार क्योंकि यह हर बार समान संसाधन को अपडेट करेगा और आउटपुट समान होगा। पूर्व। - प्रारंभिक आंकड़े

{
id:1
name:parth
email:x@x.com
}
  • पुट-लोकलहोस्ट / 1 पुट ईमेल करें: ppp@ppp.com
{
id:1
email:ppp@ppp.com
}

patch

तो अब पैच अनुरोध आया PATCH कभी-कभी बेकार हो सकता है

id:1
name:parth
email:x@x.com
}

पैच नाम: w

{
id:1
name:w
email:x@x.com
}
HTTP विधि
जी हाँ
पोस्ट नं
हाँ हाँ
पाट नं *
विकल्प हाँ
हाँ, हाँ
DELETE हाँ

संसाधन: Idempotent - Idempotency क्या है?


"कभी-कभी" बेरोजगारी का वास्तव में क्या मतलब है? क्या आदर्शता निर्धारित करता है?
पोलव

7

यहाँ सभी का एक सरल वर्णन है:

  • POST हमेशा एक संसाधन बनाने के लिए है (इससे कोई फर्क नहीं पड़ता कि इसे दोहराया गया था)
  • PUT जाँच के लिए है यदि संसाधन मौजूद है तो अद्यतन करें, अन्यथा नया संसाधन बनाएँ
  • PATCH हमेशा एक संसाधन को अपडेट करने के लिए होती है

5

PUT और PATCH अनुरोधों के बीच मुख्य अंतर :

मान लीजिए हमारे पास एक संसाधन है जो किसी व्यक्ति का पहला नाम और अंतिम नाम रखता है।

अगर हम पहला नाम बदलना चाहते हैं तो हम अपडेट के लिए एक पुट रिक्वेस्ट भेजें

{ "first": "Michael", "last": "Angelo" }

यहां, हालांकि हम केवल पहला नाम बदल रहे हैं, लेकिन PUT अनुरोध के साथ हमें पहले और अंतिम दोनों मापदंडों को भेजना होगा।
दूसरे शब्दों में, सभी मूल्यों को फिर से भेजना अनिवार्य है, पूर्ण पेलोड।

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


2

PUT & PATCH wrt को क्रमशः बदलने / अद्यतन करने के लिए पूर्ण और आंशिक डेटा भेजने के बीच काफी अंतर है। हालांकि, नीचे दिए गए बिंदुओं के कुछ जोड़े

  1. कभी-कभी POST को create के लिए wrt PUT अपडेट के रूप में माना जाता है
  2. क्या PATCH में पूर्ण बनाम आंशिक डेटा भेजने के लिए HTTP जनादेश / जांच करता है? अन्यथा, PATCH, PUT / POST की तरह ही अपडेट हो सकता है

2

इस पर इस तरीके से विचार करें...

पोस्ट - बनाएँ

PUT - प्रतिस्थापित करें

पथ - अद्यतन

पढ़ो इसे

DELETE - हटाएं


2
मैं शायद इस अंतर को जोड़ूंगा : " अगर ग्राहक परिणामी संसाधन के पते को निर्धारित करता है, तो POST यदि सर्वर इसे करता है। "
ruffin

1

सरलतम स्पष्टीकरण:

POST - नया रिकॉर्ड बनाएं

PUT - यदि रिकॉर्ड मौजूद है, तो और अपडेट करें, एक नया रिकॉर्ड बनाएं

पथ - अद्यतन

पढ़ो इसे

DELETE - हटाएं


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