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


186

मैं PUTअपने रेल एप्लिकेशन में एक अनुरोध का उपयोग कर रहा हूं । अब, एक नया HTTP क्रिया, PATCHब्राउज़रों द्वारा लागू किया गया है। इसलिए, मैं जानना चाहता हूं कि अनुरोधों PATCHऔर PUTअनुरोधों के बीच मुख्य अंतर क्या है , और जब हमें एक या दूसरे का उपयोग करना चाहिए।

जवाबों:


139

HTTP क्रियाएं संभवतः HTTP प्रोटोकॉल के बारे में सबसे अधिक गूढ़ बातों में से एक हैं। वे मौजूद हैं, और उनमें से कई हैं, लेकिन वे क्यों मौजूद हैं?

रेल कई क्रियाओं का समर्थन करना चाहते हैं और कुछ क्रियाओं को जोड़ना चाहते हैं जो मूल रूप से वेब ब्राउज़र द्वारा समर्थित नहीं हैं।

यहां http क्रियाओं की एक विस्तृत सूची दी गई है: http://annevankesteren.nl/2007/10/http-methods

आधिकारिक RFC से HTTP पैच: https://datatracker.ietf.org/doc/rfc5789/?include_text=1

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

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

जहाँ तक मुझे पता है, PATCH क्रिया का उपयोग नहीं किया जाता है क्योंकि यह रेल अनुप्रयोगों में है ... जैसा कि मैं यह समझता हूँ, RFC पैच क्रिया का उपयोग पैच निर्देश भेजने के लिए किया जाना चाहिए जैसे कि आप दो फ़ाइलों के बीच एक अंतर करते हैं। पूरी इकाई को फिर से भेजने के बजाय, आप एक पैच भेजते हैं जो पूरी इकाई के आकार से बहुत छोटा हो सकता है।

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

एक अन्य संभावित उपयोग मामला कुछ हद तक NoSQL डेटाबेस से संबंधित है, दस्तावेजों को संग्रहीत करना संभव है। मान लें कि हम सर्वर से क्लाइंट को आगे और पीछे डेटा भेजने के लिए JSON संरचना का उपयोग करते हैं। यदि हम किसी क्षेत्र को हटाना चाहते हैं, तो हम $ unset के लिए मोंगोडब में एक समान सिंटैक्स का उपयोग कर सकते हैं । दरअसल, दस्तावेजों को अपडेट करने के लिए मोंगॉडब में इस्तेमाल की जाने वाली विधि का उपयोग संभवतः जेंस पैच को संभालने के लिए किया जा सकता है।

इस उदाहरण को लेते हुए:

db.products.update(
   { sku: "unknown" },
   { $unset: { quantity: "", instock: "" } }
)

हम इस तरह से कुछ कर सकते हैं:

PATCH /products?sku=unknown
{ "$unset": { "quantity": "", "instock": "" } }

अंतिम, लेकिन कम से कम, लोग नहीं कह सकते कि वे HTTP क्रियाओं के बारे में क्या चाहते हैं। केवल एक सत्य है, और सत्य RFC में है।


1
यह ध्यान रखना महत्वपूर्ण है कि RFC 5789 अभी भी प्रस्ताव के चरण में है और आधिकारिक तौर पर स्वीकार नहीं किया गया है और वर्तमान में इसे 'इरेटा अस्तित्व' के रूप में चिह्नित किया गया है। यह 'सर्वोत्तम अभ्यास' अत्यधिक बहस का है और तकनीकी रूप से PATCH अभी भी HTTP मानक का हिस्सा नहीं है। यहाँ केवल सच यह है कि चूंकि RFC अस्वीकार्य है, इसलिए आपको ऐसा नहीं करना चाहिए।
फिशपेन 0

3
यहां तक ​​कि अगर यह अभी भी प्रस्ताव में है, तो इसका मतलब यह नहीं है कि इसका उपयोग नहीं किया जाना चाहिए। यदि ऐसा होता, तो हम वेबसोकेट्स और कई अन्य rfcs का उपयोग नहीं कर पाते जो अभी भी प्रस्ताव में हैं ... प्रस्ताव को लागू करना पूरी तरह से कस्टम को लागू करने से 100 गुना बेहतर है जिसे कोई और लागू नहीं करता है।
Lo15c Faure-Lacroix

बी एस। यह "प्रस्ताव में" नहीं है, और यह HTTP मानक (मानक, RFC 7231 प्रतिनिधियों के लिए IANA रजिस्ट्री के लिए प्रतिनिधि है, और PATCH वहां सूचीबद्ध है) का हिस्सा है।
जूलियन रेसके ने

@ JulianReschke यदि आप इस RFC की दूसरी पंक्ति पढ़ते हैं, तो आप देखेंगे कि यह अभी भी PROPOSED STANDARD के रूप में चिह्नित है । तो नहीं, पैच विधि अभी भी प्रस्ताव में है। Rfc यहाँ btw है। tools.ietf.org/html/rfc5789 और rfc7231 भी PROPOSED STANDARD है । यदि आप उदाहरण के लिए RFC821 को देखते हैं, तो इसे इंटरनेट STANDARD
Lourec Faure-Lacroix

1
@JulianReschke en.wikipedia.org/wiki/Internet_Standard#Proposed_Standard ... यह मेरा शब्द नहीं है। एक प्रस्तावित मानक का मतलब यह नहीं है कि आप इसे ठीक से लागू नहीं कर सकते हैं जैसा कि मैंने ऊपर बताया। इसका मतलब यह नहीं है कि इसे लागू करने के लिए पर्याप्त स्थिर नहीं है ... लेकिन यह अभी भी प्रस्ताव में है जब तक कि इसे इंटरनेट मानक के रूप में चिह्नित नहीं किया जाता है ... मुझे यकीन नहीं है कि आप उस पर कैसे बहस कर रहे हैं। इसे "प्रस्तावित मानक" कहा जाता है इसका मतलब प्रस्ताव के अलावा और कुछ नहीं हो सकता। यदि आप यह तर्क देना चाहते हैं कि प्रस्तावित मानक का उपयोग किया जा सकता है। यह वही है जो मैंने लिखा था।
लोकेक फ्योर-लैक्रोसिक्स

104

मैं गूगल के साथ घंटे की जोड़ी बिताया है और इस सवाल का जवाब मिल गया यहाँ

PUT => यदि उपयोगकर्ता रिकॉर्ड के सभी या सिर्फ एक हिस्से को अपडेट कर सकता है , तो PUT का उपयोग करें (उपयोगकर्ता नियंत्रण जो अपडेट हो जाता है)

PUT /users/123/email
new.email@example.org

PATCH => यदि उपयोगकर्ता केवल आंशिक रिकॉर्ड ही अपडेट कर सकता है , तो बस एक ईमेल पता (एप्लिकेशन नियंत्रण जो अपडेट किया जा सकता है) कहें, PATCH का उपयोग करें।

PATCH /users/123
[description of changes]

क्यों Patch

PUTविधि को आंशिक के बजाय अधिक बैंडविड्थ या पूर्ण संसाधनों की आवश्यकता होती है। तो PATCHबैंडविड्थ को कम करने के लिए पेश किया गया था।

PATCH के बारे में स्पष्टीकरण

PATCH एक ऐसा तरीका है जो सुरक्षित नहीं है, न ही बेरोजगार है, और अन्य संसाधनों पर पूर्ण और आंशिक अपडेट और साइड-इफेक्ट की अनुमति देता है।

PATCH एक विधि है जो संलग्न इकाई में निर्देशों का एक सेट होता है जिसमें बताया गया है कि वर्तमान में मूल सर्वर पर रहने वाले संसाधन को एक नया संस्करण बनाने के लिए कैसे संशोधित किया जाना चाहिए।

PATCH /users/123
[
  { "op": "replace", "path": "/email", "value": "new.email@example.org" }
]

