आपने कई भाषाओं के लिए दो प्रभावी तरीकों का वर्णन किया है। या तो ठीक काम करना चाहिए। मैं अपने कोड के लिए स्पष्ट भाषा अनुरोध पैरामीटर चुनूंगा।
टीएल; डीआर बैकस्टोरी
एक स्वीकार भाषा हैडर है । ध्यान दें, Accept
नहीं Accepted
। यह HTTP सामग्री बातचीत का एक मानक हिस्सा है। प्रतिक्रिया आमतौर पर एक सामग्री-भाषा सेट करती है शीर्ष लेख को वापस ।
Accept-Language
उद्घाटन बोली है, विकल्पों के एक सेट की पेशकश; Content-Language
वह संकल्प है, जिसमें बताया गया है कि किस भाषा को चुना गया। अधिकांश Content-Language
उत्तर एकल भाषा को लौटाते हैं, लेकिन प्रतिक्रिया भाषाओं की अल्पविराम से अलग सूची प्रदान करने का विकल्प है। आमतौर पर यह मिश्रित-सामग्री होगी, लेकिन ऐसा कोई कारण नहीं है कि यह कई असहमति के विकल्पों का संकेत न दे सके। यदि आप क्लाइंट को सभी उपलब्ध भाषाओं का अनुरोध करना चाहते हैं, तो पहले से ही वाइल्डकार्ड अनुरोध विकल्प है *
।
तो पहले से ही एक HTTP हैडर तंत्र है जिसका आप उपयोग कर सकते हैं। हालांकि, सावधान रहें कि आप एक वार्ता प्रक्रिया में गुल्लकिंग करेंगे जो अधिक बार संभावित विकल्पों की एक सरणी प्रस्तुत करता है, और एक ही विकल्प वापस मिलता है। आप "यहां विकल्पों की एक सूची है, इस भावना को स्थानांतरित कर देंगे, मुझे उन सभी को दे दो!" यदि आप इसके साथ ठीक हैं, तो आपको एक समाधान मिल गया है।
हालाँकि, HTTP हेडर में REST एपीआई मापदंडों को संकेत देने की उपयुक्तता के रूप में काफी बहस है। यह एक रेस्तरां में प्रवेश करने और वेटर या वेट्रेस के सामने आने के बजाय अपने विस्तृत ऑर्डर को होस्ट या माएटर डी 'को धुंधला करने जैसा है। यह काम कर सकता है, और अच्छी तरह से काम कर सकता है जैसे कि यदि मेज़बान पर निर्देशित आदेश पेय या ऐपेटाइज़र से संबंधित है - ऐसी चीजें जो होस्ट जल्दी से देख सकते हैं, या अपने सर्वर पर जल्दी से संवाद कर सकते हैं। लेकिन इसे प्रोटोकॉल के उल्लंघन के रूप में भी देखा जा सकता है, जिसे गलत स्तर / परत या गलत खिलाड़ी पर संबोधित किया जाता है।
एक दूसरा विकल्प एक स्पष्ट अनुरोध पैरामीटर होगा। आप सुझाव दें ?all_languages=true
। यह अत्यधिक विशिष्ट लगता है। कुछ ऐसा है lang=en,fr,es
(कई सूचीबद्ध भाषाओं की अनुमति दें) या lang=*
या lang=all
(हर उपलब्ध भाषा को निर्दिष्ट करें) अधिक सामान्य लगता है। यह URL या अनुरोध बॉडी में व्यक्त किया जा सकता है।
किसी भी तरह से, आपकी बहुभाषी प्रतिक्रिया को आसानी से रिटर्न किए गए JSON पेलोड में एन्कोड किया जा सकता है:
[ { "lang": "en", "content": "As Gregor Samsa awoke one morning..." },
{ "lang": "de", "content": "Als Gregor Samsa eines Morgens..." },
...
]
अंत में, इनमें से किसी भी दृष्टिकोण को आपके लिए अच्छा काम करना चाहिए। या तो एक "सुसंगत, अच्छी तरह से संरचित RESTful एपीआई डिजाइन के रूप में देखा जा सकता है।" यह निर्धारित करने के लिए कि कौन सा बेहतर है, ज्यादातर आपके दृष्टिकोण पर निर्भर करता है कि गुल्लक की उपयुक्तता पर (और सामान्य रूप से थोड़ा बदलकर) HTTP कंटेंट बातचीत हेडर।
मेरी अपनी प्राथमिकता एक एपीआई अनुरोध के बराबर भागों के रूप में हेडर और अन्य मापदंडों को रोकना नहीं है । स्पष्ट lang
या language
पैरामीटर मुझे साफ लगता है। लेकिन चूंकि HTTP क्रिया (जैसे GET
, PUT
, POST
, PATCH
, ...), शीर्ष लेख का हिस्सा है और भी महत्वपूर्ण करने के लिए / अनुरोध की व्याख्या के साथ intermixed, मैं मानता लिफाफा बनाम सामग्री भेद थोड़ा कृत्रिम और अस्पष्ट है। अधिकांश डिजाइन निर्णयों के साथ, वास्तविक विशेषज्ञ इसका अलग-अलग उत्तर देते हैं, और वाईएमएमवी।