तुलना
Protocol Buffers या JSON
Protocol Buffers `.proto` स्कीमा से टाइप्ड संदेश परिभाषित करता है, field number पर आधारित बाइनरी wire फ़ॉर्मैट और अलग ProtoJSON मानचित्रण देता है। JSON RFC 8259 का सामान्य टेक्स्ट फ़ॉर्मैट है और किसी खास स्कीमा को नहीं मानता।
कौन-सा फ़ॉर्मैट चुनें?
RPC या सेवा संदेशों में टाइप अनुबंध और बाइनरी wire संगतता प्रबंधित करनी हो तो Protobuf चुनें। सामान्य टेक्स्ट संरचनाओं और व्यापक JSON टूल के लिए JSON चुनें।
इसके लिए उपयुक्त Protocol Buffers स्कीमा फ़ाइल
Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना
- protoc से भाषा-विशिष्ट कोड बनाना
- RPC और सेवाओं के बीच संचार के संदेश तय करना
इसके लिए उपयुक्त JSON
वेब API, कॉन्फ़िगरेशन फाइलें और डेटा विनिमय
- संरचित डेटा भेजना
मूल जानकारी
| मद | Protocol Buffers स्कीमा फ़ाइल | JSON |
|---|---|---|
| एक्सटेंशन | .proto | .json |
| MIME प्रकार | text/plain | application/json |
| सामान्य उपयोग | Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना | वेब API, कॉन्फ़िगरेशन फाइलें और डेटा विनिमय |
| कैसे खोलें | इसे टेक्स्ट एडिटर या Protocol Buffers समर्थित IDE में खोलें। सिंटैक्स और import जाँचने के लिए प्रोजेक्ट में उपयोग किए जाने वाले protoc संस्करण और सेटिंग से कंपाइल करें। | इसे टेक्स्ट एडिटर, IDE या JSON समर्थित व्यूअर में खोलें। |
| निर्यात या रूपांतरण | दूसरे स्कीमा प्रारूप में जाने पर प्रकार, फ़ील्ड नंबर, डिफ़ॉल्ट मान, enum और अनुकूलता के नियमों का मिलान करें। फिर कोड बनाकर वास्तविक डेटा से परीक्षण करें। एक्सटेंशन को .json या किसी बाइनरी एक्सटेंशन में बदलने से फ़ाइल परिवर्तित नहीं होती। | एप्लिकेशन या रूपांतरण उपकरण इसे CSV जैसे प्रारूपों में बदल सकते हैं। |
उपयोग के अनुसार चुनें
protoc से भाषा-विशिष्ट कोड बनाना
Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना
Protocol Buffers स्कीमा फ़ाइलRPC और सेवाओं के बीच संचार के संदेश तय करना
Protocol Buffers संदेशों की संरचना तय करना · अलग-अलग प्रोग्रामिंग भाषाओं में डेटा अनुबंध साझा करना
Protocol Buffers स्कीमा फ़ाइलसंरचित डेटा भेजना
वेब API, कॉन्फ़िगरेशन फाइलें और डेटा विनिमय
JSONमुख्य बिंदु 1
Protobuf बाइनरी wire data `.proto` परिभाषा और field number पर निर्भर है। JSON बिना स्कीमा के टेक्स्ट object और array दर्शाता है; ProtoJSON अलग नियमों से Protobuf प्रकारों को JSON मानों में मैप करता है।
अंतर के बारे में विस्तार सेमुख्य बिंदु 2
ProtoJSON bytes को base64 string, int64 को string, enum को नाम और field name को JSON key बनाता है। ये बाइनरी wire फ़ॉर्मैट या कोई भी JSON Schema नहीं हैं।
अंतर के बारे में विस्तार सेअंतर के बारे में विस्तार से
सेवा-स्तरीय टाइप अनुबंध और संक्षिप्त बाइनरी आदान-प्रदान के लिए Protobuf लें। सामान्य टेक्स्ट इंटरफ़ेस के लिए JSON लें। Protobuf का JSON रूप इस्तेमाल करें तो ProtoJSON नियम अपनाएँ; हर JSON दस्तावेज़ को समान न मानें। presence, null, संख्यात्मक सीमा, अज्ञात फ़ील्ड और स्कीमा विकास जाँचें।
- Protobuf wire संदेशों के field number और प्रकार समझने के लिए मिलते हुए स्कीमा चाहिए। सामान्य JSON सिंटैक्स में स्कीमा अनिवार्य नहीं है।
- ProtoJSON के अपने मानचित्रण और संगतता नियम हैं; यह बाइनरी wire से कम कुशल है और अज्ञात फ़ील्ड को उसी तरह बनाए नहीं रखता।
- रूपांतरण में field presence, पूर्णांक सटीकता, enum नाम, map key, oneof, null और अज्ञात फ़ील्ड बदल सकते हैं। वास्तविक runtime लाइब्रेरी और पुराने-नए स्कीमा संस्करणों से जाँचें।
अक्सर पूछे जाने वाले प्रश्न
क्या ProtoJSON हर JSON दस्तावेज़ के साथ विनिमेय है?
नहीं। ProtoJSON केवल Protobuf स्कीमा से व्यक्त संरचनाओं को अपने नियमों से दर्शाता है; यह हर JSON Schema या पूरा wire व्यवहार नहीं दर्शा सकता।