asp.net-web-api
ASP.NET वेब एपीआई कंटेंट निगोशिएशन
खोज…
ASP.NET वेब एपीआई कंटेंट निगोशिएशन बेसिक जानकारी
कंटेंट निगोशिएशन को किसी दिए गए संसाधन के लिए सर्वश्रेष्ठ प्रतिनिधित्व के चयन की प्रक्रिया के रूप में परिभाषित किया जा सकता है। इसलिए सामग्री बातचीत का अर्थ है कि ग्राहक और सर्वर उनके बीच बातचीत कर सकते हैं ताकि ग्राहक को उनके आवश्यक प्रारूप के अनुसार डेटा मिल सके।
तीन बिंदु हैं जिन पर इंटरनेट निर्भर करता है,
- संसाधन
- संसाधन (URL) के लिए एक सूचक
- संसाधन का प्रतिनिधित्व
तीसरा बिंदु अन्य दो की तुलना में अधिक महत्वपूर्ण है, क्योंकि सब कुछ इस आधार पर काम करता है कि हम संसाधन को कैसे देख सकते हैं। हम दो स्वरूपों में एक संसाधन का प्रतिनिधित्व कर सकते हैं।
- XML (एक्स्टेंसिबल मार्कअप लैंग्वेज) फॉर्मेट
- JSON (जावास्क्रिप्ट ऑब्जेक्ट संकेतन) प्रारूप
रेस्टफुल सर्विस के मानकों में से एक यह है कि क्लाइंट के पास यह निर्णय लेने की क्षमता होनी चाहिए कि वे JSON या XML में किस फॉर्मेट में रिस्पांस चाहते हैं। सर्वर को भेजे जाने वाले अनुरोध में एक स्वीकार शीर्षक शामिल होता है। ग्राहक के हेडर को स्वीकार करते हुए प्रतिक्रिया के लिए प्रारूप निर्दिष्ट कर सकते हैं।
उदाहरण के लिए,
Accept: application/xml एक्सएमएल प्रारूप में Accept: application/xml रिटर्न परिणाम
Accept: application/json रिटर्न का परिणाम JSON प्रारूप में है
अनुरोध में स्वीकार्य हेडर मान के आधार पर, सर्वर प्रतिक्रिया भेजता है। इसे कंटेंट निगोशिएशन कहा जाता है।
जब हम विशिष्ट प्रारूप में डेटा का अनुरोध करते हैं तो दृश्य के पीछे क्या होता है?
ASP.NET वेब एपीआई कंट्रोलर उस डेटा को जनरेट करता है जिसे हम क्लाइंट को भेजना चाहते हैं और डेटा को वेब एपीआई पाइपलाइन को सौंपते हैं जो तब क्लाइंट के एक्सेप्ट हेडर को खोजते हैं। फिर, डेटा को प्रारूपित करने के लिए एक उपयुक्त फ़ॉर्मेटर चुनें।
जैसा कि ASP.NET वेब एपीआई बहुत एक्स्टेंसिबल है, हम अनुरोध हेडर में हेडर को स्वीकार करने के लिए कई मान भी निर्दिष्ट कर सकते हैं।
Accept: application/xml,application/json
उपरोक्त मामले में, सर्वर प्रतिक्रिया के डेटा को प्रारूपित करने के लिए पहला फ़ॉर्मेटर चुनता है।
हम स्वीकार शीर्ष लेख में गुणवत्ता कारक भी निर्दिष्ट कर सकते हैं। इस स्थिति में, सर्वर एक प्रारूप का चयन करता है जिसमें उच्च गुणवत्ता कारक होता है।
Accept: application/json;q=0.8,application/xml;q=0.5
अगर हम किसी भी हेडर को निर्दिष्ट नहीं करते हैं, तो डिफ़ॉल्ट रूप से JSON फॉर्मैटर चुनें।
जब क्लाइंट से अनुरोधित प्रारूप में प्रतिक्रिया भेजी जा रही है, तो ध्यान दें कि प्रतिक्रिया का Content-Type हेडर उचित मूल्य पर सेट है। उदाहरण के लिए, यदि क्लाइंट ने application/xml का अनुरोध किया है, तो सर्वर डेटा को XML प्रारूप में भेजता है और Content-Type=application/xml भी सेट करता है।
फ़ॉर्मेटर्स का उपयोग सर्वर द्वारा अनुरोध और प्रतिक्रिया संदेश दोनों के लिए किया जाता है। जब क्लाइंट सर्वर के लिए एक अनुरोध भेजता है, तो हम सर्वर को उस डेटा के प्रारूप को बताने के लिए उचित-मूल्य के लिए सामग्री-प्रकार हेडर सेट करते हैं जो हम भेज रहे हैं।
उदाहरण के लिए, यदि क्लाइंट JSON डेटा भेज रहा है, तो सामग्री-प्रकार हेडर application/json सेट है। सर्वर को पता है कि यह JSON डेटा के साथ काम कर रहा है, इसलिए यह JSON डेटा को JSON डेटा को .NET प्रकार में बदलने के लिए उपयोग करता है। इसी तरह जब सर्वर से क्लाइंट को रिस्पांस भेजा जा रहा है, तो हेडर मान के आधार पर, .NET टाइप को JSON, XML आदि में बदलने के लिए उपयुक्त फॉर्मेटर का उपयोग किया जाता है।
विभिन्न प्रकार की प्रतिक्रिया प्रारूप का उदाहरण:
आवेदन / json:
{
"Email": "sample string 1",
"HasRegistered": true,
"LoginProvider": "sample string 3"
}
application / xml:
<UserInfoViewModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApiDemo.Models">
<Email>sample string 1</Email>
<HasRegistered>true</HasRegistered>
<LoginProvider>sample string 3</LoginProvider>
</UserInfoViewModel>
आधुनिक वेब आधारित एप्लिकेशन विभिन्न भाषाओं और प्रारूपों में डेटा प्रदान कर सकते हैं। इसलिए, यदि हम दुनिया भर में वैश्विक उपयोगकर्ताओं को कवर करने के लिए अपना एपीआई विकसित करते हैं, तो कंटेंट नेगोशिएशन प्रासंगिक है।
वेब एपीआई में सामग्री बातचीत
अवधारणा को समझना
वेब एपीआई में सामग्री की बातचीत को समझने के लिए, Resource शब्द को समझना महत्वपूर्ण है।
वेब पर, कोई भी जानकारी जिसे हम एक्सेस कर सकते हैं, उसे HTTP resource रूप में संदर्भित किया जा सकता है। वेब पर देखने के लिए बहुत सी सामग्री है, जिसमें विभिन्न प्रकार के सामग्री जैसे html दस्तावेज़, चित्र, वीडियो, ऑडियो, निष्पादन योग्य फाइलें, स्प्रैडशीट आदि हैं। हम संसाधन uri से http अनुरोध करके कोई भी संसाधन प्राप्त कर सकते हैं। अनुरोध के लिए http प्रतिक्रिया, संसाधन लौटाता है और सामग्री प्रकार भी निर्दिष्ट करता है, जिसे also known as media type ।
किसी भी संसाधन तक पहुँचने के लिए, ग्राहक विशिष्ट संसाधन uri और http क्रिया प्रदान करके http अनुरोध कर सकता है। हालाँकि, इसके अतिरिक्त, क्लाइंट उस स्वीकार-प्रकार को भी निर्दिष्ट कर सकता है जो उस सामग्री का प्रारूप है जिसे उपयोगकर्ता खोज रहा है। "स्वीकार-प्रकार" को http अनुरोध हेडर में “accept” शीर्षक के रूप में परिभाषित किया जा सकता है।
सर्वर तब अनुरोधों से "स्वीकार" शीर्षक की जाँच करता है और यदि उपलब्ध हो तो निर्दिष्ट प्रारूप में प्रतिक्रिया देता है। कृपया ध्यान दें कि सर्वर केवल अनुरोधित प्रतिनिधित्व में प्रतिक्रिया वापस कर सकता है यदि यह उपलब्ध है । यदि अनुरोधित प्रतिनिधित्व उपलब्ध नहीं है, तो यह डिफ़ॉल्ट प्रतिनिधित्व में संसाधन लौटाता है। यही कारण है कि इसे सामग्री वार्ता कहा जाता है।
एक व्यावहारिक उदाहरण
एक उदाहरण के रूप में, मान लें कि आप आईडी के साथ ग्राहक की जानकारी प्राप्त करने के लिए http://example.com/customer/1 पर एक अनुरोध कर रहे हैं। यदि आप अनुरोध में "स्वीकार" शीर्षक निर्दिष्ट नहीं करते हैं, तो सर्वर इस संसाधन का डिफ़ॉल्ट प्रतिनिधित्व लौटाएगा।
मान लें कि सर्वर ग्राहक की जानकारी को json and xml both में वापस कर सकता है। अब, यह अनुरोध में "स्वीकार" हैडर में ग्राहक जानकारी के आवश्यक प्रारूप को निर्दिष्ट करने के लिए क्लाइंट पर है। “accept” शीर्ष लेख का मूल्य, json प्रतिनिधित्व के लिए “application/json” या xml प्रतिनिधित्व के लिए “text/xml” । सर्वर तब अनुरोधित प्रारूप के अनुसार प्रतिक्रिया लौटाएगा।
यदि अनुरोधित प्रारूप "टेक्स्ट / html" है जो इस होस्ट द्वारा समर्थित नहीं है (जैसा कि इस उदाहरण में), तो यह simply return the resource in the default format । Http प्रतिक्रिया में एक हेडर “content-type” होता है जो क्लाइंट को संसाधन के प्रारूप के बारे में बताता है।
कृपया ध्यान दें कि उस स्थिति में भी जब संसाधन का अनुरोधित प्रतिनिधित्व उपलब्ध नहीं है, संसाधन का डिफ़ॉल्ट प्रतिनिधित्व अभी भी वापस आ गया है।
यही कारण है कि इसे सामग्री बातचीत के रूप में जाना जाता है ।
ग्राहक प्रतिक्रिया के प्रतिनिधित्व पर बातचीत करता है, हालांकि, यदि यह उपलब्ध नहीं है, तो डिफ़ॉल्ट एक हो जाता है।
वेब एपीआई में कॉन्फ़िगर कैसे करें
वेब API में, सामग्री बातचीत को WebAPIConfig वर्ग में कॉन्फ़िगर किया जा सकता है
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
आप IContentNegotiator इंटरफ़ेस और इसकी Negotiate विधि को लागू करके वेब API में डिफ़ॉल्ट सामग्री बातचीत को भी ओवरराइड कर सकते हैं, और फिर नीचे WebAPI.config फ़ाइल में Web API अनुरोध पाइप लाइन में इसे सेटअप कर सकते हैं:
GlobalConfiguration.Configuration.Services.Replace(typeof(IContentNegotiator), new CustomContentNegotiator());
निम्नलिखित नेगोशिएट विधि का एक नमूना अनुकरण है।
public class CustomContentNegotiator : DefaultContentNegotiator
{
public override ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var result = new ContentNegotiationResult(new JsonMediaTypeFormatter(), new MediaTypeHeaderValue("application/json"));
return result;
}