বিষয়বস্তু আলোচনা হল প্রদত্ত প্রতিক্রিয়ার জন্য সেরা প্রতিনিধিত্ব নির্বাচন করার প্রক্রিয়া যখন একাধিক উপস্থাপনা উপলব্ধ থাকে। মানে, অনুরোধে হেডারের মানের উপর নির্ভর করে, সার্ভার প্রতিক্রিয়া পাঠায়। HTTP-তে বিষয়বস্তু আলোচনার প্রাথমিক প্রক্রিয়া হল এই অনুরোধ শিরোনামগুলি −
গ্রহণ করুন − কোন ধরনের মিডিয়া প্রতিক্রিয়ার জন্য গ্রহণযোগ্য, যেমন "application/json," "application/xml," অথবা একটি কাস্টম মিডিয়া প্রকার যেমন "application/vnd.example+xml"
স্বীকার-অক্ষর সেট − কোন অক্ষর সেটগুলি গ্রহণযোগ্য, যেমন UTF-8 বা ISO 8859-1৷
স্বীকার-এনকোডিং − কোন বিষয়বস্তু এনকোডিং গ্রহণযোগ্য, যেমন gzip।
ভাষা স্বীকার করুন − পছন্দের প্রাকৃতিক ভাষা, যেমন "en-us"।
সার্ভার HTTP অনুরোধের অন্যান্য অংশগুলিও দেখতে পারে। উদাহরণস্বরূপ, যদি অনুরোধে একটি X-Requested-With শিরোনাম থাকে, যা একটি AJAX অনুরোধ নির্দেশ করে, যদি কোনো Accept হেডার না থাকে তাহলে JSON-এর সার্ভার ডিফল্ট হতে পারে।
বিষয়বস্তু আলোচনায়, পাইপলাইনটি HttpConfiguration অবজেক্ট থেকে IContentNegotiator পরিষেবা পায়। এটি HttpConfiguration.Formatters সংগ্রহ থেকে মিডিয়া ফর্ম্যাটারগুলির তালিকাও পায়৷
এরপরে, পাইপলাইনটি IContentNegotiator.Negotiate কে কল করে −
- সিরিয়ালাইজ করার জন্য অবজেক্টের ধরন
- মিডিয়া ফরম্যাটারের সংগ্রহ
- HTTP অনুরোধ
আলোচনা পদ্ধতি দুই টুকরো তথ্য প্রদান করে −
- কোন ফর্ম্যাটার ব্যবহার করবেন
- প্রতিক্রিয়ার জন্য মিডিয়া প্রকার
যদি কোনো ফরম্যাটার পাওয়া না যায়, আলোচনার পদ্ধতিটি শূন্য করে দেয় এবং ক্লায়েন্ট এইচটিটিপি ত্রুটি 406 (গ্রহণযোগ্য নয়) পায়।
আসুন আমরা নিচের মত স্টুডেন্ট কন্ট্রোলার বিবেচনা করি।
using DemoWebApplication.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class StudentController : ApiController{ List<Student> students = new List<Student>{ new Student{ Id = 1, Name = "Mark" }, new Student{ Id = 2, Name = "John" } }; } }
RESTful পরিষেবার মানগুলির মধ্যে একটি হল, ক্লায়েন্টের কাছে সিদ্ধান্ত নেওয়ার ক্ষমতা থাকা উচিত যে তারা কোন ফর্ম্যাটে প্রতিক্রিয়া চায় - XML, JSON ইত্যাদি। সার্ভারে পাঠানো একটি অনুরোধে একটি Accept হেডার অন্তর্ভুক্ত থাকে। Accept হেডার ব্যবহার করে ক্লায়েন্ট প্রতিক্রিয়ার বিন্যাস নির্দিষ্ট করতে পারে। যেমন
Accept: application/xml returns XML Accept: application/json returns JSON
নিচের আউটপুটটি দেখায় যে প্রতিক্রিয়াটি XML-এর হয় যখন আমরা অ্যাসেপ্ট হেডার অ্যাপ্লিকেশান/XML পাস করি৷
নীচের আউটপুটটি দেখায় যে প্রতিক্রিয়াটি JSON-এর হয় যখন আমরা অ্যাসেপ্ট হেডার অ্যাপ্লিকেশান/JSON পাস করি৷
যখন অনুরোধ করা বিন্যাসে ক্লায়েন্টের কাছে প্রতিক্রিয়া পাঠানো হচ্ছে, লক্ষ্য করুন যে প্রতিক্রিয়াটির বিষয়বস্তু-প্রকার শিরোনামটি উপযুক্ত মান সেট করা আছে। উদাহরণস্বরূপ, যদি ক্লায়েন্ট অ্যাপ্লিকেশন/xml-এর জন্য অনুরোধ করে থাকে, সার্ভার XML ফর্ম্যাটে ডেটা পাঠায় এবং Content-Type=application/xmlও সেট করে।
আমরা মানের ফ্যাক্টরও নির্দিষ্ট করতে পারি। নীচের উদাহরণে, xml-এ json-এর চেয়ে উচ্চতর গুণমান ফ্যাক্টর রয়েছে, তাই সার্ভার XML ফর্ম্যাটার ব্যবহার করে এবং XML.application/xml;q=0.8,application/json;q=0.5
-এ ডেটা ফর্ম্যাট করে