Đặc tả SOAP đã được phát triển và công bố trên Web từ cuối năm 1999. SOAP là một mở rộng của đặc tả Gọi thủ tục từ xa của ngôn ngữ đánh dấu mở rộng XML-RPC (Extensible Markup Language – Remote Procedure Call, là giao thức được định nghĩa bởi Dave Winer của tập đoàn Phần mềm UserLand, sử dụng XML để mã hóa các cuộc gọi và sử dụng cơ chế truyền bằng giao thức truyền siêu văn bản http). Tuy nhiên đến tháng 5/2000, phiên bản SOAP mới được công bố bởi W3C và chính thức trở thành nền tảng của Nhóm làm việc về các giao thức XML tại W3C (W3C XML Protocol Working Group). Cho đến hiện tại, SOAP gồm có 2 phiên bản như sau:
- Phiên bản SOAP v1.1, được công bố vào tháng 5/2000, là một giao thức phục vụ trao đổi thông tin trong môi trường phân cấp, phân tán, dựa trên XML, bao gồm 3 phần: Phần bao (Envelope) định nghĩa một khung để mô tả phần nội dung trong một thông điệp và cách thức xử lý nó; Một bộ quy tắc mã hóa để biểu diễn các trường hợp của các kiểu dữ liệuđược định nghĩa bởi ứng dụng; Một quy ước để biển diễn các thủ tục yêu cầu và trả lời từ xa.
- Phiên bản SOAP v1.2, được công bố vào tháng 4/2007, là một giao thức hướng đến trao đổi thông tin có cấu trúc trong môi trường phân cấp, phân tán, sử dụng các công nghệ XML để định nghĩa một khung truyền thông điệp mở rộng cung cấp một cấu trúc thông điệp có thể được trao đổi bằng rất nhiều giao thức cơ bản. Khung này được thiết kế hoàn toàn độc lập với mô hình lập trình và độc lập với việc thực hiện về ngữ nghĩa.
Một số khác biệt quan trọng của SOAP v1.2 so với SOAP v1.1:
- SOAP v1.1 dựa trên XML 1.0 trong khi SOAP 1.2 dựa trên Tập thông tin XML (XML Infoset – đặc tả của W3C mô tả một mô hình dữ liệu trừu tượng của tài liệu XML, trong đó mô hình dữ liệu là một tập các khái niệm chi tiết đến thuộc tính của cây XML)
- SOAP 1.2 cung cấp một định nghĩa cụ thể hơn về mô hình xử lý của SOAP trong đó loại bỏ rất nhiều các yếu tố không rõ ràng có thể dẫn đến sai sót về khả năng liên thông khi không có hồ sơ về khả năng liên thông của các dịch vụ Web (the Web Services-Interoperability (WS-I) profiles). Mục đích là để làm giảm đáng kể các vấn đề về khả năng liên thông giữa các nhà cung cấp khác nhau cùng sử dụng SOAP 1.2.
- SOAP với tệp tin (File) đính kèm Giao diện lập trình ứng dụng (API - Application Programming Interface) cho Java (SOAP with Attachments API for Java - SAAJ) cũng có thể đứng một mình như là một cơ chế đơn giản để phát hành các yêu cầu SOAP. Một sự thay đổi lớn đối với các đặc điểm kỹ thuật của SAAJ là khả năng biểu diễn các thông điệp SOAP 1.1 và SOAP 1.2. Ví dụ, SAAJ phiên bản 1.3 giới thiệu một tập mới các hằng số và phương pháp phù hợp với SOAP 1.2 (chẳng hạn như getRole( ), getRelay( )) trên các thành phần tiêu đề (header) của SOAP.
- Các không gian tên XML cho việc đóng gói và mã hóa lược đồ đã thay đổi trong SOAP 1.2. Những thay đổi này phân biệt cách thức xử lý SOAP từ các thông điệp SOAP 1.1 và SOAP 1.2 và hỗ trợ thay đổi trong lược đồ SOAP mà không ảnh hưởng việc triển khai hiện có.
- Ngôn ngữ mô tả các dịch vụ Web (Web Services Description Language -WSDL) phiên bản 1.1 không thảo luận về SOAP 1.2 mà chỉ trong phiên bản WSDL 2.0 mới thảo luận đến SOAP 1.2.
- SOAP 1.1 chỉ gồm một tài liệu duy nhất trong khi SOAP 1.2 bao gồm 3 phần như sau:
+ Phần 0: Là một tài liệu không quy chuẩn nhằm cung cấp một hướng dẫn ngắn gọn dễ hiểu về các tính năng của đặc tả SOAP 1.2.
+ Phần 1: Định nghĩa một khung truyền thông điệp SOAP bao gồm các mục như sau:
1. Mô hình xử lý SOAP định nghĩa các quy tắc để xử lý một thông điệp SOAP.
2. Mô hình khả năng mở rộng của SOAP định nghĩa các khái niệm về tính năng và các mô-đun SOAP.
3. Khung liên kết giao thức cơ bản SOAP (The SOAP underlying protocol binding framework ) mô tả các quy tắc để xác định liên kết với một giao thức cơ bản có thể được sử dụng để trao đổi thông điệp SOAP giữa các nút của SOAP.
4. Cấu trúc thông điệp SOAP định nghĩa một cấu trúc của một thông điệp SOAP.
+ Phần 2: Mô tả một tập hợp các phần phụ bổ sung được sử dụng khi kết nối với khung truyền thông điệp của SOAP.
Mô hình xử lý của SOAPSOAP cung cấp một mô hình xử lý phân tán, mô hình này mô tả một thông điệp SOAP bắt nguồn từ một bên gửi SOAP đầu tiên và được gửi đến một bên nhận SOAP cuối cùng có thể không qua hoặc qua nhiều thành phần trung gian SOAP. Lưu ý rằng các mô hình xử lý SOAP phân tán có thể hỗ trợ nhiều mô hình trao đổi mẫu MEP (Message Exchange Pattern) có thể bao gồm các thông điệp một chiều, tương tác yêu cầu/trả lời, trao đổi kiểu điểm-điểm (peer-to –peer).
Mô hình xử lý của SOAP đặc tả cách thức bên nhận SOAP xử lý một thông điệp SOAP. Cách thức này áp dụng chỉ cho một thông điệp, độc lập với các thông điệp SOAP khác.
Một nút (node) SOAP có thể là một bên gửi SOAP ban đầu hoặc là một bên nhận SOAPcuối cùng, hoặc là một thành phần trung gian SOAP. Một nút SOAP được xác định bởimột định danh tài nguyên thống nhất URI (Uniform Resource Identifier), trong đó giá trị của mục thông tin thành phần (element information item) là một URI xác định nút SOAP sinh ra lỗi (fault).
Trong quá trình xử lý một thông điệp SOAP, một nút SOAP đóng một hoặc nhiều vai trò (bên gửi đầu tiên, thành phần trung gian, bên nhận cuối cùng), mỗi vai trò được xác định bởi một URI được gọi là tên của vai trò SOAP.
Thông thường, quy trình xử lý tất cả các thông điệp SOAP, các lỗi SOAP và các tác động mức ứng dụng về mặt ngữ nghĩa tương đương với việc thực hiện lần lượt các bước sau đây:
- Xác định tập các vai trò của các nút phải thực hiện, có thể phải xem xét trong quá trình đưa ra các nội dung của phần bao SOAP, bao gồm các khối tiêu đề (header block) và nội dung chính (body) của SOAP.
- Xác định tất cả các khối tiêu đề hướng tới các nút mang tính bắt buộc.
- Nếu các khối tiêu đề SOAP không hướng tới nút đã trước định ở bước trước, sẽ dẫn đến một lỗi SOAP với giá trị mã (Value of Code) là "env:MustUnderstand". Khi đó, không thể thực hiện việc xử lý, và do đó không phát sinh các lỗi liên quan đến nội dung chính (body) của SOAP.
- Trong trường hợp nút là một bên nhận cuối cùng, cần xử lý tất cả các khối tiêu đề SOAP hướng tới nút mang tính bắt buộc và phần nội dung chính (body) SOAP. Một nút SOAPcũng có thể chọn cách xử lý không bắt buộc đối với khối tiêu đề SOAP hướng vào nó.
- Trong trường hợp nút là một thành phần trung gian, nó sẽ đưa ra mô hình trao đổi thông điệp và kết quả trao đổi thông điệp SOAP (ví dụ không có lỗi được tạo ra) để gửi tiếp thông điệp theo đường dẫn.
Mô hình khả năng mở rộng của SOAPMô hình khả năng mở rộng của SOAP mô tả cách thức mở rộng SOAP và cách thức những mở rộng này có thể tương tác với mô hình xử lý SOAP và khung liên kết SOAP. Một số cơ chế mở rộng của SOAP như: các tính năng, mô hình mẫu trao đổi thông điệp (MEPs- Message Exchange Patterns) và các mô-đun SOAP có thể được sử dụng để tăng khả năng trong các môi trường truyền tin phong phú hơn (richer messaging environments)
Các tính năng SOAP mở rộng
Một tính năng SOAP là một phần mở rộng của khung liên kết truyền thông điệp SOAP. Mô hình khả năng mở rộng của SOAP cung cấp hai cơ chế thông qua tính năng được thể hiện: Mô hình xử lý SOAP và Khung đóng liên kết giao thức cơ bản của SOAP. Phần Mô hình xử lý của SOAP mô tả hành vi của một nút SOAP đơn liên quan đến việc xử lý một thông điệp riêng lẻ, sau đó mô tả vai trò trung gian gửi và nhận thông điệp SOAP của một nút SOAP thông qua một giao thức cơ bản.
Một tính năng SOAP phải bao gồm: Một URI được sử dụng để đặt tên tính năng; Thông tin (trạng thái) cần thiết tại mỗi nút để thực hiện tính năng này; Quy trình cần thiết tại mỗi nút để thực hiện các công việc mang tính bắt buộc của tính năng này bao gồm việc xử lý bất kỳ lỗi truyền tin nào xảy ra trong giao thức cơ bản; Thông tin được truyền từ nút này sang nút kia.
Mô hình mẫu trao đổi thông điệp
MEP là một mẫu thiết lập một mô hình cho việc trao đổi thông điệp giữa các nút SOAP.MEP là một loại tính năng và phải tuân theo các yêu cầu của một tính năng. MEP phải bao gồm: bất kỳ yêu cầu nào sinh ra thông điệp bổ sung; các nguyên tắc thông báo hay sắp xếp lỗi SOAP khác được sinh ra trong quá trình hoạt động của MEP.
Các mô đun SOAP
Thuật ngữ này tham chiếu đến các đặc tả về cú pháp và ngữ nghĩa của một hoặc nhiều khối tiêu đề SOAP. Một mô đun SOAP có thể thực hiện một hoặc nhiều hoặc không thực hiện tính năng nào của SOAP.
Khung liên kết giao thức cơ bản SOAPSOAP cho phép trao đổi thông điệp SOAP sử dụng một loạt các giao thức cơ bản. Tậpchính thức các quy tắc để thực hiện một thông điệp SOAP trong hoặc trên đầu của một giao thức (giao thức cơ bản) cho mục đích trao đổi được gọi là liên kết. Khung liên kết giao thức cơ bản SOAP cung cấp các quy tắc chung về các đặc tả kỹ thuật của các liên kết giao thức; khung cũng mô tả mối quan hệ giữa các liên kết với các nút SOAP thực hiện những liên kết này. HTTP liên kết trong SOAP v1.2 minh họa đặc tả kỹ thuật của mộtliên kết. Những liên kết bổ sung này có thể được tạo ra bằng kỹ thuật phù hợp với khungliên kết được đưa ra.
Một đặc tả liên kết SOAP
- Đưa ra các tính năng được cung cấp bởi một liên kết.
- Mô tả cách thức sử dụng các dịch vụ của giao thức cơ bản để truyền tải tập thông tin (infosets) của thông điệp SOAP.
- Mô tả cách thức sử dụng các dịch vụ của giao thức cơ bản để thực hiện đúng hợp đồng hình thành bởi các tính năng hỗ trợ bởi chính liên kết đó.
- Mô tả việc xử lý tất cả các lỗi có thể xảy ra trong liên kết.
- Xác định các yêu cầu để xây dựng một thực hiện đúng theo liên kết đã quy định.
- Một ràng buộc không cung cấp một mô hình xử lý riêng biệt và không tự thiết lập một nút SOAP.
Các mục tiêu của khung liên kết
- Đặt ra các yêu cầu và các khái niệm chung cho tất cả đặc tả kỹ thuật liên kết.
- Dễ dàng mô tả thống nhất trong nhiều tình huống khi mà nhiều liên kết hỗ trợ các tính năng phổ biến, thúc đẩy việc tái sử dụng trên các liên kết.
- Dễ dàng thống nhất trong đặc tả về các tính năng tùy chọn.
- Hai hoặc nhiều liên kết có thể cung cấp một tính năng tùy chọn nhất định, chẳng hạn như phân phối đáng tin cậy, sử dụng phương tiện khác nhau. Một liên kết có thể khai thác một giao thức cơ bản trực tiếp tạo điều kiện cho các tính năng (ví dụ, giao thức là đáng tin cậy) và các ràng buộc khác có thể cung cấp tính logic cần thiết (ví dụ, độ tin cậy đạt được thông qua việc đăng nhập/đăng xuất và truyền lại). Trong trường hợp này, tính năng có thể được cung cấp cho các ứng dụng một cách nhất quán, bất kể sử dụng liên kết nào.
Cấu trúc thông điệp SOAPMột thông điệp SOAP được đặc tả là một tập thông tin (infoset) XML, có chứa bình luận (comment), phần tử (element), thuộc tính (attribute), không gian tên (namespace) và các thông tin đặc trưng (character information items) được thể hiện lần lượt như trong XML 1.0. Một thông điệp SOAP bao gồm 3 thành phần như sau: Phần bao SOAP (SOAP envelope), phần tiêu đề SOAP (SOAP header), phần nội dung chính SOAP (SOAP body).
Phần bao SOAP
Phần bao là thành phần trên cùng của một văn bản XML đại diện cho một thông điệp SOAP. Phần bao có thể chứa các khai báo không gian tên cũng như các thuộc tính bổ sung, hay các thành phần phụ bổ sung.
Phần tiêu đề SOAP
Phần tiêu đề cung cấp một cơ chế chung để thêm vào các tính năng cho một thông điệp SOAP theo cách phân cấp mà không có thỏa thuận trước giữa các bên giao tiếp. SOAPđịnh nghĩa rất ít thuộc tính có thể sử dụng để chỉ rõ những bên có liên quan đến một tính năng cho dù tính năng đó là tùy chọn hay bắt buộc.


