SOAP - Hướng dẫn nhanh

SOAP là từ viết tắt của Simple Object Access Protocol. Nó là một giao thức nhắn tin dựa trên XML để trao đổi thông tin giữa các máy tính. SOAP là một ứng dụng của đặc tả XML.

Điểm cần lưu ý

  • SOAP là một giao thức truyền thông được thiết kế để giao tiếp qua Internet.

  • SOAP có thể mở rộng HTTP cho nhắn tin XML.

  • SOAP cung cấp vận chuyển dữ liệu cho các dịch vụ Web.

  • SOAP có thể trao đổi tài liệu hoàn chỉnh hoặc gọi một thủ tục từ xa.

  • SOAP có thể được sử dụng để phát một tin nhắn.

  • SOAP không phụ thuộc vào nền tảng và ngôn ngữ.

  • SOAP là cách XML để xác định thông tin nào được gửi và cách thức.

  • SOAP cho phép các ứng dụng khách dễ dàng kết nối với các dịch vụ từ xa và gọi các phương pháp từ xa.

Mặc dù SOAP có thể được sử dụng trong nhiều hệ thống nhắn tin khác nhau và có thể được gửi qua nhiều giao thức truyền tải khác nhau, trọng tâm ban đầu của SOAP là các cuộc gọi thủ tục từ xa được vận chuyển qua HTTP.

Các khung công tác khác bao gồm CORBA, DCOM và Java RMI cung cấp chức năng tương tự như SOAP, nhưng các thông báo SOAP được viết hoàn toàn bằng XML và do đó độc nhất không phụ thuộc vào nền tảng và ngôn ngữ.

Thông báo SOAP là một tài liệu XML thông thường chứa các phần tử sau:

  • Envelope- Xác định phần bắt đầu và phần cuối của tin nhắn. Nó là một yếu tố bắt buộc.

  • Header- Chứa bất kỳ thuộc tính tùy chọn nào của thông báo được sử dụng để xử lý thông báo, ở điểm trung gian hoặc ở điểm cuối cuối cùng. Nó là một yếu tố tùy chọn.

  • Body- Chứa dữ liệu XML bao gồm thông điệp được gửi đi. Nó là một yếu tố bắt buộc.

  • Fault - Phần tử Lỗi tùy chọn cung cấp thông tin về các lỗi xảy ra trong khi xử lý thông báo.

Tất cả các phần tử này được khai báo trong không gian tên mặc định cho phong bì SOAP - http://www.w3.org/2001/12/soap-envelope và không gian tên mặc định cho kiểu dữ liệu và mã hóa SOAP là - http://www.w3.org/2001/12/soap-encoding

NOTE- Tất cả các thông số kỹ thuật này có thể thay đổi. Vì vậy, hãy cập nhật cho mình các thông số kỹ thuật mới nhất có trên trang web W3.

Cấu trúc thông báo SOAP

Khối sau mô tả cấu trúc chung của thông báo SOAP:

<?xml version = "1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      ...
      ...
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      ...
      ...
      <SOAP-ENV:Fault>
         ...
         ...
      </SOAP-ENV:Fault>
      ...
   </SOAP-ENV:Body>
</SOAP_ENV:Envelope>

Phong bì SOAP chỉ ra điểm bắt đầu và kết thúc của tin nhắn để người nhận biết khi nào toàn bộ tin nhắn đã được nhận. Phong bì SOAP giải quyết vấn đề biết khi nào bạn nhận xong một tin nhắn và sẵn sàng xử lý nó. Do đó, phong bì SOAP về cơ bản là một cơ chế đóng gói.

