لغة توصيف خدمات الوب

(تم التحويل من WSDL)
إيمان دلعين
ساهم بشكل رئيسي في تحرير هذا المقال

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

الكلمات الدالة: