Simple Object Access Protocol (Phần 1)

(Đâ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)

Leave a Reply

Related Post

CQRS là gì?CQRS là gì?

Table of Contents1 Motivation2 Cách hoạt động3 Event sourcing là gì?4 Cách cài đặt CQRS và Event Sourcing CQRS (viết tắt của cụm Command/Query Responsibility Segregation) định nghĩa sơ khai