(Đây là bản dịch từ W3schools.com, phù hợp cho các bạn nào đang tìm hiều về Web Services như mình)
Giới thiệu về SOAP
SOAP là giao thức dựa trên XML cho phép các ứng dụng trao đỗi thông tin qua HTTP.
Là giao thức cho phép truy cập dịch vụ Web
SOAP là gì ?
§ Là từ viết tắt của Simple Object Access Protocol
§ Là một giao thức truyền thông
§ Giúp truyền thông giữa các ứng dụng
§ Là định dạng cho việc gởi các thông điệp
§ Truyền thông thông qua Internet
§ Độc lập về nền tảng
§ Độc lập về ngôn ngữ
§ Dựa trên XML
§ Đơn giả và có khả năng mở rộng
§C
ho phép vượt firewall
§ Do W3C đưa ra
Ngày nay, các ứng dụng sử dụng gọi các thủ tục từ xa RPC (Remote Procedure Calls) cho việc truyền thông giữa các đối tượng như DCOM và CORBA, nhưng HTTP không được thiết kế để phục vụ chúng. RPC thể hiện sự tương thích và vấn đề bảo mật. Thông thường, các server
proxy và firewall sẽ từ chối các loại lưu tượng này.
Vì thế cần HTTP. SOAP được tạo ra để đạt được mục đích đó.
SOAP đưa ra cách truyền thông giữa các ứng dụng chạy trên các hệ điều hành khác nhau với các công nghệ và ngôn ngữ lập trình khác nhau.
SOAP ra đời ngày 24/6/2003 do W3C đề xuất
Trước đây SOAP 1.1 ra đời
5/2000 là giao thức trao đổi thông tin trong môi trường phân tán.
Cú pháp SOAP
SOAP xây dựng các khối.
Các thông điệp SOAP là tập tin
XML thông thường chứa các thành phần sau:
§ Thành phần Evelope dể định danh tài liệu XML là một thông điệp SOAP
§ Thành phần Header chứa thông tin tiêu đề
§ Thành phần Bode chưa thông tin lời gọi và kết quả trả về
§ Thành phần Fault chứa các thông tin lỗi và trạng thái
§ Tất cả các thành phần này được công khai trong
namespae mặc định của SOAP-evelope và namespce cho việc mả hóa SOAP và các loại
dữ liệu.
Qui định về cú pháp
Các thông điệp SOAP phải mã hóa theo dạng XML
Phải sử dụng namespace SOAP Envelope và SOAP Encoding
Không được chứa các tham chiếu DTD
Không được chứa các chỉ thị xử lý XML
Cấu trúc một SOAP Message
<?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”>
…
…
…
Thành phần SOAP Envelope
Là thành phần gốc của thông điệp
SOAP, để cho v=biết tập tin XML là thông điệp SOAP.
<?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”>
…
Message information goes here
…
Namespace xmlns:soap phải
có giá trị là liên kết giống như trên để định nghĩa Envelope này là SOAP
Envelope. Nếu dùng namespace khác, ứng sẽ khi thực thi sẽ bị lỗi.
Thuộc tính encodingStyle dùng
để định nghĩa các loại dữ liệu dùng
trong document. Thuộc tính này có trong bất kỳ thành phần SOAP nào, áp dụng cho
nội dung và tất cả thành phần con mà nó chứa.
Thành
phần SOAP Header chứa thông tin đặc tả ứng dụng (như xác thực, thanh toán, …)
cho thông điệp SOAP. Nếu thành phần Header được viết, nó phải là thành phần con
đầu tiên trong Envelope
<?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”>
<m:Trans xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand=”1″>234
…
…
Ví dụ trên có header chứa thành phần “Trans”, thuộc tính mustUderstand có giá trị
1, và giá trị 234
SOAP định nghĩa 3 thuộc tính trong namespace mặc định, đó là: mustUnderstand, actor,
and encodingStyle.
Thuộc tính mustUnderstand dùng để cho biết phần header có bắt buộc ủy thác hay
tùy chọn người nhận để xử lý.
Nếu mustUnderstand=”1” cho một element trong phần Header nó chỉ ra nó nhận
xử lý mà header công nhận. Nếu người nhận không công nhận element này nó sẽ lỗi
khi xử lý Header
Cú pháp : soap:mustUnderstand=”0|1″
Thuộc tính actor : các thông điệp SOAP có thể di chuyển từ một sender đến một receiver qua các endpoint khác nhau theo đường message. Tuy nhiên, không phải các message chờ đợi qua endpoint cuối cùng, mà có thể chờ một hoặc một số endpoint trên đường message.
Thuộc tính actor dùng để chỉ ra địa chỉ của Header cho một endpoint
Cú pháp : soap:actor=”URI“
Thuộc tính encodingStyle dùng để định nghĩa kiểu dữ liệu dùng trong tài liệu. Thuộc tình này có thể xuất hiện trong SOAP element, và nó áp dụng cho nội dung cho element và tất cả các element con của nó.
Thông điệp SOAP không có encoding mặc định.
Cú pháp : soap:encodingStyle=”URI“
Thành phần SOAP Body
Chứa các thông điệp SOAP hiện tại chờ để tới được endpoint cuối cùng.
Các element con trực tiếp của element Body phải có đủ điều kiện ứng với namespace.
Thành phần SOAP Fault
Chửa các thông tin lỗi và trạng thái của gói tin SOAP
Nếu có element Fault, nó phải là element con của element Body. Element có thể xuất hiện một lần trong gói tin SOAP
Nó có các element con như sau:
Code để định danh cho lỗi
người có khả năng đọc các giải thích lỗi
thông tin cho biết ai gây ra khi lỗi xuất hiện
giữ các thông tin lỗi đặc tả ứng dụng liên quan đế element Body
Giá trị của faultcode định nghĩa dưới đây dùng trong element khi mô tả lỗi
VersionMismatch Tìm ra namespace có lỗi cho element Enveplope
MustUnderstand element con trực tiếp của element Headercó thuộc tính musUderstand = “1” nhưng lại không hiểu
(còn tiếp)