पाठ 3 / 27

HTTP Methods और उनकी गारंटियाँ

GET, POST, PUT, PATCH और DELETE को उनकी safety और idempotency semantics के अनुसार उपयोग करें।

Safe और idempotent

Safe methods सर्वर की स्थिति नहीं बदलते (GET, HEAD, OPTIONS), इसलिए clients, caches और crawlers उन्हें खुलकर बुला सकते हैं। Idempotent methods दोहराने पर वही अंतिम स्थिति देते हैं (GET, PUT, DELETE, और डिज़ाइन से HEAD/OPTIONS), जिससे timeout के बाद retries सुरक्षित होते हैं। POST दोनों नहीं है: उसे दोहराने से दूसरा resource बन सकता है। PUT ज्ञात URL पर पूरे resource को बदलता है; PATCH आंशिक बदलाव लगाता है; DELETE resource हटाता है (पहले से हटी चीज़ को हटाना फिर भी ठीक होना चाहिए)। स्थिति बदलने के लिए GET कभी उपयोग न करें, क्योंकि links, prefetchers और caches उन्हें चला देंगे।

Methods की गारंटियाँ एक नज़र में

किसी ऑपरेशन के लिए कौन-सा method ठीक है यह तय करते समय इस तालिका का उपयोग करें।

Method   Safe  Idempotent  Typical use
GET      yes   yes         read a resource or a collection
HEAD     yes   yes         headers only (check existence, size, ETag)
PUT      no    yes         replace a resource at a known URL
PATCH    no    no*         partial update (*can be made idempotent)
DELETE   no    yes         remove a resource
POST     no    no          create, or run an action

PATCH के लिए JSON Merge Patch, चलाकर

मैंने यह सादा-Python उदाहरण चलाया। JSON Merge Patch (RFC 7396) सरल आंशिक-अपडेट format है: patch की keys बदलती या जुड़ती हैं, nested objects मिलते हैं, और null मान key हटाता है। Arrays पूरी बदल जाती हैं। यहाँ pin हटा, state जुड़ा और tags बदले।

import hmac, hashlib, json, time, bisect

def merge_patch(target, patch):
    if not isinstance(patch, dict): return patch
    result = dict(target) if isinstance(target, dict) else {}
    for k, v in patch.items():
        if v is None: result.pop(k, None)
        else: result[k] = merge_patch(result.get(k), v)
    return result
doc = {"name": "Asha", "address": {"city": "Pune", "pin": "411001"}, "tags": ["a"]}
print(merge_patch(doc, {"address": {"pin": None, "state": "MH"}, "tags": ["x", "y"], "name": "Asha R"}))

Output:

{'name': 'Asha R', 'address': {'city': 'Pune', 'state': 'MH'}, 'tags': ['x', 'y']}

त्वरित जाँच: कौन-सा method idempotent है और पूरे resource को बदलता है?

  • OPTIONS
  • POST
  • GET
  • PUT
Answer

PUT — PUT resource को दिए रूप पर सेट करता है, इसलिए दोहराने पर वही स्थिति रहती है।