Chương 8: Giới thiệu Web Service
8.3.2. WSDL (Web Service Definition Language)
Khi chúng ta đã xây dựng hoàn thành web service cần phải cung cấp tài liệu mô tả để các nhà phát triển client có thể sử dụng được web service trên. Tài liệu mô tả web service cần mô tả được vị trí web service, các hàm nó cung cấp, tham số kèm theo…
Tài liệu WSDL là một tài liệu thỏa mãn các nhu cầu trên. WSDL (Web Service Definition Language) là một ngôn ngữ dựa trên cú pháp XML dùng để định nghĩa một web service. Nói cách khác, một file WSDL như một người trung gian đứng giữa web service và ứng dụng web service client.
Trong tài liệu WSDL, chúng ta sẽ định nghĩa các phương thức được web service hỗ trợ, các kiểu dữ liệu được xử dụng trong các phương thức cùng các thông điệp được trao đổi giữa client và server ứng với mỗi phương thức. Chúng ta chỉ phải định nghĩa các kiểu dữ liệu phức tạp như mảng, các lớp được khai báo thêm trong chương trình, mảng các lớp … còn các kiểu dữ liệu cơ bản như int, string, float … đã được hỗ trợ sẵn. Sau đó, chúng ta gộp chung các định nghĩa này kết hợp với các giao thức mạng bên dưới để hình thành một end-point (tạm dịch là một đầu cuối).
Java Mobile
Một endpoint interface (gọi tắt là một enpoint) gồm có nhiều ports, mỗi port quy định một cách liên lạc với web service khác nhau ứng với mỗi giao thức bên dưới khác nhau. Sự kết hợp của web service với một giao thức mạng như thế được gọi là một binding, như trong hình 8.4 chúng ta thấy có 3 binding khác nhau. Port 1 sử dụng SOAP/HTTP binding, Port 2 sử dụng SOAP/HTTPS binding, Port 3 sử dụng các dạng binding khác. Như vậy ứng với web service trên, ta có đến 3 phương tiện khác nhau để triệu gọi các hàm.
Các hình thức binding thông dụng nhất hiện nay vẫn là SOAP/HTTP POST và SOAP/HTTPS (hỗ trợ bảo mật thông qua SSL).
Việc phát sinh file WSDL sẽ được tự động thực hiện bởi các bộ công cụ (như Visual Studio .NET) do đó chúng ta không nhất thiết phải hiểu rõ cấu trúc file WSDL. Tuy nhiên, nếu hiểu cấu trúc file WSDL sẽ cung cấp cho chúng ta thêm nhiều tùy biến cũng như khả năng sửa lỗi (debug) tốt hơn.
Cấu trúc file WSDL:
Một tài liệu WSDL thực chất chỉ là một danh sách các định nghĩa. Trong một file WSDL, phần tử gốc được đặt tên là "definitions". Phần tử này chứa năm phần tử con chính để định nghĩa web service. Thứ tự xuất hiện của các phần tử con này:
• Phần tử "types": định nghĩa các kiểu dữ liệu dùng để trao đổi giữa client và server (chỉ định nghĩa các kiểu dữ liệu phức tạp như structure, class…).
• Phần tử "message": định nghĩa các thông điệp được trao đổi.
• Phần tử "portType": định nghĩa một tập các chức năng web service hỗ trợ và thông điệp tương ứng đối với mỗi chức năng đó.
• Phần tử "binding": Sau khi đã định nghĩa các port, ta cần chỉ rõ ràng buộc giữa các ports này và các giao thức tầng dưới. Phần tử binding sẽ đảm nhiệm chức năng này (sẽ được đề cập kỹ hơn ở phần sau).
• Phần tử "service": Có tác dụng gom các ports đã định nghĩa thành từng nhóm.
Java Mobile
Để hiểu rõ hơn về file WSDL chúng ta sẽ cùng tìm hiểu một ví dụ chính thức của hãng Microsoft (ebook Developing XML Web Service Using Microsoft Studio .NET):
public class Acct {
public string description; public string number; public string type; public decimal balance; [XmlAttribute("status")]
/*chỉ rõ status là một attr chứ không phải node con.*/ public string status;
}
public class TheBank {
[WebMethod] /*
Phần [WebMethod] báo hiệu đây là hàm được export bởi web service để cho phép truy cập từ xa. Điều này sẽđược trình bày rõ hơn ở phần xây dựng web service bằng Visual Studio .NET
*/
public Acct GetAccount(string acctNumber) {
Acct a = new Acct();
a.description = "Adam's savings acct"; a.balance=10000.0M;
a.number="1234-XX"; a.status="active"; a.type="SV";
Java Mobile
return a; }
}
Đây là một đoạn code khá đơn giản, ta định nghĩa một lớp Acct và cung cấp một phương thức để lấy về một Account, tham số truyền vào có kiểu string.
Chúng ta sẽ xem xét qua cấu trúc các phần tử vừa nêu đối với web service trên.