فهم بنية WSDL الأساسي - (لغة وصف خدمة الويب) شرح
نشرت: 2020-08-24ربما تكون قد رأيت رسالتي السابقة على SOAP مقابل مكالمة REST. في الوقت الحالي ، تنتقل الشركات إلى مكالمات خدمة REST ولكن لا تزال هناك غالبية الشركات تستخدم SOAP على REST. يشرح هذا البرنامج التعليمي أساسيات WSDL (لغة وصف خدمة الويب).
إذا كان لديك أي من الأسئلة الواردة أدناه ، فأنت في المكان الصحيح:
- ما هي لغة وصف خدمات الويب (WSDL)؟
- دروس WSDL
- شرح لغة وصف خدمات الويب (WSDL)
- أمثلة على WSDL - لغة وصف خدمة الويب
لغة وصف خدمات الويب (WSDL)
في Java Web Development World ، WSDL هو تنسيق XML لوصف خدمات الشبكة كمجموعة من نقاط النهاية التي تعمل على رسائل تحتوي إما على معلومات موجهة للمستندات أو موجهة للإجراء.
يتم وصف العمليات والرسائل بشكل تجريدي ، ثم يتم ربطها ببروتوكول شبكة ملموس وتنسيق رسالة لتحديد نقطة نهاية. يتم دمج نقاط النهاية الملموسة ذات الصلة في نقاط نهاية مجردة (خدمات).
WSDL قابل للتوسيع للسماح بوصف نقاط النهاية ورسائلها بغض النظر عن تنسيقات الرسائل أو بروتوكولات الشبكة المستخدمة للتواصل ، ومع ذلك ، فإن الروابط الوحيدة الموضحة في هذا المستند تصف كيفية استخدام WSDL
بالاقتران مع SOAP 1.1 و HTTP GET / POST و التمثيل الصامت.

يجب أن يقرأ آخر:
- تكوين نموذج WSDL في Eclipse وإنشاء عميل
- كيفية بناء خدمة RESTful مع Java باستخدام JAX-RS و Jersey (مثال)
بمعنى آخر: تعرف وثيقة WSDL الخدمات على أنها مجموعات من نقاط نهاية الشبكة أو ports
. في WSDL ، يتم فصل التعريف المجرد لنقاط النهاية والرسائل عن عمليات نشر الشبكة الملموسة أو روابط تنسيق البيانات. يسمح هذا بإعادة استخدام التعريفات المجردة: messages
، وهي أوصاف مجردة للبيانات التي يتم تبادلها ، وأنواع المنافذ التي هي مجموعات مجردة من العمليات.
يشكل البروتوكول الملموس ومواصفات تنسيق البيانات لنوع منفذ معين ارتباطًا يمكن إعادة binding
. يتم تعريف المنفذ عن طريق ربط عنوان الشبكة بربط قابل لإعادة الاستخدام ، كما تحدد مجموعة من المنافذ الخدمة.
ومن ثم ، فإن وثيقة WSDL تستخدم العناصر التالية في تعريف خدمات الشبكة:
-
Types
- حاوية لتعريفات أنواع البيانات باستخدام نظام من نوع ما (مثلXSD
). -
Message
- تعريف مجرَّد مكتوب للبيانات التي يتم توصيلها. -
Operation
- وصف موجز للإجراء الذي تدعمه الخدمة. -
Port Type
- مجموعة مجردة من العمليات التي تدعمها نقطة نهاية واحدة أو أكثر. -
Binding
- بروتوكول ملموس ومواصفات تنسيق البيانات لنوع منفذ معين. -
Port
- نقطة نهاية مفردة تُعرَّف على أنها مزيج من عنوان ربط وشبكة. -
Service
- مجموعة من نقاط النهاية ذات الصلة.
جزء | وصف |
---|---|
<أنواع> | يحدد أنواع البيانات (مخطط XML) التي تستخدمها خدمة الويب |
<الرسالة> | يحدد عناصر البيانات لكل عملية |
<نوع المنفذ> | يصف العمليات التي يمكن إجراؤها والرسائل المعنية. |
<ربط> | يحدد البروتوكول وتنسيق البيانات لكل نوع منفذ |
مثال: طلب / استجابة SOAP 1.1 عبر HTTP
نموذج مستند XML WSDL.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<? xml version = "1.0" ?> < definitions name = "StockQuote" targetNamespace = "http://example.com/stockquote.wsdl" xmlns : tns = "http://example.com/stockquote.wsdl" xmlns : xsd1 = "http://example.com/stockquote.xsd" xmlns : soap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns = "http://schemas.xmlsoap.org/wsdl/" > < types > < schema targetNamespace = "http://example.com/stockquote.xsd" xmlns = "http://www.w3.org/2000/10/XMLSchema" > < element name = "TradePriceRequest" > < complexType > < all > < element name = "tickerSymbol" type = "string" / > < / all > < / complexType > < / element > < element name = "TradePrice" > < complexType > < all > < element name = "price" type = "float" / > < / all > < / complexType > < / element > < / schema > < / types > < message name = "GetLastTradePriceInput" > < part name = "body" element = "xsd1:TradePriceRequest" / > < / message > < message name = "GetLastTradePriceOutput" > < part name = "body" element = "xsd1:TradePrice" / > < / message > < portType name = "StockQuotePortType" > < operation name = "GetLastTradePrice" > < input message = "tns:GetLastTradePriceInput" / > < output message = "tns:GetLastTradePriceOutput" / > < / operation > < / portType > < binding name = "StockQuoteSoapBinding" type = "tns:StockQuotePortType" > < soap : binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" / > < operation name = "GetLastTradePrice" > < soap : operation soapAction = "http://example.com/GetLastTradePrice" / > < input > < soap : body use = "literal" / > < / input > < output > < soap : body use = "literal" / > < / output > < / operation > < / binding > < service name = "StockQuoteService" > < documentation > My first service < / documentation > < port name = "StockQuotePort" binding = "tns:StockQuoteBinding" > < soap : address location = "http://example.com/stockquote" / > < / port > < / service > < / definitions > |

