لغة توصيف خدمات الوب
ساهم بشكل رئيسي في تحرير هذا الموضوع |
WSDL لغة توصيف خدمات الويب WSDL (Web Services Description Language)هي لغة مبنية على الـ XML ، تستخدم في توصيف وتحديد مكان خدمات الويب على الانترنت لتسهيل الوصول إليها والتعامل معها. وهي جزء متمم للـ UDDI، وهي اللغة التي يستخدمها الـ UDDI. طوّرت هذه اللغة بالتعاون ما بين Microsoft وIBM.
خصائص WSDL
- اختصار لـ Web Services Description Language
- لغة مبنية على الـ XML
- عبارة عن مستند XML
- تستخدم في توصيف خدمات الويب
- تستخدم في تحديد مكان توضّع خدمات الويب
- أحد معايير W3C
إذاً لغة WSDL هي لغة لتوصيف خدمات الويب وهي تعبير عن مستند مكتوب بلغة XML بحيث يقوم هذا المستند بوصف خدمات الويب كأن يقوم مثلا بتحديد مسقط خدمة الويب وطرق وعمليات هذه الخدمة .
مستند WSDL
مستند WSDL هومستند سهل مكتوب كمستند XML ويحتوي على مجموعة من التعاريف التي تعهد خدمة ويب.
بنية مستند WSDL
يعهد مستند WSDL خدمة ويب ما باستخدام العناصر الرئيسية التالية:
العنصر(Element) | الوصف |
---|---|
<types> | يقوم بتعريف أنماط المعطيات data types المستخدمة من قبل خدمة ويب ما. |
<message> | يقوم بتعريف الرسائل messages المستخدمة من قبل خدمة ويب ما. |
<portType> | يقوم بتعريف العمليات التي تقوم خدمة ويبما بتطبيقها. |
<binding> | يقوم بتعريف بروتوكولات الاتصال المستخدمة من قبل خدمة ويب ما. |
وتبدوالبنية الرئيسية لمستند WSDL على النحوالتالي:
<definitions> ----------------- <types> definition of types........ </types> ----------------- <message> definition of a message.... </message> ----------------- <portType> definition of a port....... </portType> ----------------- <binding> definition of a binding.... </binding> ----------------- </definitions>
يمكن لمستند WSDL حتى يحوي أيضا عناصر أخرى مثل عناصر التوسعة extension elements مثلاً، أوعنصر خدمة الذي يجمع تعريفات لأكثر من خدمة ويبفي مستند WSDL وحيد، تقدر الإطلاع على القواعد الكاملة للغة WSDL من خلال فقرة قواعد WSDL.
منافذ WSDL
يعتبر عنصر <portType> أحد أبرز العناصر ضمن مستند WSDL ،حيث يقوم هذا العنصر بتعريف خدمة ويب، والعمليات التي يمكن تطبيقها، والرسائل التي يمكن استخدامها.
يمكن حتى نعتبر عنصر <portType> مثل مخطة أوصف أووحدة برمجية ضمن لغات البرمجة التقليدية.
رسائل WSDL
يقوم العنصر <message> بتعريف الرسائل messages المستخدمة من قبل خدمة ويب ما حيث يقوم بتعريف عناصر المعطيات لعملية ما.
يمكن لرسالة ما حتى تتألف من جزء واحد أوأكثر، ويمكنك تشبيه أجزاء الرسالة كبرامترات تابع ما ضمن لغات البرمجة التقليدية.
أنماط WSDL
يقوم العنصر <types> بتعريف أنماط المعطيات data types المستخدمة من قبل خدمة ويب ما، ومن أجل أمور التوافقية مع جميع اللغات الأخرى تستخدم لغة WSDL نفس قواعد XML Schema لتعريف أنماط المعطيات .
روابط WSDL
يقوم العنصر <binding> بتعريف بروتوكولات الاتصال المستخدمة من قبل خدمة ويب ما، كما يقوم بتعريف صيغة الرسالة ويقوم بذلك من أجل جميع منفذ .
مثال عن مستند WSDL
فيما يلي مثال يوضح جزء من مستند WSDL :
<message name="getTermRequest"> <part name="term" type="xs:string"/> </message> ----------------- <message name="getTermResponse"> <part name="value" type="xs:string"/> </message> ----------------- <portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/> <output message="getTermResponse"/> </operation> </portType>
في المثال السابق يقوم العنصر portType بتعريف "glossaryTerms" كإسم للمنفذ كما يعهد عملية ضمنه باسم: "getTerm"، كما يتم تعريف العملية "getTerm" التي لها رسالة ولج بالإسم "getTermRequest" ورسالة خرج بالاسم "getTermResponse".
تعهد عناصر الرسالة message أجزاء جميع رسالة وانماط المعطيات الموافقة لها .
بالمقارنة مع لغات البرمجة التقليدية يعتبر المنفذ glossaryTerms كمخطة و"getTerm" تابع ضمن المخطة له متحول ولج هو"getTermRequest"ومتحول خرج هو"getTermResponse".
منافذ WSDL
يقوم منفذ WSDL بوصف القابلات (العمليات القانونية ) التي سيتم استنادىئها من قبل خدمة ويب.
كما ذكرنا سابقا فإن العنصر <portType> هوأكثر عناصر لغة WSDL أهمية حيث يقوم هذا العنصر بتعريف خدمة ويب والعمليات التي يمكن إنجازها والرسائل المتبادلة.
يعهد المنفذ نقطة اتصال لخدمة ويب، ويمكنك تشبيهه بمخطة أوصف أووحدة برمجية في لغات البرمجةالتقليدية، وكما ذكرنا سابقاً يمكن تشبيه جميع عملية ضمنه بالتابع ضمن لغة برمجة تقليدية .
أنواع العمليات داخل منافذ WSDL
يعتبر النوع طلب_استجابة request-response النوع الأكثر شيوعا واستخداما ولكن مع ذلك تعهد لغة WSDL الأنماط الأربعة التالية :
النوع | التعريف |
---|---|
One-way | اتجاه واحد : يمكن للعملية استقبال رسالة ولكن لن تعيد استجابة. |
Request-response | طلب_ استجابة: يمكن للعملية استقبال رسالة وسوف تعيد استجابة. |
Solicit-response | استجداء – استجابة : يمكن للعملية إرسال طلب ومن ثم تقوم بانتظار استجابة. |
Notification | إشعار: يمكن للعملية إرسال رسالة ولا تقوم بانتظار استجابة |
عملية من النوع اتجاه واحد One-Way : فيما يلي مثال على عملية ذات اتجاه واحد :
<message name="newTermValues"> <part name="term" type="xs:string"/> <part name="value" type="xs:string"/> </message> ----------------- <portType name="glossaryTerms"> <operation name="setTerm"> <input name="newTerm" message="newTermValues"/> </operation> </portType >
في المثال السابق يقوم المنفذ "glossaryTerms" بتعريف عملية باتجاه واحد تدعى "setTerm". تسمح هذه العملية بإدخال مصطلحات جديدة للقاموس باستخدام رسالة "newTermValues" التي تأخذ برامترات ولج هي "term" و"value" ولا يتم تعريف أي خرج لهذه العملية.
عملية طلب- استجابة Request-Response : فيما يلي مثال عن هذا النوع من العمليات :
<message name="getTermRequest"> <part name="term" type="xs:string"/> </message> ----------------- <message name="getTermResponse"> <part name="value" type="xs:string"/> </message> ----------------- <portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/> <output message="getTermResponse"/> </operation> </portType>
في هذا المثال يقوم المنفذ "glossaryTerms" بتعريف عملية من النوع طلب – استجابة وهي "getTerm"، تقوم هذه العملية بإيجاد القيمة اللقاءة لمصطلح ما تتطلب هذه العملية رسالة ولج تدعى "getTermRequest" والتي لها المتحول "term" ويفترض أن تعيد لنا رسالة خرج "getTermResponse" مع متحول يدعى "value".
روابط WSDL
يقوم العنصر <binding> بتعريف بروتوكولات الاتصال المستخدمة من قبل خدمة ويب ما، كما يقوم بتعريف صيغة الرسالة ويقوم بذلك من أجل جميع منفذ.
الربط إلى SOAP
لنأخذ المثال التالي الذي يحتوي على عملية طلب – استجابة .
<message name="getTermRequest"> <part name="term" type="xs:string"/> </message> <message name="getTermResponse"> <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"> <operation name="getTerm"> <input message="getTermRequest"/> <output message="getTermResponse"/> </operation> </portType> <binding type="glossaryTerms" name="b1"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <operation> <soap:operation soapAction="http://example.com/getTerm"/> <input><soap:body use="literal"/></input> <output><soap:body use="literal"/></output> </operation> </binding>
يمتلك العنصر binding واصفتين: واصفة الاسم name ، وواصفة النوع type.
تعهد واصفة الاسم name اسم عملية الربط وطبعاً تقدر استخدام الاسم الذي تريده، أما واصفة النوع type تشير إلى المنفذ المطلوب لعملية الربط، في حالتنا المنفذ "glossaryTerms".
يمتلك العنصر soap:binding واصفتين أيضاً: واصفة التصميم style،وواصفة النقل transport.
يمكن حتى تكون واصفة التصميم style من الشكل "rpc"، أومن الشكل "document"، وفي حالتنا استخدمنا للتصميم الحالة الأخيرة document.
أما واصفة النقل HTTP فتقوم بتعريف البروتوكول المستخدم مع SOAP ،وفي حالتنا البروتوكول المستخدم هوHTTP. ويقوم العنصر operation بتعريف جميع عملية يعرضها المنفذ. من أجل جميع عملية يتم تعريف وقع SOAP الموافق، ويجب حتى نحدد أيضا كيفية ترميز الدخل والخرج وفي حالتنا استخدمنا "literal".
قواعد WSDL
فيما يلي القواعد الكاملة للإصدار WSDL Syntax كما تم توصيفه في الورقة الغير معتمدة Draft الصادرة عن W3C:
<wsdl:definitions name="nmtoken"? targetNamespace="uri"> <import namespace="uri" location="uri"/> * <wsdl:documentation .... /> ? <wsdl:types> ? <wsdl:documentation .... /> ? <xsd:schema .... /> * </wsdl:types> <wsdl:message name="ncname"> * <wsdl:documentation .... /> ? <part name="ncname" element="qname"? type="qname"?/> * </wsdl:message> <wsdl:portType name="ncname"> * <wsdl:documentation .... /> ? <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <wsdl:input message="qname"> ? <wsdl:documentation .... /> ? </wsdl:input> <wsdl:output message="qname"> ? <wsdl:documentation .... /> ? </wsdl:output> <wsdl:fault name="ncname" message="qname"> * <wsdl:documentation .... /> ? </wsdl:fault> </wsdl:operation> </wsdl:portType> <wsdl:serviceType name="ncname"> * <wsdl:portType name="qname"/> + </wsdl:serviceType> <wsdl:binding name="ncname" type="qname"> * <wsdl:documentation .... /> ? <-- binding details --> * <wsdl:operation name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * <wsdl:input> ? <wsdl:documentation .... /> ? <-- binding details --> </wsdl:input> <wsdl:output> ? <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:output> <wsdl:fault name="ncname"> * <wsdl:documentation .... /> ? <-- binding details --> * </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="ncname" serviceType="qname"> * <wsdl:documentation .... /> ? <wsdl:port name="ncname" binding="qname"> * <wsdl:documentation .... /> ? <-- address details --> </wsdl:port> </wsdl:service> </wsdl:definitions>
المصادر
w3shcools
W3C
http://fadyamr.com/files/articles/wdsl.doc