Chúng ta cần xác định dịch vụ web là gì trước khi cho biết đâu là sự khác biệt giữa SOAP và WSDL trong đó cả hai (SOAP và WSDL) là các thành phần của dịch vụ web
Hầu hết các ứng dụng được phát triển để tương tác với người dùng, người dùng nhập hoặc tìm kiếm dữ liệu thông qua một giao diện và sau đó ứng dụng sẽ phản hồi lại đầu vào của người dùng.
Dịch vụ Web ít nhiều thực hiện những điều tương tự ngoại trừ việc ứng dụng dịch vụ Web chỉ giao tiếp từ máy này sang máy khác hoặc ứng dụng với ứng dụng. Thường không có sự tương tác trực tiếp của người dùng.
Dịch vụ Web về cơ bản là một tập hợp các giao thức mở được sử dụng để trao đổi dữ liệu giữa các ứng dụng. Việc sử dụng các giao thức mở cho phép các dịch vụ Web độc lập với nền tảng. Phần mềm được viết bằng các ngôn ngữ lập trình khác nhau và chạy trên các nền tảng khác nhau có thể sử dụng các dịch vụ Web để trao đổi dữ liệu qua các mạng máy tính như Internet. Nói cách khác, các ứng dụng Windows có thể nói chuyện với các ứng dụng PHP, Java và Perl và nhiều ứng dụng khác, điều này trong trường hợp bình thường sẽ không thể thực hiện được.
Dịch vụ Web hoạt động như thế nào?
Bởi vì các ứng dụng khác nhau được viết bằng các ngôn ngữ lập trình khác nhau, chúng thường không thể giao tiếp với nhau. Dịch vụ Web cho phép giao tiếp này bằng cách sử dụng kết hợp các giao thức và tiêu chuẩn mở, chủ yếu là XML, SOAP và WSDL. Một dịch vụ Web sử dụng XML để gắn thẻ dữ liệu, SOAP để chuyển một thông điệp và cuối cùng là WSDL để mô tả tính khả dụng của các dịch vụ. Chúng ta hãy xem xét ba thành phần chính này của một ứng dụng dịch vụ Web.
Giao thức truy cập đối tượng đơn giản (SOAP)
Giao thức truy cập đối tượng đơn giản hoặc SOAP là một giao thức để gửi và nhận tin nhắn giữa các ứng dụng mà không gặp phải các vấn đề về khả năng tương tác (khả năng tương tác có nghĩa là nền tảng mà dịch vụ Web đang chạy trở nên không liên quan). Một giao thức khác có chức năng tương tự là HTTP. Nó được sử dụng để truy cập các trang Web hoặc để lướt mạng. HTTP đảm bảo rằng bạn không phải lo lắng về loại máy chủ Web nào - cho dù là Apache hay IIS hay bất kỳ loại nào khác - phục vụ bạn các trang bạn đang xem hoặc các trang bạn xem được tạo bằng ASP.NET hay HTML.
Bởi vì SOAP được sử dụng cho cả yêu cầu và phản hồi, nội dung của nó thay đổi một chút tùy thuộc vào mục đích của nó.
Dưới đây là ví dụ về thông báo phản hồi và yêu cầu SOAP
Yêu cầu SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPrice>
<m:BookName>The Fleamarket</m:BookName>
</m:GetBookPrice>
</soap:Body>
</soap:Envelope>
Phản hồi SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPriceResponse>
<m: Price>10.95</m: Price>
</m:GetBookPriceResponse>
</soap:Body>
</soap:Envelope>
Mặc dù cả hai thông báo trông giống nhau, nhưng chúng thực hiện các phương pháp khác nhau. Ví dụ, nhìn vào các ví dụ trên, bạn có thể thấy rằng thông báo yêu cầu sử dụng GetBookPrice
phương thức để lấy giá sách. Phản hồi được thực hiện theo GetBookPriceResponse
phương thức, đó sẽ là thông báo mà bạn với tư cách là "người yêu cầu" sẽ thấy. Bạn cũng có thể thấy rằng các thư được soạn bằng XML.
Ngôn ngữ mô tả dịch vụ web hoặc WSDL
WSDL là một tài liệu mô tả một dịch vụ Web và cũng cho bạn biết cách truy cập và sử dụng các phương pháp của nó.
WSDL quan tâm đến việc làm thế nào để bạn biết những phương pháp nào có sẵn trong một dịch vụ Web mà bạn tình cờ gặp trên Internet.
Hãy xem một tệp WSDL mẫu:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name ="DayOfWeek"
targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="DayOfWeekInput">
<part name="date" type="xsd:date"/>
</message>
<message name="DayOfWeekResponse">
<part name="dayOfWeek" type="xsd:string"/>
</message>
<portType name="DayOfWeekPortType">
<operation name="GetDayOfWeek">
<input message="tns:DayOfWeekInput"/>
<output message="tns:DayOfWeekResponse"/>
</operation>
</portType>
<binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetDayOfWeek">
<soap:operation soapAction="getdayofweek"/>
<input>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="DayOfWeekService" >
<documentation>
Returns the day-of-week name for a given date
</documentation>
<port name="DayOfWeekPort" binding="tns:DayOfWeekBinding">
<soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/>
</port>
</service>
</definitions>
Những điều chính cần nhớ về tệp WSDL là nó cung cấp cho bạn:
Mô tả về một dịch vụ Web
Các phương thức mà một dịch vụ Web sử dụng và các tham số mà nó sử dụng
Một cách để định vị các dịch vụ Web