Điểm cần lưu ý

  • Mỗi thư SOAP đều có phần tử Envelope gốc.

  • Phong bì là một phần bắt buộc của tin nhắn SOAP.

  • Mỗi phần tử Envelope phải chứa chính xác một phần tử Body.

  • Nếu một Envelope chứa phần tử Header, nó không được chứa nhiều hơn một phần tử và nó phải xuất hiện dưới dạng phần tử con đầu tiên của Envelope, trước phần Body.

  • Phong bì thay đổi khi các phiên bản SOAP thay đổi.

  • Phong bì SOAP được chỉ định bằng cách sử dụng tiền tố không gian tên ENV và phần tử Envelope.

  • Mã hóa SOAP tùy chọn cũng được chỉ định bằng cách sử dụng tên không gian tên và phần tử encodingStyle tùy chọn , cũng có thể trỏ đến một kiểu mã hóa khác với kiểu SOAP.

  • Bộ xử lý SOAP tuân thủ v1.1 tạo ra lỗi khi nhận được thông báo có chứa vùng tên phong bì v1.2.

  • Bộ xử lý SOAP tuân thủ v1.2 tạo ra lỗi VersionMismatch nếu nó nhận được thông báo không bao gồm không gian tên phong bì v1.2.

Thông báo SOAP tuân thủ v1.2

Dưới đây là một ví dụ về thông báo SOAP tuân thủ v1.2.

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

SOAP với HTTP POST

Ví dụ sau minh họa việc sử dụng thông báo SOAP trong thao tác HTTP POST, thao tác này sẽ gửi thông báo đến máy chủ. Nó hiển thị các không gian tên cho định nghĩa giản đồ phong bì và cho định nghĩa lược đồ của các quy tắc mã hóa. Các OrderEntry tham khảo trong tiêu đề HTTP là tên của chương trình được gọi tại trang web tutorialspoint.com.

POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
   ...
   Message information goes here
   ...
</SOAP-ENV:Envelope>

NOTE - Liên kết HTTP chỉ định vị trí của dịch vụ.

Phần tử Header tùy chọn cung cấp một khuôn khổ linh hoạt để chỉ định các yêu cầu cấp ứng dụng bổ sung. Ví dụ, phần tử Header có thể được sử dụng để chỉ định chữ ký điện tử cho các dịch vụ được bảo vệ bằng mật khẩu. Tương tự, nó có thể được sử dụng để chỉ định số tài khoản cho các dịch vụ SOAP trả cho mỗi lần sử dụng.

Điểm cần lưu ý

  • Nó là một phần tùy chọn của thông báo SOAP.

  • Phần tử tiêu đề có thể xuất hiện nhiều lần.

  • Tiêu đề nhằm thêm các tính năng và chức năng mới.

  • Tiêu đề SOAP chứa các mục tiêu đề được xác định trong một không gian tên.

  • Tiêu đề được mã hóa dưới dạng phần tử con đầu tiên của phong bì SOAP.

  • Khi nhiều tiêu đề được xác định, tất cả các phần tử con ngay lập tức của tiêu đề SOAP được hiểu là các khối tiêu đề SOAP.

Thuộc tính tiêu đề SOAP

Tiêu đề SOAP có thể có hai thuộc tính sau:

Thuộc tính diễn viên

Giao thức SOAP định nghĩa một đường dẫn thông báo là danh sách các nút dịch vụ SOAP. Mỗi nút trung gian này có thể thực hiện một số xử lý và sau đó chuyển tiếp thông báo đến nút tiếp theo trong chuỗi. Bằng cách đặt thuộc tính Actor, máy khách có thể chỉ định người nhận tiêu đề SOAP.

Thuộc tính phải hiểu

Nó cho biết liệu một phần tử Header là tùy chọn hay bắt buộc. Nếu được đặt thành true, người nhận phải hiểu và xử lý thuộc tính Header theo ngữ nghĩa đã xác định của nó hoặc trả về lỗi.

Ví dụ sau đây cho thấy cách sử dụng Header trong thư SOAP.

<?xml version = "1.0"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = " http://www.w3.org/2001/12/soap-envelope"   
   SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Header>
      <t:Transaction 
         xmlns:t = "http://www.tutorialspoint.com/transaction/" 
         SOAP-ENV:mustUnderstand = "true">5
      </t:Transaction>
   </SOAP-ENV:Header>
   ...
   ...
</SOAP-ENV:Envelope>

Phần thân SOAP là phần tử bắt buộc chứa dữ liệu XML do ứng dụng xác định đang được trao đổi trong thông báo SOAP. Phần nội dung phải được chứa trong phong bì và phải tuân theo bất kỳ tiêu đề nào có thể được xác định cho thư.

Phần thân được định nghĩa như một phần tử con của lớp bao thư và ngữ nghĩa cho phần thân được xác định trong lược đồ SOAP được liên kết.

Phần nội dung chứa thông tin bắt buộc dành cho người nhận thông báo cuối cùng. Ví dụ -

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
         <m:Item>Computers</m:Item>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Ví dụ trên yêu cầu báo giá bộ máy tính. Lưu ý rằng m: GetQuotation và các phần tử Item ở trên là các phần tử dành riêng cho ứng dụng. Chúng không phải là một phần của tiêu chuẩn SOAP.

Đây là câu trả lời cho truy vấn trên -

<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
   ........
   <SOAP-ENV:Body>
      <m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
         <m:Quotation>This is Qutation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Thông thường, ứng dụng cũng định nghĩa một lược đồ để chứa ngữ nghĩa được liên kết với các phần tử yêu cầu và phản hồi.

Các bảng báo giá dịch vụ có thể được thực hiện bằng một EJB chạy trong một máy chủ ứng dụng; nếu vậy, bộ xử lý SOAP sẽ chịu trách nhiệm ánh xạ thông tin phần thân dưới dạng các tham số vào và ra khỏi quá trình triển khai EJB của dịch vụ GetQuotationResponse . Bộ xử lý SOAP cũng có thể ánh xạ thông tin nội dung tới đối tượng .NET, đối tượng CORBA, chương trình COBOL, v.v.

Nếu một lỗi xảy ra trong quá trình xử lý, phản hồi cho một bản tin SOAP là một phần tử lỗi SOAP trong phần thân của bản tin và lỗi được trả lại cho người gửi bản tin SOAP.

Cơ chế lỗi SOAP trả về thông tin cụ thể về lỗi, bao gồm mã được xác định trước, mô tả và địa chỉ của bộ xử lý SOAP đã tạo ra lỗi.

Điểm cần lưu ý

  • Một bản tin SOAP chỉ có thể mang một khối lỗi.

  • Lỗi là một phần tùy chọn của thông báo SOAP.

  • Đối với liên kết HTTP, một phản hồi thành công được liên kết với dải mã trạng thái từ 200 đến 299.

  • SOAP Fault được liên kết với dải mã trạng thái từ 500 đến 599.

Các yếu tố phụ của Lỗi

SOAP Fault có các phần tử phụ sau:

Sr.No Yếu tố phụ & Mô tả
1

<faultCode>

Nó là một mã văn bản được sử dụng để chỉ ra một lớp lỗi. Xem Bảng tiếp theo để biết danh sách các mã lỗi được xác định trước.

2

<faultString>

Đó là một tin nhắn văn bản giải thích lỗi.

3

<faultActor>

Nó là một chuỗi văn bản cho biết ai đã gây ra lỗi. Sẽ rất hữu ích nếu thông báo SOAP đi qua một số nút trong đường dẫn thông báo SOAP và máy khách cần biết nút nào đã gây ra lỗi. Một nút không đóng vai trò là đích cuối cùng phải bao gồm một phần tử errorActor .

4

<detail>

Nó là một phần tử được sử dụng để mang các thông báo lỗi dành riêng cho ứng dụng. Phần tử chi tiết có thể chứa các phần tử con được gọi là mục chi tiết.

Mã lỗi SOAP

Các giá trị faultCode định nghĩa dưới đây phải được sử dụng trong faultcode yếu tố trong khi mô tả lỗi.

Sr.No Mô tả lỗi
1

SOAP-ENV:VersionMismatch

Đã tìm thấy không gian tên không hợp lệ cho phần tử SOAP Envelope.

2

SOAP-ENV:MustUnderstand

Phần tử con ngay lập tức của phần tử Header, với thuộc tính mustUnd hieu được đặt thành "1", không được hiểu.

3

SOAP-ENV:Client

Thông báo được tạo không chính xác hoặc chứa thông tin không chính xác.

4

SOAP-ENV:Server

Đã xảy ra sự cố với máy chủ nên không thể tiếp tục thông báo.

Ví dụ về lỗi SOAP

Đoạn mã sau là một lỗi mẫu. Khách hàng đã yêu cầu một phương thức có tên là ValidateCreditCard , nhưng dịch vụ không hỗ trợ phương thức đó. Điều này đại diện cho một lỗi yêu cầu máy khách và máy chủ trả về phản hồi SOAP sau:

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
         <faultstring xsi:type = "xsd:string">
            Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at
               /usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
         </faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP bao gồm một tập hợp các quy tắc cài sẵn để mã hóa các kiểu dữ liệu. Nó cho phép thông báo SOAP chỉ ra các kiểu dữ liệu cụ thể, chẳng hạn như số nguyên, số nổi, số đôi hoặc mảng.

  • Các kiểu dữ liệu SOAP được chia thành hai loại lớn - kiểu vô hướng và kiểu phức hợp.

  • Loại vô hướng chứa chính xác một giá trị như họ, giá hoặc mô tả sản phẩm.

  • Loại kết hợp chứa nhiều giá trị như đơn đặt hàng hoặc danh sách báo giá chứng khoán.

  • Các kiểu kết hợp được chia nhỏ hơn nữa thành mảng và cấu trúc.

  • Kiểu mã hóa cho thông báo SOAP được đặt thông qua thuộc tính SOAP-ENV: encodingStyle .

  • Để sử dụng mã hóa SOAP 1.1, hãy sử dụng giá trị http://schemas.xmlsoap.org/soap/encoding/

  • Để sử dụng mã hóa SOAP 1.2, hãy sử dụng giá trị http://www.w3.org/2001/12/soap-encoding

  • Đặc tả SOAP mới nhất thông qua tất cả các kiểu tích hợp được định nghĩa bởi Lược đồ XML. Tuy nhiên, SOAP vẫn duy trì quy ước riêng của nó để xác định các cấu trúc không được chuẩn hóa bởi Lược đồ XML, chẳng hạn như mảng và tham chiếu.

Các loại vô hướng

Đối với các kiểu vô hướng, SOAP sử dụng tất cả các kiểu đơn giản có sẵn được chỉ định bởi đặc tả Lược đồ XML. Điều này bao gồm chuỗi, float, double và số nguyên.

Bảng sau liệt kê các kiểu đơn giản chính, được trích từ Lược đồ XML Phần 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

Các kiểu đơn giản được tích hợp vào lược đồ XML
Loại đơn giản Ví dụ
chuỗi Xác nhận đây là điện.
boolean đúng, sai, 1, 0.
Phao nổi -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
gấp đôi -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN.
thập phân -1,23, 0, 123,4, 1000,00.
nhị phân 100010
số nguyên -126789, -1, 0, 1, 126789.
nonPositiveInteger -126789, -1, 0.
số nguyên âm -126789, -1.
Dài -1, 12678967543233
int -1, 126789675
ngắn -1, 12678
byte -1, 126
nonNegativeInteger 0, 1, 126789
unsignedLong 0, 12678967543233
unsignedInt 0, 1267896754
unsignedShort 0, 12678
unsignedByte 0, 126
sô nguyên dương 1, 126789.
ngày 1999-05-31, --- 05.
thời gian 13: 20: 00.000, 13: 20: 00.000-05: 00

Ví dụ: đây là một phản hồi SOAP với kiểu dữ liệu kép -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
   
   <SOAP-ENV:Body>
      <ns1:getPriceResponse 
         xmlns:ns1 = "urn:examples:priceservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
         <return xsi:type = "xsd:double">54.99</return>
      </ns1:getPriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Các loại hợp chất

Mảng SOAP có một bộ quy tắc rất cụ thể, yêu cầu bạn chỉ định cả kiểu phần tử và kích thước mảng. SOAP cũng hỗ trợ mảng đa chiều, nhưng không phải tất cả các triển khai SOAP đều hỗ trợ chức năng đa chiều.

Để tạo một mảng, bạn phải chỉ định nó dưới dạng xsi: type of array. Mảng cũng phải bao gồm một thuộc tính arrayType . Thuộc tính này là bắt buộc để chỉ định kiểu dữ liệu cho các phần tử được chứa và (các) thứ nguyên của mảng.

Ví dụ: thuộc tính sau chỉ định một mảng gồm 10 giá trị kép:

arrayType = "xsd:double[10]"

Ngược lại, thuộc tính sau chỉ định một mảng chuỗi hai chiều:

arrayType = "xsd:string[5,5]"

Đây là một phản hồi SOAP mẫu với một mảng các giá trị kép -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceListResponse 
         xmlns:ns1 = "urn:examples:pricelistservice"  
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"  
            xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
            <item xsi:type = "xsd:double">54.99</item>
            <item xsi:type = "xsd:double">19.99</item>
         </return>
      </ns1:getPriceListResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Cấu trúc chứa nhiều giá trị, nhưng mỗi phần tử được chỉ định bằng một phần tử truy cập duy nhất. Ví dụ, hãy xem xét một mục trong danh mục sản phẩm. Trong trường hợp này, cấu trúc có thể chứa SKU sản phẩm, tên sản phẩm, mô tả và giá. Đây là cách một cấu trúc như vậy sẽ được biểu diễn trong một thông báo SOAP -

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getProductResponse
         xmlns:ns1 = "urn:examples:productservice" 
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
		
         <return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
            <name xsi:type = "xsd:string">Red Hat Linux</name>
            <price xsi:type = "xsd:double">54.99</price>
            <description xsi:type = "xsd:string">
               Red Hat Linux Operating System
            </description>
            <SKU xsi:type = "xsd:string">A358185</SKU>
         </return>
      </ns1:getProductResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

NOTE- Hãy chú ý đến việc thụt lề thích hợp trong khi bạn viết mã SOAP của mình. Mỗi phần tử trong một cấu trúc được chỉ định bằng một tên trình truy cập duy nhất. Ví dụ: thông báo ở trên bao gồm bốn yếu tố truy cập - tên, giá, mô tả và SKU. Mỗi phần tử có thể có kiểu dữ liệu riêng. Ví dụ: tên được chỉ định là một chuỗi, trong khi giá được chỉ định là gấp đôi.

SOAP không bị ràng buộc với bất kỳ giao thức truyền tải nào. SOAP có thể được vận chuyển qua SMTP, FTP, MQSeries của IBM hoặc Hàng đợi Thư của Microsoft (MSMQ).

Đặc tả SOAP chỉ bao gồm chi tiết về HTTP. HTTP vẫn là giao thức truyền tải SOAP phổ biến nhất.

SOAP qua HTTP

Về mặt logic, các yêu cầu SOAP được gửi qua một yêu cầu HTTP và các phản hồi SOAP được trả lại trong nội dung của phản hồi HTTP. Mặc dù yêu cầu SOAP có thể được gửi qua HTTP GET, nhưng thông số kỹ thuật chỉ bao gồm các chi tiết về HTTP POST.

Ngoài ra, cả yêu cầu và phản hồi HTTP đều được yêu cầu để đặt loại nội dung của chúng thành văn bản / xml.

Đặc tả SOAP bắt buộc máy khách phải cung cấp tiêu đề SOAPAction, nhưng giá trị thực của tiêu đề SOAPAction phụ thuộc vào việc triển khai máy chủ SOAP.

Ví dụ: để truy cập dịch vụ AltaVista BabelFish Dịch, do XMethods lưu trữ, bạn phải chỉ định phần sau làm tiêu đề SOAPAction.

urn:xmethodsBabelFish#BabelFish

Ngay cả khi máy chủ không yêu cầu tiêu đề SOAPAction đầy đủ, máy khách phải chỉ định chuỗi trống ("") hoặc giá trị null. Ví dụ -

SOAPAction: ""
SOAPAction:

Đây là một yêu cầu mẫu được gửi qua HTTP tới dịch vụ Dịch thuật Babelfish của XMethods -

POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:BabelFish
         xmlns:ns1 = "urn:xmethodsBabelFish"
         SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
         <translationmode xsi:type = "xsd:string">en_fr</translationmode>
         <sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
      </ns1:BabelFish>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Lưu ý loại nội dung và tiêu đề SOAPAction. Cũng lưu ý rằng phương thức BabelFish yêu cầu hai tham số Chuỗi. Chế độ dịch en_fr dịch từ tiếng Anh sang tiếng Pháp.

Đây là phản hồi từ XMethods -

HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml

<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
   SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
   xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
   
   <SOAP-ENV:Body>
      <namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
         <return xsi:type = "xsd:string">Bonjour, monde!</return>
      </namesp1:BabelFishResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Các phản hồi SOAP được gửi qua HTTP bắt buộc phải tuân theo các mã trạng thái HTTP giống nhau. Ví dụ, mã trạng thái 200 OK cho biết phản hồi thành công. Mã trạng thái 500 Lỗi máy chủ nội bộ chỉ ra rằng có lỗi máy chủ và phản hồi SOAP bao gồm phần tử Lỗi.

Trong ví dụ dưới đây, một yêu cầu GetQuotation được gửi đến Máy chủ SOAP qua HTTP. Yêu cầu có tham số QuotationName và một Báo giá sẽ được trả lại trong phản hồi.

Không gian tên cho hàm được xác định trong http://www.xyz.org/quotation Địa chỉ.

Đây là yêu cầu SOAP -

POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
      <m:GetQuotation>
         <m:QuotationsName>MiscroSoft</m:QuotationsName>
      </m:GetQuotation>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Một phản hồi SOAP tương ứng trông giống như:

HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn

<?xml version = "1.0"?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

   <SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
      <m:GetQuotationResponse>
         <m:Quotation>Here is the quotation</m:Quotation>
      </m:GetQuotationResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

SOAP 1.1 ban đầu được đệ trình lên W3C vào tháng 5 năm 2000. Người đệ trình chính thức bao gồm các công ty lớn như Microsoft, IBM và Ariba, và các công ty nhỏ hơn như UserLand Software và DevelopMentor.

Vào tháng 7 năm 2001, Nhóm công tác về giao thức XML đã phát hành một "bản thảo làm việc" của SOAP 1.2. Trong W3C, tài liệu này chính thức là một công trình đang được hoàn thiện, có nghĩa là tài liệu có thể được cập nhật nhiều lần trước khi được hoàn thiện.

SOAP Phiên bản 1.1 có sẵn trực tuyến tại http://www.w3.org/TR/SOAP/

Bản thảo làm việc của SOAP Phiên bản 1.2 có sẵn tại http://www.w3.org/TR/soap12/

Lưu ý rằng W3C cũng lưu trữ một lần gửi "Thông báo SOAP có tệp đính kèm", tách biệt với đặc tả SOAP cốt lõi. Đặc điểm kỹ thuật này cho phép các thông báo SOAP bao gồm các tệp đính kèm nhị phân như hình ảnh và tệp âm thanh. Để biết đầy đủ chi tiết, hãy xem Ghi chú W3C tạihttp://www.w3.org/TR/SOAP-attachments.