Hình 1: Cấu trúc thông điệp SOAP
Phần tiêu đề có thể bao gồm một tập các mục mà mỗi mục là một phần tử con trực tiếp của phần tiêu đề SOAP. Tất cả các phần tử con trực tiếp này phải thuộc không gian tên.
Phần tiêu đề được mã hóa như là phần tử con trực tiếp đầu tiên của phần bao SOAP. Tất cả các phần tử con trực tiếp của phần tiêu đề được gọi là mục tiêu đề. Quy tắc mã hóa cho các mục tiêu đề như sau:
- Một mục tiêu đề được xác định bởi tên đầy đủ yếu tố của nó, trong đó bao gồm không gian tên URI và tên cục bộ (local name). Tất cả các phần tử con trực tiếp của phần tiêu đề SOAP phải thuộc tên miền không gian đầy đủ.
- Có thể sử dụng thuộc tính encodingStyle (có giá trị là một hoặc nhiều danh sách cho trước của một hoặc nhiều URI xác định quy tắc có thể được sử dụng để tuần tự hóa thông điệp SOAP theo thứ tự từ cụ thể nhất đến ít nhất cụ thể nhất) để chỉ ra cách mã hóa các mục tiêu đề.
- Có thể sử dụng thuộc tính mustUnderstand để chỉ ra tính bắt buộc hay tùy chọn của mục tiêu đề đối với bên nhận khi xử lý, và sử dụng thuộc tính actor để chỉ ra bên nhận một thành phần tiêu đề.
Phần nội dung chính SOAP
Phần nội dung chính SOAP là một thành phần chứa thông tin bắt buộc dành cho bên nhậnthông điệp cuối cùng. SOAP định nghĩa một thành phần cho nội dung chính, đó là thành phần lỗi (fault) được sử dụng để báo lỗi.
Phần nội dung chính SOAP cung cấp một cơ chế đơn giản để trao đổi thông tin bắt buộc dành cho bên nhận thông điệp cuối cùng. Việc sử dụng điển hình phần nội dung chính bao gồm việc sắp xếp có thứ tự các thủ tục gọi từ xa RPC và báo cáo lỗi.
Phần nội dung chính được mã hóa như là một phần tử con trực tiếp của phần bao SOAP. Tất cả các phần tử con trực tiếp của phần nội dung chính được gọi là mục nội dung chính và mỗi mục được mã hóa như một phần tử độc lập bên trong phần tử nội dung chính SOAP.
Phần tiêu đề và nội dung chính SOAP tuy là các thành phần độc lập nhau nhưng thực tế chúng có mối liên hệ với nhau, mục nội dung chính về mặt ngữ nghĩa tương đương với một mục tiêu đề theo mặc định và thuộc tính mustUnderstand có giá trị là 1.
Ngoài 3 thành phần chính nêu trên, một thông điệp SOAP còn có thành phần lỗi SOAP (SOAP Fault), được sử dụng để thông báo lỗi hay trạng thái trong một thông điệp SOAP. Khi xuất hiện, thành phần lỗi SOAP phải được coi là một mục nội dung chính và chỉ xuất hiện một lần duy nhất trong phần nội dung chính. Lỗi SOAP có 4 loại như sau: faultcode (được thiết kế cho phần mềm để cung cấp một cơ chế thuật toán để xác định lỗi), faultstring (được thiết kế để cung cấp giải thích mà con người có thể đọc được lỗi vàkhông hướng tới xử lý thuật toán), faultactor (được thiết kế để cung cấp thông tin về những đối tượng gây ra lỗi trên đường dẫn của thông điệp), detail (được dùng để đưa ra các thông tin về lỗi ứng dụng liên quan đến thành phần nội dung chính).
Ứng dụng
SOAP được sử dụng để tạo khả năng cho các dịch vụ Web trao đổi dữ liệu, phục vụ liên kết với nhiều loại tương tác thông điệp và nhiều hệ thống phần mềm cơ bản. Trong Thông tư số 22/2013/TT-BTTTT ngày 23 tháng 12 năm 2013 của Bộ trưởng Bộ Thông tin và Truyền thông Ban hành Danh mục tiêu chuẩn kỹ thuật
về ứng dụng công nghệ thông tin trong cơ quan nhà nước quy định Bắt buộc áp dụngSOAP phiên bản 1.2 (cùng với WSDL v1.1, UDDI v3) và được xếp vào nhóm Tiêu chuẩn về kết nối.
