কন্টেন্ট নেগোসিয়েশন হলো প্রক্রিয়া যেখানে একাধিক রিপ্রেজেন্টেশন উপলব্ধ থাকলে একটি প্রদত্ত রেসপন্সের জন্য সেরা রিপ্রেজেন্টেশন সিলেক্ট করা হয়। অর্থাৎ, রিকোয়েস্টের Accept হেডার মানের উপর নির্ভর করে সার্ভার রেসপন্স পাঠায়। কন্টেন্ট নেগোসিয়েশনের জন্য HTTP-এ প্রধান প্রাইমারি মেকানিজম হলো এই রিকোয়েস্ট হেডারগুলো:
- Accept - রেসপন্সের জন্য কী মিডিয়া টাইপ গ্রহণযোগ্য, যেমন "application/json", "application/xml", বা কাস্টম মিডিয়া টাইপ যেমন "application/vnd.example+xml"
- Accept-Charset - কী ক্যারেক্টার সেট গ্রহণযোগ্য, যেমন UTF-8 বা ISO 8859-1
- Accept-Encoding - কী কন্টেন্ট এনকোডিং গ্রহণযোগ্য, যেমন gzip
- Accept-Language - পছন্দসই প্রাকৃতিক ভাষা, যেমন "en-us"
সার্ভার HTTP রিকোয়েস্টের অন্যান্য অংশও দেখতে পারে। উদাহরণস্বরূপ, যদি রিকোয়েস্টে X-Requested-With হেডার থাকে যা AJAX রিকোয়েস্ট নির্দেশ করে, এবং Accept হেডার না থাকলে সার্ভার JSON-এ ডিফল্ট করতে পারে।
কন্টেন্ট নেগোসিয়েশনে, পাইপলাইন HttpConfiguration অবজেক্ট থেকে IContentNegotiator সার্ভিস পায়। এটি HttpConfiguration.Formatters কালেকশন থেকে মিডিয়া ফরম্যাটার লিস্টও পায়।
পরবর্তীতে, পাইপলাইন IContentNegotiator.Negotiate কল করে, নিচের প্যারামিটারগুলো পাস করে:
- সিরিয়ালাইজ করার অবজেক্টের টাইপ
- মিডিয়া ফরম্যাটার কালেকশন
- HTTP রিকোয়েস্ট
Negotiate মেথড দুটি তথ্য রিটার্ন করে:
- কোন ফরম্যাটার ব্যবহার করা হবে
- রেসপন্সের মিডিয়া টাইপ
যদি কোনো ফরম্যাটার না পাওয়া যায়, Negotiate মেথড null রিটার্ন করে, এবং ক্লায়েন্ট HTTP এরর 406 (Not Acceptable) পায়।
নিচের মতো StudentController বিবেচনা করুন।
RESTful সার্ভিসের স্ট্যান্ডার্ডের একটি হলো ক্লায়েন্টের রেসপন্স ফরম্যাট (XML, JSON ইত্যাদি) সিলেক্ট করার ক্ষমতা থাকা। সার্ভারে পাঠানো একটি রিকোয়েস্টে Accept হেডার থাকে। Accept হেডার ব্যবহার করে ক্লায়েন্ট রেসপন্সের ফরম্যাট নির্দিষ্ট করতে পারে। উদাহরণস্বরূপ:
Accept: application/xml returns XML Accept: application/json returns JSON
কোয়ালিটি ফ্যাক্টরও নির্দিষ্ট করা যায়। নিচের উদাহরণে, XML-এর কোয়ালিটি ফ্যাক্টর JSON-এর চেয়ে বেশি, তাই সার্ভার XML ফরম্যাটার ব্যবহার করে ডেটা XML-এ ফরম্যাট করে। application/xml;q=0.8,application/json;q=0.5