- JSON Patch, RFC 6902 में परिभाषित एक standard format है, जो JSON document को modify करने का तरीका है
- यह HTTP के ज़रिये resource को आंशिक रूप से update करने का एक सरल और efficient तरीका देता है
- पहले
PUT और POST methods में पूरा data भेजना पड़ता था, लेकिन PATCH method partial update की अनुमति देता है
- JSON Patch, JSON document में बदलावों को स्पष्ट और संक्षिप्त रूप में व्यक्त करता है, जिससे bandwidth कम होती है और web application की performance बेहतर होती है
JSON Patch कैसे काम करता है
- JSON Patch, JSON document पर atomic operations की एक श्रृंखला के रूप में काम करता है.
- हर operation में
op field और path field होती है, जो document के किसी विशेष स्थान पर operation चलाती हैं.
- उदाहरण के लिए,
add operation नया field जोड़ता है, और replace operation मौजूदा field को बदल देता है.
JSON Pointer
- JSON Patch, document के किसी विशेष हिस्से की पहचान के लिए JSON Pointer का उपयोग करता है.
- JSON Pointer, slash(
/) से अलग किए गए token string के रूप में document की hierarchy को पहचानता है.
- उदाहरण के लिए,
/user/name, user object के भीतर name field की पहचान करता है.
JSON Patch के फायदे और नुकसान
फायदे
- सटीकता: जटिल structure में किसी विशेष element को ठीक-ठीक modify किया जा सकता है.
- दक्षता: केवल बदलाव भेजकर data transfer और latency को न्यूनतम किया जा सकता है.
- Atomicity: operation fail होने पर पूरे काम को rollback किया जा सकता है.
- Idempotency: सुरक्षित तरीके से retry किया जा सकता है.
- जटिल operations: elements को move या copy किया जा सकता है.
- Validation: API incoming patch को validate करके गलत requests कम कर सकता है.
- Standard-based: अलग-अलग clients और servers के साथ आसानी से integrate किया जा सकता है.
- Field-level access control: बहुत सूक्ष्म स्तर पर modification restrictions लागू किए जा सकते हैं.
- Batch operations: कई बदलावों को एक ही request में process किया जा सकता है.
नुकसान
- जटिलता: जटिल JSON structure को संभालना मुश्किल हो सकता है.
- Maintenance cost: API के evolve होने पर paths invalid हो सकते हैं.
- Debugging में कठिनाई: कई operations एक साथ batch होने पर उन्हें trace करना मुश्किल होता है.
- Object order preservation: move operation object के क्रम को guarantee नहीं करता.
- Security concerns: गलत request handling होने पर vulnerabilities पैदा हो सकती हैं.
JSON Patch operations के उदाहरण
- Add: नया field जोड़ता है.
- Remove: मौजूदा field हटाता है.
- Replace: मौजूदा field को नए value से बदलता है.
- Move: element को किसी दूसरी जगह ले जाता है.
- Copy: element को किसी दूसरी जगह कॉपी करता है.
- Test: यह जाँचता है कि किसी विशेष path पर value set है या नहीं.
Tools और libraries में JSON Patch
- कई programming languages में JSON Patch को support करने वाली libraries मौजूद हैं: fast-json-patch, python-json-patch, .NET में JsonPatch library आदि
- JSON Patch सीखने के लिए एक बेहतरीन tool jsonpatch.me है, जो JSON Patch commands चलाने के लिए एक free online service है. इसका API भी है
GN⁺ का सारांश
- JSON Patch, JSON document के partial updates को efficiently करने वाला एक शक्तिशाली tool है.
- जटिल JSON structure के साथ काम करना कठिन हो सकता है, लेकिन विभिन्न libraries और tools की मदद से इसे आसान बनाया जा सकता है.
- JSON Patch, data transfer कम करने और web application की performance सुधारने में उपयोगी है.
- JSON Merge Patch जैसे alternatives पर भी विचार किया जा सकता है, और API development में JSON Patch का उपयोग efficiency बढ़ा सकता है.
1 टिप्पणियां
Hacker News राय
JSON Patch को इस तरह डिज़ाइन किया गया है कि वह किसी भी JSON document को modify कर सके, इसलिए यह जटिल लग सकता है। अगर data set को थोड़ा सीमित किया जाए, तो document को कहीं अधिक सरल तरीके से patch किया जा सकता है। उदाहरण के लिए, Firebase में
nullvalue store नहीं की जा सकती, और उसेnullपर set करना deletion को दर्शाता है। इस तरह की सरल पाबंदियों से PATCH को आसानी से implement किया जा सकता है।"null का मतलब delete"होने के अलावा कुछ नया सीखने की ज़रूरत नहीं पड़ती, और यही API की एक बेहतरीन विशेषता है.JSON में delimiter के रूप में
/का इस्तेमाल एक अजीब चुनाव है। JSON, JS का subset है, इसलिए.को delimiter के रूप में अपेक्षित किया गया था।/को देखकर लगता है कि यह spec backend लोगों ने लिखी होगी, और शायद path को URL जैसा बनाकर relative/absolute path की ambiguity को हल करने की कोशिश की गई है.path string की बजाय array होना चाहिए। नहीं तो key में
/को escape करना पड़ता है और path string को parse भी करना पड़ता है। इससे arbitrary JSON documents को handle करना संभव नहीं रह जाता.मैंने एक बार JSON Patch का उपयोग किया था, और यह अप्रत्याशित समस्या को जल्दी सुलझाने के लिए किए गए एक hack की तरह था। हमने ऐसा web interface बनाया था जिससे overseas contractors text data पर word level पर annotation कर सकें। data पर छोटे chunks में annotation होने वाली थी, लेकिन जब पूरा document assign कर दिया गया, तो annotations save नहीं हो रही थीं। JSON Patch मिला, और upload code को बदलकर सिर्फ patch का इस्तेमाल करने लायक बना दिया.
JSON Patch की path specification में array items को index की बजाय पहचान योग्य key-value pair से चुनने के लिए standard syntax की ज़रूरत है। यह खास तौर पर तब महत्वपूर्ण है जब items add किए जाते हैं या JSON items के पुराने versions के बीच diff analyze किया जाता है.
JSON Patch की एक बड़ी ताकत idempotency है। JSON Patch operations को बिना unintended side effects के सुरक्षित रूप से retry किया जा सकता है। हालांकि, यह चौंकाने वाली बात थी कि array में items add नहीं किए जा सकते.
यह MongoDB update query की तरह काम करता है। सोच रहा हूँ कि क्या local file पर पूरे MongoDB को चलाए बिना भी इसकी update language का उपयोग किया जा सकता है.
JSONDiffpatch और JSON Patch की तुलना ज़रूरी है। JSONDiffpatch browser और node/Cloudflare Workers जैसी environments में अच्छी तरह काम करता है.
JSON Patch को external partners को सिखाने के लिए मनाना मुश्किल था। इसे customer-facing API में इस्तेमाल किया गया था, और users से इसे समझवाने और अपनवाने के लिए काफी मेहनत करनी पड़ी.
JSON Pointer spec कुछ ज़्यादा ही
URL-yलगती है, इसलिए लगता है कि meta-JSON syntax को छोड़ा जा सकता था।testऔरcopyJSON Patch spec में अनोखे हैं, और एक साथ कई edits करने वालाtransactionभी संभव है.