مثال SOAP 2.0 WSDL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
< ! -- Crunchify ' s example of WSDL 2.0 -- > <? xml version = "1.0" encoding = "UTF-8" ?> < definitions xmlns = "http://www.w3.org/ns/wsdl" xmlns : tns = "http://www.tmsws.com/wsdl20sample" xmlns : whttp = "http://schemas.xmlsoap.org/wsdl/http/" xmlns : wsoap = "http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace = "http://www.tmsws.com/wsdl20sample" > < ! -- Abstract type -- > < types > < xs : schema xmlns : xs = "http://www.w3.org/2001/XMLSchema" xmlns = "http://www.tmsws.com/wsdl20sample" targetNamespace = "http://crunchify.com/wsdl20" > < xs : element name = "request" > . . . add your code here . . . < / xs : element > < xs : element name = "response" > . . . add your code here . . . < / xs : element > < / xs : schema > < / types > < ! -- Abstract interfaces -- > < interface name = "CrunchifyItem" > < fault name = "ErrorDescription" element = "tns:response" / > < operation name = "Get" pattern = "http://www.w3.org/ns/wsdl/in-out" > < input messageLabel = "In" element = "tns:request" / > < output messageLabel = "Out" element = "tns:response" / > < / operation > < / interface > < ! -- Concrete Binding Over HTTP -- > < binding name = "HttpBinding" interface = "tns:CrunchifyItem" type = "http://www.w3.org/ns/wsdl/http" > < operation ref = "tns:Get" whttp : method = "GET" / > < / binding > < ! -- Concrete Binding with SOAP -- > < binding name = "SoapBinding" interface = "tns:CrunchifyItem" type = "http://www.w3.org/ns/wsdl/soap" wsoap : protocol = "http://www.w3.org/2003/05/soap/bindings/HTTP/" wsoap : mepDefault = "http://www.w3.org/2003/05/soap/mep/request-response" > < operation ref = "tns:Get" / > < / binding > < ! -- Web Service offering endpoints for both bindings -- > < service name = "ServiceOne" interface = "tns:CrunchifyItem" > < endpoint name = "HttpEndpoint" binding = "tns:HttpBinding" address = "http://www.example.com/rest/" / > < endpoint name = "SoapEndpoint" binding = "tns:SoapBinding" address = "http://crunchify.com/soap/" / > < / service > < / definitions > |
وأوضح نمط تصميم المصنع مع المثال.

اسمحوا لي أن أعرف إذا كان لديك أي أسئلة.