البرمجيات في هذه الأيام أقوى من أي وقت مضى. يمكنهم تقديم الكثير من المعلومات والوظائف للمستخدمين. مع تزايد قدرات التطبيقات، هل تساءلت كيف يمكن تحقيق كل ذلك؟
أحد أنواع الملفات التي تظهر غالبًا في مجال تطوير التطبيقات هو ملف WSDL، ولكن ما هو؟
ما هو ملف WSDL؟
WSDL (لغة وصف خدمات الويب) تسمح للتطبيقات المختلفة بالتواصل مع بعضها البعض عبر الشبكة بطريقة موحدة. إنه يربط بين موفري خدمات الويب والمستهلكين، مما يسمح بتبادل البيانات بين الطرفين، وليس مقتصرًا عليهم.
تشتهر ملفات WSDL أيضًا بتوفير أوصاف وفيرة بشأن قدرات خدمة الويب، خاصةً لخدمات الويب المعتمدة على SOAP. تكتب ملفات WSDL بلغة XML (لغة ترميز ممتدة) وهي حيوية لاختبار واجهات برمجة التطبيقات SOAP.
أمر أكثر أهمية، تعتبر ملفات WSDL مهمة بسبب تعريف اتفاق رسمي بين موفر خدمة الويب ومستهلك الخدمة. توضح ملفات WSDL ما هي العمليات المتاحة، والتنسيق وهيكل الرسائل، وغيرها من التفاصيل المهمة المطلوبة عند استخدام خدمة الويب.
هيكل ملفات WSDL مع أمثلة
تحتوي ملفات WSDL على مكونات رئيسية توفر معلومات لاستخدامها. ستعرض هذه المقالة أجزاء من ملف WSDL بلغة XML، باستخدام خدمة ويب للأرصاد الجوية كمثال.
الأنواع type
يستخدم قسم type
في ملفات WSDL لتعريف أنواع البيانات التي ستستخدم في عمليات خدمة الويب.
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/weather">
<element name="City" type="string"/>
<element name="Weather" type="string"/>
</schema>
</types>
يوضح هذا المثال هيكل العناصر، بما في ذلك أسمائها City
و Weather
كونها من نوع string
.
الرسالة message
يحدد قسم message
عناصر البيانات التي يتم تبادلها بين موفر خدمة الويب ومستخدم الخدمة. في الأمثلة أعلاه، يمكنك رؤية أسماء الرسائل GetWeatherRequest
و GetWeatherResponse
.
<message name="GetWeatherRequest">
<part name="City" element="tns:City"/>
</message>
<message name="GetWeatherResponse">
<part name="Weather" element="tns:Weather"/>
</message>
هنا، يتم تحديد رسائل GetWeatherRequest
و GetWeatherResponse
مع جزء يحدد عناصر البيانات التي يتم إرسالها أو استلامها.
نوع المنفذ portType
يصف قسم portType
مجموعة من العمليات التي يمكن تنفيذها بواسطة خدمة الويب، مثل اسم العملية GetWeather
. يحدد الواجهة المجردة للخدمة، مع قائمة بالعمليات جنبًا إلى جنب مع إدخالها tns:GetWeatherRequest
ورسائل إخراجها tns:GetWeatherResponse
.
<portType name="WeatherServicePortType">
<operation name="GetWeather">
<input message="tns:GetWeatherRequest"/>
<output message="tns:GetWeatherResponse"/>
</operation>
</portType>
يوضح المثال أعلاه WeatherServicePortType
عملية محددة GetWeather
مع رسائل إدخال وإخراج محددة.
التوثيق binding
يحدد قسم binding
كيفية ربط العمليات المجردة المحددة في portType
ببروتوكول ملموس للتواصل. يحدد التفاصيل مثل تنسيق الرسالة والبروتوكول (مثل SOAP).
<binding name="WeatherServiceSoapBinding" type="tns:WeatherServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetWeather">
<soap:operation soapAction="http://example.com/weather/GetWeather"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
في هذا المثال، يتم تحديد WeatherServiceSoapBinding
باستخدام SOAP كبروتوكول ربط، ويحدد تفاصيل حول تنسيق الرسالة والنقل.
المنفذ port
يحدد قسم port
عنوان الشبكة حيث يمكن الوصول إلى خدمة الويب.
<service name="WeatherService">
<port name="WeatherServicePort" binding="tns:WeatherServiceSoapBinding">
<soap:address location="http://example.com/weather/service"/>
</port>
</service>
هنا، يتم تعريف WeatherService
مع WeatherServicePort
الذي يستخدم ربط SOAP، وعنوانه محدد كما هو موضح في http://example.com/weather/service
.
أمثلة على ملفات WSDL
مثال بسيط على ملف WSDL لخدمة الأرصاد الجوية
من خلال تجميع مقتطفات الأكواد المختلفة المكونة الرئيسية المقدمة في القسم السابق، يمكننا دمجها معًا وإنشاء ملف WSDL بسيط لخدمة الأرصاد الجوية.
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/weather"
targetNamespace="http://example.com/weather">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/weather">
<element name="City" type="string"/>
<element name="Weather" type="string"/>
</schema>
</types>
<message name="GetWeatherRequest">
<part name="City" element="tns:City"/>
</message>
<message name="GetWeatherResponse">
<part name="Weather" element="tns:Weather"/>
</message>
<portType name="WeatherServicePortType">
<operation name="GetWeather">
<input message="tns:GetWeatherRequest"/>
<output message="tns:GetWeatherResponse"/>
</operation>
</portType>
<binding name="WeatherServiceSoapBinding" type="tns:WeatherServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetWeather">
<soap:operation soapAction="http://example.com/weather/GetWeather"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="WeatherService">
<port name="WeatherServicePort" binding="tns:WeatherServiceSoapBinding">
<soap:address location="http://example.com/weather/service"/>
</port>
</service>
</definitions>
في هذا المثال البسيط لخدمة الأرصاد الجوية، يمكن ملاحظة ما يلي:
- تعمل خدمة الويب تحت namespace
http://example.com/weather
. - تحدد نوعي بيانات بسيطين:
City
وWeather
. - هناك رسالتان،
GetWeatherRequest
وGetWeatherResponse
، تحدد البيانات المدخلة والمخرجة لعمليةGetWeather
. - تحدد نوع منفذ
WeatherServicePortType
عمليةGetWeather
. - يشير
WeatherServiceSoapBinding
إلى أن التواصل سيستخدم SOAP مع نمط ونقل معين. - تحتوي الخدمة
WeatherService
على منفذ يسمىWeatherServicePort
يستخدم ربط SOAP، وعنوانه محدد كالتالي:http://example.com/weather/service
.
مثال معقد على ملف WSDL لخدمة التجارة الإلكترونية
إليك مثال أكثر تعقيدًا لملف WSDL لخدمة التجارة الإلكترونية يتضمن عمليات متعددة، وأنواع بيانات، وميزات.
?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/ecommerce"
targetNamespace="http://example.com/ecommerce">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/ecommerce">
<element name="Product">
<complexType>
<sequence>
<element name="ProductId" type="string"/>
<element name="ProductName" type="string"/>
<element name="Price" type="decimal"/>
</sequence>
</complexType>
</element>
<element name="Order">
<complexType>
<sequence>
<element name="OrderId" type="string"/>
<element name="CustomerName" type="string"/>
<element name="Products" type="tns:Product" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<message name="GetProductRequest">
<part name="ProductId" element="tns:ProductId"/>
</message>
<message name="GetProductResponse">
<part name="Product" element="tns:Product"/>
</message>
<message name="PlaceOrderRequest">
<part name="Order" element="tns:Order"/>
</message>
<message name="PlaceOrderResponse">
<part name="Confirmation" type="string"/>
</message>
<portType name="ECommerceServicePortType">
<operation name="GetProduct">
<input message="tns:GetProductRequest"/>
<output message="tns:GetProductResponse"/>
</operation>
<operation name="PlaceOrder">
<input message="tns:PlaceOrderRequest"/>
<output message="tns:PlaceOrderResponse"/>
</operation>
</portType>
<binding name="ECommerceServiceSoapBinding" type="tns:ECommerceServicePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetProduct">
<soap:operation soapAction="http://example.com/ecommerce/GetProduct"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="PlaceOrder">
<soap:operation soapAction="http://example.com/ecommerce/PlaceOrder"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ECommerceService">
<port name="ECommerceServicePort" binding="tns:ECommerceServiceSoapBinding">
<soap:address location="http://example.com/ecommerce/service"/>
</port>
</service>
</definitions>
في هذا المثال المعقد لخدمة التجارة الإلكترونية، يمكن ملاحظة ما يلي:
- تم تعريف أنواع البيانات المعقدة
Product
وOrder
مع عناصر متداخلة (مثلProductID
وProductName
وPrice
) وتسلسلات. - تم تعريف عمليات متعددة
GetProduct
وPlaceOrder
ضمنECommerceServicePortType
. - تم تعريف الرسائل
GetProductRequest
وGetProductResponse
وPlaceOrderRequest
وPlaceOrderResponse
لكل عملية، تحدد البيانات المدخلة والمخرجة. - يشير ربط SOAP
ECommerceServiceSoapBinding
إلى تفاصيل التنسيق للتواصل باستخدام SOAP. - تحتوي الخدمة
ECommerceService
على منفذ يسمىECommerceServicePort
يستخدم ربط SOAP، وعنوانه محدد كالتالي:http://example.com/ecommerce/service
.
تحرير ملفات WSDL باستخدام Apidog
نظرًا لأن ملفات WSDL شائعة نسبيًا في مجال تطوير البرمجيات، قد تحتاج إلى تعديل أو إنشاء واحدة بنفسك. مع العديد من منصات واجهات برمجة التطبيقات المتاحة، يُعتبر Apidog خيارًا ممتازًا.
يسمح Apidog للمطورين وموفري خدمات الويب ومستخدمي خدمات الويب من أي خلفية بإجراء انتقال سلس من منصات واجهات برمجة التطبيقات الأخرى إلى Apidog.
لحسن الحظ، يغطي Apidog أيضًا استيراد ملفات WSDL! إذا كنت مهتمًا بتجربته، تأكد من تحميل Apidog باستخدام الأزرار أدناه.
لا تنس تسجيل الدخول وبدء مشروع جديد بمجرد دخولك. إذا كنت بحاجة إلى المساعدة، تحقق من وثائق مساعدة Apidog.
استيراد واجهة برمجة التطبيقات SOAP الخاصة بك إلى Apidog من ملف WSDL

بمجرد فتح مشروع جديد، انقر على زر "الإعدادات" الموجود على الشريط الجانبي العمودي الموجود على الجانب الأيسر من نافذة Apidog. ثم، انقر على السهم 2 والسهم 3 بهذا الترتيب.
اختبار واجهة برمجة التطبيقات SOAP بسهولة على Apidog

إذا كنت قد استوردت ملف WSDL بنجاح، يجب أن ترى اسمه على الجانب الأيسر من الشاشة، كما هو موضح حول السهم 1.
لبدء تحرير ملف WSDL، انقر على الأسهم 2 إلى 4 بترتيب تصاعدي، وانت في الطريق الصحيح!
الخلاصة
مع ملفات WSDL المعتمدة على XML (لغة ترميز ممتدة)، يصبح من الأسهل قليلاً الفهم. قد تختلف ملفات WSDL في التعقيد اعتمادًا على مدى دقة أوصاف وظيفتها.