यहाँ डाल और पैच के बारे में अधिक जानकारी


7
यह PATCH सुरक्षित क्यों नहीं है?
बिष्ट भट्टा

1
PATCHके बीच POST, PUTआदि "सुरक्षित" नहीं है, क्योंकि यह आपके डेटा को संशोधित करता है (साइड इफेक्ट्स)। की तुलना में GET, OPTIONSआदि (सुरक्षित तरीके) जहां आप बिना किसी साइड इफेक्ट के कई बार समापन बिंदु कह सकते हैं।
इमिक्स

1
PATCH को केवल बैंड-बाजे को बचाने के लिए पेश नहीं किया गया था। जैसा कि RFC 5789 में कहा गया है:> "अंतर-क्षमता में सुधार और त्रुटियों को रोकने के लिए एक नई विधि आवश्यक है।" बहु समानांतर वातावरण में केवल PUTs शामिल हैं, जिसमें शेष पेलोड शामिल हैं, जो संसाधन की अन्य विशेषताओं के संशोधन का जोखिम बढ़ाएगा। PATCH ऐसी समस्या का समाधान करता है।
टॉमस

43

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

{ "first": "Nazmul", "last": "hasan" } 

लेकिन यहां एक समस्या यह है putकि जब मैं putअनुरोध भेजना चाहता हूं तो मुझे सभी दो मापदंडों को भेजना होगा firstऔर last
इसलिए सभी को फिर से भेजना अनिवार्य है

पैच :
patchअनुरोध कहते हैं। केवल वही भेजें dataजिसे आप चाहते हैं updateऔर यह अन्य डेटा को प्रभावित या परिवर्तित नहीं करेगा।
तो फिर से सभी मूल्य भेजने की कोई आवश्यकता नहीं है। बस मैं अपना पहला नाम अपडेट करना चाहता हूं, इसलिए मुझे firstअपडेट करने के लिए केवल नाम भेजने की आवश्यकता है ।


13

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

पद

एक HTTP.POST विधि हमेशा सर्वर पर एक नया संसाधन बनाती है। इसका अप्रतिबंधित अनुरोध यानी यदि उपयोगकर्ता 2 बार एक ही अनुरोध करता है तो यह एक और नया संसाधन पैदा करेगा यदि कोई बाधा नहीं है।

http पद विधि SQL में एक INSERT क्वेरी की तरह है जो डेटाबेस में हमेशा एक नया रिकॉर्ड बनाती है।

उदाहरण: नए उपयोगकर्ता, ऑर्डर आदि को बचाने के लिए POST विधि का उपयोग करें जहां बैकएंड सर्वर नए संसाधन के लिए संसाधन आईडी तय करता है।

डाल

HTTP.PUT विधि में संसाधन को पहले URL से पहचाना जाता है और यदि यह मौजूद है तो इसे अपडेट किया जाता है अन्यथा एक नया संसाधन बनाया जाता है। जब लक्ष्य संसाधन मौजूद होता है तो वह उस संसाधन को एक नए निकाय के साथ अधिलेखित कर देता है। HTTP.PUT विधि का उपयोग किसी संसाधन को बनाने या अद्यतन करने के लिए किया जाता है।

http पुट विधि SQL में MERGE क्वेरी की तरह है जो दिए गए रिकॉर्ड के मौजूद होने के आधार पर रिकॉर्ड को सम्मिलित या अपडेट करता है।

PUT रिक्वेस्ट इम्पोटेंट है यानी एक ही रिक्वेस्ट को दो बार हिट करने से मौजूदा रिकॉर्डिंग अपडेट हो जाएगी (कोई नया रिकॉर्ड नहीं बना) PUT विधि में संसाधन आईडी क्लाइंट द्वारा तय की जाती है और अनुरोध url में प्रदान की जाती है।

उदाहरण: मौजूदा उपयोगकर्ता या ऑर्डर को अपडेट करने के लिए PUT विधि का उपयोग करें।

PATCH

HTTP.PATCH विधि का उपयोग आंशिक संशोधनों के लिए संसाधन यानी डेल्टा अपडेट के लिए किया जाता है।

http पैच विधि SQL में एक UPDATE क्वेरी की तरह है जो केवल चयनित कॉलमों को सेट करती है या अपडेट करती है न कि पूरी पंक्ति को।

उदाहरण: आप ऑर्डर की स्थिति को अपडेट करने के लिए पैटच विधि का उपयोग कर सकते हैं।

PATCH / एपीआई / उपयोगकर्ता / 40450236 / आदेश / 10234557

अनुरोध निकाय: {स्थिति: 'वितरित'}


यह सबसे खराब स्पष्टीकरण है जिसे कोई भी कभी भी डाल और पैच के बारे में पढ़ सकता है। और इसके अलावा, पहले से ही पोस्ट किए गए इतने अच्छे उत्तरों के बाद, आपको क्या लगता है कि आपका उत्तर यहां अलग है?
कोडहंटर 16

3

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


1

PUT और PATCH तरीके प्रकृति में समान हैं, लेकिन एक महत्वपूर्ण अंतर है।

PUT - PUT अनुरोध में, संलग्न इकाई को एक संसाधन का संशोधित संस्करण माना जाएगा जो सर्वर पर रहता है और इसे इस संशोधित इकाई द्वारा बदल दिया जाएगा।

PATCH - PATCH अनुरोध में, संलग्न इकाई में निर्देशों का समूह होता है कि सर्वर पर रहने वाली इकाई को एक नया संस्करण बनाने के लिए कैसे संशोधित किया जाएगा।


1

HTTP की शर्तों के अनुसार, यह PUTअनुरोध डेटाबेस अपडेट स्टेटमेंट की तरह ही है। PUT- मौजूदा संसाधन (पहले POSTED) को संशोधित करने के लिए उपयोग किया जाता है। दूसरी ओर PATCHमौजूदा संसाधन के कुछ हिस्से को अपडेट करने के लिए अनुरोध का उपयोग किया जाता है।

उदाहरण के लिए:

उपभोक्ता विवरण:

// This is just a example.

firstName = "James";
lastName = "Anderson";
email = "email@domain.com";
phoneNumber = "+92 1234567890";
//..

जब हम पूरे रिकॉर्ड को अपडेट करना चाहते हैं? हमें इसके लिए उपयोग Http PUT verbकरना होगा।

जैसे कि:

// Customer Details Updated.

firstName = "James++++";
lastName = "Anderson++++";
email = "email@Updated.com";
phoneNumber = "+92 0987654321";
//..

दूसरी ओर अगर हम रिकॉर्ड के केवल हिस्से को ही नहीं, बल्कि पूरे रिकॉर्ड को भी अपडेट करना चाहते हैं, तो जाएं Http PATCH verbजैसे कि:

   // Only Customer firstName and lastName is Updated.

    firstName = "Updated FirstName";
    lastName = "Updated LastName";
   //..

PUT VS POST:

PUTअनुरोध का उपयोग करते समय हमें सभी पैरामीटर जैसे कि FirstName, lastName, email, phoneNumber patchभेजना होगा जहां अनुरोध के रूप में केवल वही पैरामीटर भेजें जिन्हें हम अपडेट करना चाहते हैं और यह अन्य डेटा को प्रभावित या परिवर्तित नहीं करेगा।

अधिक जानकारी के लिए कृपया देखें: https://fullstack-developer.academy/restful-api-design-post-vs-put-vs-patch/


0

पुट और पैच विधि समान हैं। लेकिन रेल में इसकी अलग-अलग मेट्रो है। अगर हम पूरे रिकॉर्ड को अपडेट / बदलना चाहते हैं तो हमें पुट विधि का उपयोग करना होगा। यदि हम विशेष रिकॉर्ड उपयोग पैच विधि को अपडेट करना चाहते हैं।

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