2. Các chuẩn cho dịch vụ mạng
2.1. Ngôn ngữ mô tả dịch vụ mạng WSDL
WSDL là viết tắt của Web Service Description Language – ngôn ngữ mô tả dịch vụ mạng. Tài liệu WSDL được viết bằng ngôn ngữ XML, mô tả bốn loại dữ liệu quan trọng sau:
• Thông tin về giao diện: mô tả tất cả các hàm sẵn dùng một cách công khai.
• Thông tin về kiểu dữ liệu: dùng cho các thông điệp yêu cầu và thông điệp đáp ứng.
• Thông tin về liên kết: mô tả giao thức vận chuyển được sử dụng. • Thông tin về địa chỉ: dùng để định vị các dịch vụ cụ thể.
Tài liệu WSDL
Tài liệu WSDL gồm các phần tử chính sau:
Phần tử Ý nghĩa
<portType> Các thao tác được thực hiện bởi dịch vụ mạng <message> Các thông được được sử dụng bởi dịch vụ mạng <types> Các kiểu dữ liệu được sử dụng bởi dịch vụ mạng
<binding> Các giao thức truyền thông được sử dụng bởi dịch vụ mạng Cấu trúc của tài liệu WSDL như sau:
<definitions> <types>
định nghĩa các kiểu dữ liệu...
</types> <message>
định nghĩa một thông điệp....
</message> <portType> định nghĩa một cổng... </portType> <binding> định nghĩa một liên kết.... </binding>
</definitions>
Cổng WSDL:
Phần tử <portType> là phần tử WSDL quan trọng nhất. Nó xác định một dịch vụ và các thao tác mà dịch vụ có thể được thực hiện cũng như các thông điệp liên quan. Phần tử này có thể so sánh như một thư viện hàm trong ngôn ngữ lập trình truyền thống.
Thông điệp WSDL:
Phần tử <message> xác định các dữ liệu thành phần của một thao tác. Mỗi thông điệp có thể chứa một hoặc nhiều phần, mỗi phần có thể được xem là một tham số của lời gọi hàm trong ngôn ngữ lập trình truyền thống.
Kiểu WSDL:
Phần tử <types> xác định kiểu dữ liệu được sử dụng bởi dịch vụ mạng. Để tối đa hóa tính độc lập nền tảng, WSDL sử dụng cú pháp lược đồ XML để định nghĩa các kiểu dữ liệu.
Liên kết WSDL:
Phần tử <binding> xác định khuôn dạng thông điệp và giao thức cụ thể cho mỗi cổng.
Một ví dụ WSDL:
Đây là một phần trích từ một tài liệu 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>
Trong ví dụ này, phần tử portType xác định tên của cổng là “glossaryTerms”, và tên của thao tác là “getTerm”.
Thao tác “getTerm” có một thông điệp đầu vào là “getTermRequest” và một thông điệp đầu ra là “getTermResponse”.
Các phần tử message xác định tên và kiểu dữ liệu của từng thành phần trong mỗi thông điệp.
So với mô hình lập trình truyền thống, cổng “glossaryTerms” có thể được xem là một thư viện hàm, “getTerm” là một hàm có “getTermRequest” là tham số vào và “getTermResponse” là tham số trả về.
Cổng WSDL
Một cổng WSDL mô tả các giao diện được thể hiện bởi một dịch vụ mạng.
Cổng WSDL:
Phần tử <portType> là phần tử WSDL quan trọng nhất. Nó xác định một dịch vụ mạng, các thao tác mà dịch vụ có thể thực hiện được cũng như các thông điệp liên quan. Cổng xác định điểm nối tới dịch vụ mạng và được so sánh với một thư viện hàm trong ngôn ngữ lập trình truyền thống còn mỗi thao tác được xem như một hàm.
Các kiểu thao tác:
Ngoài kiểu thao tác phổ biến nhất là yêu cầu – đáp ứng, WSDL còn định nghĩa bốn kiểu sau:
Kiểu Ý nghĩa
Một chiều Thao tác nhận thông điệp nhưng sẽ không trả về thông điệp trả lời
Yêu cầu – đáp ứng Thao tác nhận yêu cầu và trả về thông điệp trả lời Yêu cầu đáp ứng Thao tác gửi một yêu cầu và đợi một thông điệp trả lời Thông báo Thao tác gửi một thông điệp nhưng không đợi thông điệp
trả lời
Liên kết WSDL
Liên kết WSDL xác định khuôn dạng thông điệp và chi tiết giao thức cho dịch vụ mạng.
Ví dụ liên kết tới SOAP:
<message name="getTermRequest">
<part name="term" type="xs:string"/> </message>
<message name="getTermResponse">
</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>
Phần tử binding có hai thuộc tính: name và type. Thuộc tính name xác định tên của liên kết, còn thuộc tính type xác định cổng để liên kết, ở ví dụ trên là “glossaryTerms”.
Phần tử soap:binding có hai thuộc tính: style và transport. Thuộc tính style
có giá trị là “rpc” hoặc “document”, ở ví dụ trên là “document”. Thuộc tính
transport xác định giao thức SOAP được dùng, ở ví dụ trên là HTTP.
Phần tử operation xác định mỗi thao tác mà cổng thực hiện. Với mỗi thao tác, hành động SOAP tương ứng được xác định. Chúng ta phải xác định phương pháp mã hóa đầu vào và đầu ra, ở ví dụ trên sử dụng kiểu “literal”.
Bất cứ khi nào một dịch vụ mạng được sử dụng, một bản sao của file WSDL trên Web server sẽ được copy xuống máy khách. File WSDL này được xem như là ủy nhiệm dịch vụ mạng. Sau đó, các tham số được chuyển tới dịch vụ mạng dưới dạng một thông điệp yêu cầu (SOAP, HTTP GET, HTTP POST), một hành động kiểm tra được thực hiện để kiểm tra tính hợp lệ của các tham số bằng cách dựa trên ủy nhiệm dịch vụ mạng. Do vậy, trong trường hợp có lỗi xảy ra ở các tham số truyền vào dịch
vụ mạng, các lỗi này sẽ được thông báo tới máy khách tuân theo các đặc tả trong ủy nhiệm dịch vụ mạng.
Nói tóm lại, WSDL là ngôn ngữ dùng để mô tả dịch vụ dựa trên XML, nó là tập con của 2 tài liệu khác nhau, NASSL (Network Accessible Service Specification Language – ngôn ngữ đặc tả dịch vụ có khả năng truy cập qua mạng) và WDS (Well Defined Service document – tài liệu xác định dịch vụ).
Một tài liệu WSDL gồm các thành phần chính sau:
• message (thông điệp): là định nghĩa trừu tượng của dữ liệu được truyền đi.
• Operation (thao tác): là định nghĩa trừu tượng của các hành động cụ thể được hỗ trợ bởi dịch vụ mạng. Một tập các thông điệp vào/ra xác định một thao tác.
• Types (kiểu): là một cơ chế để định nghĩa kiểu dữ liệu sử dụng trong dịch vụ mạng, ví dụ: XSD (XML Style Definition).
• PortType (kiểu cổng): là một tập hợp các thao tác.
• Binding (liên kết/ kết nối): xác định một danh sách các giao thức truyền thông và các định dạng dữ liệu cho các kiểu cổng cụ thể. Liên kết xác định cách thức để các thao tác truy cập dịch vụ bằng cách sử dụng một giao thức cụ thể nào đó.
• Port (cổng): là một điểm cuối, là sự kết hợp giữa một địa chỉ mạng và một liên kết.
• Service (dịch vụ): là một tập các cổng.