WSDL (Web Services Description Language) একটি XML ভিত্তিক ভাষা যা ওয়েব সার্ভিসের কার্যকারিতা, স্ট্রাকচার এবং এক্সপোজড মেথডগুলোর বর্ণনা প্রদান করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে ওয়েব সার্ভিসের মধ্যে কীভাবে যোগাযোগ হবে তা নির্ধারণ করে। WSDL মূলত একটি কন্ট্র্যাক্টের মতো কাজ করে, যা ওয়েব সার্ভিসের ইনপুট, আউটপুট, প্রোটোকল এবং অন্যান্য প্রযুক্তিগত তথ্য বর্ণনা করে।
WSDL একটি ওয়েব সার্ভিসের সমস্ত বৈশিষ্ট্য বর্ণনা করে, যেমন:
WSDL ওয়েব সার্ভিসের ক্লায়েন্ট এবং সার্ভারের মধ্যে কনট্র্যাক্ট তৈরি করে। এটি ক্লায়েন্টকে ওয়েব সার্ভিসে কীভাবে যোগাযোগ করবে তা জানাতে সহায়তা করে, যেমন:
WSDL হল একটি স্ট্যান্ডার্ড ফাইল যা ওয়েব সার্ভিসের কন্ট্র্যাক্ট হিসেবে কাজ করে। এটি সার্ভিস ডেভেলপমেন্ট এবং ইন্টিগ্রেশন সহজ করে, কারণ ক্লায়েন্ট ও সার্ভারের মধ্যে মিউচুয়াল অ্যাগ্রিমেন্ট বা কন্ট্র্যাক্ট প্রতিষ্ঠিত থাকে।
WSDL ফাইলের গঠন বেশিরভাগ সময় নির্দিষ্ট এলিমেন্ট এবং সেগুলির মধ্যে সম্পর্কের মাধ্যমে সংজ্ঞায়িত হয়। একটি সাধারণ WSDL ফাইলের মধ্যে নিম্নলিখিত প্রধান অংশ থাকে:
এই অংশে সমস্ত ডেটা টাইপ এবং কমপ্লেক্স টাইপ ডিফাইন করা হয় যা ওয়েব সার্ভিসের মাধ্যমে আদান-প্রদান হবে। এটি সাধারণত XML Schema (XSD) হিসেবে থাকে।
<types>
<schema targetNamespace="http://www.example.com/">
<element name="getPersonRequest" type="tns:Person"/>
<element name="getPersonResponse" type="tns:Person"/>
</schema>
</types>
Message এলিমেন্ট ওয়েব সার্ভিসে ব্যবহৃত তথ্যের গঠন বর্ণনা করে। এটি ইনপুট এবং আউটপুট প্যারামিটার সংজ্ঞায়িত করে, যা ওয়েব সার্ভিসের মেথডগুলির জন্য ব্যবহৃত হবে।
<message name="GetPersonRequest">
<part name="personId" type="xsd:string"/>
</message>
<message name="GetPersonResponse">
<part name="person" type="xsd:string"/>
</message>
PortType এক বা একাধিক ওয়েব সার্ভিস অপারেশন (methods) বর্ণনা করে। এটি নির্ধারণ করে যে, ওয়েব সার্ভিসের কোন অপারেশনটি কি ধরনের মেসেজ গ্রহণ বা প্রেরণ করবে।
<portType name="PersonServicePortType">
<operation name="getPerson">
<input message="tns:GetPersonRequest"/>
<output message="tns:GetPersonResponse"/>
</operation>
</portType>
Binding এলিমেন্টটি ওয়েব সার্ভিসের প্রোটোকল এবং ডেটা এনকোডিং সম্পর্কে তথ্য প্রদান করে। এটি নির্ধারণ করে যে, ওয়েব সার্ভিসের সাথে ক্লায়েন্ট কিভাবে যোগাযোগ করবে (SOAP, HTTP, ইত্যাদি)।
<binding name="PersonServiceBinding" type="tns:PersonServicePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getPerson">
<soap:operation soapAction="urn:getPerson"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
Service এলিমেন্টটি ওয়েব সার্ভিসের এন্ডপয়েন্ট বা ইউআরএল বর্ণনা করে, যেখানে সার্ভিসটি অ্যাক্সেস করা যাবে।
<service name="PersonService">
<port name="PersonServicePort" binding="tns:PersonServiceBinding">
<soap:address location="http://www.example.com/personservice"/>
</port>
</service>
<definitions name="PersonService"
targetNamespace="http://www.example.com/"
xmlns:tns="http://www.example.com/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema targetNamespace="http://www.example.com/">
<xsd:element name="getPersonRequest" type="xsd:string"/>
<xsd:element name="getPersonResponse" type="xsd:string"/>
</xsd:schema>
</types>
<message name="GetPersonRequest">
<part name="personId" type="xsd:string"/>
</message>
<message name="GetPersonResponse">
<part name="person" type="xsd:string"/>
</message>
<portType name="PersonServicePortType">
<operation name="getPerson">
<input message="tns:GetPersonRequest"/>
<output message="tns:GetPersonResponse"/>
</operation>
</portType>
<binding name="PersonServiceBinding" type="tns:PersonServicePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getPerson">
<soap:operation soapAction="urn:getPerson"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="PersonService">
<port name="PersonServicePort" binding="tns:PersonServiceBinding">
<soap:address location="http://www.example.com/personservice"/>
</port>
</service>
</definitions>
Read more