SOAP - คู่มือฉบับย่อ

SOAP เป็นคำย่อของ Simple Object Access Protocol เป็นโปรโตคอลการส่งข้อความที่ใช้ XML สำหรับการแลกเปลี่ยนข้อมูลระหว่างคอมพิวเตอร์ SOAP เป็นแอปพลิเคชันของข้อกำหนด XML

สิ่งที่ควรทราบ

  • SOAP เป็นโปรโตคอลการสื่อสารที่ออกแบบมาเพื่อสื่อสารผ่านอินเทอร์เน็ต

  • SOAP สามารถขยาย HTTP สำหรับการส่งข้อความ XML

  • SOAP ให้การขนส่งข้อมูลสำหรับบริการบนเว็บ

  • SOAP สามารถแลกเปลี่ยนเอกสารที่สมบูรณ์หรือเรียกขั้นตอนระยะไกล

  • SOAP สามารถใช้ในการกระจายข้อความ

  • SOAP ไม่ขึ้นกับแพลตฟอร์มและภาษา

  • SOAP เป็นวิธี XML ในการกำหนดข้อมูลที่ส่งและวิธีการ

  • SOAP ช่วยให้แอปพลิเคชันไคลเอนต์สามารถเชื่อมต่อกับบริการระยะไกลได้อย่างง่ายดายและเรียกใช้วิธีการระยะไกล

แม้ว่า SOAP จะสามารถใช้งานได้ในระบบการส่งข้อความที่หลากหลายและสามารถส่งผ่านโปรโตคอลการขนส่งที่หลากหลาย แต่จุดเริ่มต้นของ SOAP คือการเรียกโพรซีเดอร์ระยะไกลที่ส่งผ่าน HTTP

เฟรมเวิร์กอื่น ๆ รวมถึง CORBA, DCOM และ Java RMI มีฟังก์ชันการทำงานที่คล้ายกันกับ SOAP แต่ข้อความ SOAP จะเขียนด้วย XML ทั้งหมดดังนั้นจึงไม่ขึ้นกับแพลตฟอร์มและภาษาโดยเฉพาะ

ข้อความ SOAP เป็นเอกสาร XML ธรรมดาที่มีองค์ประกอบต่อไปนี้ -

  • Envelope- กำหนดจุดเริ่มต้นและจุดสิ้นสุดของข้อความ มันเป็นองค์ประกอบบังคับ

  • Header- มีแอตทริบิวต์ที่เป็นทางเลือกของข้อความที่ใช้ในการประมวลผลข้อความทั้งที่จุดตัวกลางหรือที่จุดสิ้นสุดขั้นสุดท้าย เป็นองค์ประกอบเสริม

  • Body- มีข้อมูล XML ซึ่งประกอบด้วยข้อความที่กำลังส่ง มันเป็นองค์ประกอบบังคับ

  • Fault - องค์ประกอบ Fault ที่เป็นทางเลือกที่ให้ข้อมูลเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นขณะประมวลผลข้อความ

องค์ประกอบทั้งหมดเหล่านี้ถูกประกาศในเนมสเปซเริ่มต้นสำหรับซอง SOAP - http://www.w3.org/2001/12/soap-envelope และเนมสเปซเริ่มต้นสำหรับการเข้ารหัส SOAP และชนิดข้อมูลคือ - http://www.w3.org/2001/12/soap-encoding

NOTE- ข้อมูลจำเพาะทั้งหมดนี้อาจเปลี่ยนแปลงได้ ดังนั้นให้อัปเดตตัวเองด้วยข้อกำหนดล่าสุดที่มีอยู่ในเว็บไซต์ W3

โครงสร้างข้อความ SOAP

บล็อกต่อไปนี้แสดงโครงสร้างทั่วไปของข้อความ 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>

ซอง SOAP ระบุจุดเริ่มต้นและจุดสิ้นสุดของข้อความเพื่อให้ผู้รับทราบเมื่อได้รับข้อความทั้งหมด ซอง SOAP ช่วยแก้ปัญหาในการรู้ว่าคุณได้รับข้อความเสร็จเมื่อใดและพร้อมที่จะดำเนินการ ซอง SOAP จึงเป็นกลไกการบรรจุหีบห่อโดยพื้นฐาน

สิ่งที่ควรทราบ

  • ทุกข้อความ SOAP มีองค์ประกอบรูทซองจดหมาย

  • ซองจดหมายเป็นส่วนบังคับของข้อความ SOAP

  • ทุกองค์ประกอบของซองจดหมายต้องมีองค์ประกอบของร่างกายเพียงอย่างเดียว

  • หากซองจดหมายมีองค์ประกอบส่วนหัวจะต้องมีไม่เกินหนึ่งส่วนและจะต้องปรากฏเป็นลูกคนแรกของซองจดหมายก่อนส่วนเนื้อหา

  • ซองจดหมายจะเปลี่ยนไปเมื่อรุ่น SOAP เปลี่ยนไป

  • ซอง SOAP ถูกระบุโดยใช้คำนำหน้าเนมสเปซENVและองค์ประกอบซองจดหมาย

  • นอกจากนี้ยังระบุการเข้ารหัส SOAP ที่เป็นทางเลือกโดยใช้ชื่อเนมสเปซและองค์ประกอบencodingStyle ที่เป็นทางเลือกซึ่งอาจชี้ไปยังรูปแบบการเข้ารหัสอื่นที่ไม่ใช่ SOAP

  • ตัวประมวลผล SOAP ที่สอดคล้องกับ v1.1 สร้างข้อผิดพลาดเมื่อได้รับข้อความที่มีเนมสเปซซองจดหมาย v1.2

  • ตัวประมวลผล SOAP ที่เข้ากันได้กับ v1.2 จะสร้างข้อผิดพลาดVersionMismatchหากได้รับข้อความที่ไม่มีเนมสเปซซองจดหมาย v1.2

ข้อความ SOAP ที่รองรับ v1.2

ด้านล่างเป็นตัวอย่างของข้อความ SOAP ที่เข้ากันได้กับ 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 กับ HTTP POST

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ข้อความ SOAP ภายในการดำเนินการ HTTP POST ซึ่งจะส่งข้อความไปยังเซิร์ฟเวอร์ แสดงเนมสเปซสำหรับนิยามสคีมาซองจดหมายและสำหรับนิยามสคีมาของกฎการเข้ารหัส การอ้างอิงOrderEntryในส่วนหัว HTTP คือชื่อของโปรแกรมที่จะเรียกใช้ที่เว็บไซต์ 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 - การเชื่อม HTTP ระบุตำแหน่งของบริการ

องค์ประกอบส่วนหัวที่เป็นทางเลือกนำเสนอกรอบงานที่ยืดหยุ่นสำหรับการระบุข้อกำหนดระดับแอปพลิเคชันเพิ่มเติม ตัวอย่างเช่นองค์ประกอบส่วนหัวสามารถใช้เพื่อระบุลายเซ็นดิจิทัลสำหรับบริการที่มีการป้องกันด้วยรหัสผ่าน ในทำนองเดียวกันสามารถใช้เพื่อระบุหมายเลขบัญชีสำหรับบริการ SOAP แบบจ่ายต่อการใช้งาน

สิ่งที่ควรทราบ

  • เป็นส่วนเสริมของข้อความ SOAP

  • องค์ประกอบส่วนหัวสามารถเกิดขึ้นได้หลายครั้ง

  • ส่วนหัวมีไว้เพื่อเพิ่มคุณสมบัติและฟังก์ชันการทำงานใหม่ ๆ

  • SOAP header มีรายการส่วนหัวที่กำหนดในเนมสเปซ

  • ส่วนหัวถูกเข้ารหัสเป็นองค์ประกอบลูกแรกของซอง SOAP

  • เมื่อมีการกำหนดส่วนหัวหลายรายการองค์ประกอบลูกที่อยู่ในทันทีทั้งหมดของส่วนหัว SOAP จะถูกตีความว่าเป็นบล็อกส่วนหัว SOAP

คุณสมบัติของ SOAP Header

SOAP Header สามารถมีสองคุณลักษณะต่อไปนี้ -

แอตทริบิวต์ของนักแสดง

SOAP โปรโตคอลกำหนดเส้นทางข้อความเป็นรายการโหนดบริการ SOAP แต่ละโหนดระดับกลางเหล่านี้สามารถดำเนินการประมวลผลบางอย่างแล้วส่งต่อข้อความไปยังโหนดถัดไปในห่วงโซ่ ด้วยการตั้งค่าแอ็ตทริบิวต์ Actor ไคลเอ็นต์สามารถระบุผู้รับของ SOAP header

แอตทริบิวต์ MustUnderstand

ระบุว่าองค์ประกอบส่วนหัวเป็นทางเลือกหรือจำเป็น หากตั้งค่าเป็นจริงผู้รับจะต้องเข้าใจและประมวลผลแอ็ตทริบิวต์ส่วนหัวตามความหมายที่กำหนดไว้หรือส่งกลับข้อบกพร่อง

ตัวอย่างต่อไปนี้แสดงวิธีการใช้ส่วนหัวในข้อความ 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>

SOAP body เป็นองค์ประกอบบังคับที่มีข้อมูล XML ที่กำหนดโดยแอปพลิเคชันที่แลกเปลี่ยนในข้อความ SOAP เนื้อหาจะต้องอยู่ในซองจดหมายและต้องเป็นไปตามส่วนหัวที่อาจกำหนดไว้สำหรับข้อความ

ร่างกายถูกกำหนดให้เป็นองค์ประกอบลูกของซองจดหมายและความหมายสำหรับเนื้อความถูกกำหนดไว้ใน SOAP schema ที่เกี่ยวข้อง

เนื้อหามีข้อมูลที่จำเป็นสำหรับผู้รับข้อความขั้นสูงสุด ตัวอย่างเช่น -

<?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>

ตัวอย่างด้านบนขอใบเสนอราคาชุดคอมพิวเตอร์ โปรดทราบว่า m: GetQuotation และองค์ประกอบรายการด้านบนเป็นองค์ประกอบเฉพาะแอปพลิเคชัน ไม่ได้เป็นส่วนหนึ่งของมาตรฐาน SOAP

นี่คือคำตอบของข้อความค้นหาข้างต้น -

<?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>

โดยปกติแอปพลิเคชันยังกำหนดสคีมาเพื่อให้มีความหมายที่เกี่ยวข้องกับองค์ประกอบการร้องขอและการตอบสนอง

ใบเสนอราคาการบริการอาจจะมีการดำเนินการโดยใช้ EJB ทำงานในแอพพลิเคชันเซิร์ฟเวอร์; หากเป็นเช่นนั้นตัวประมวลผล SOAP จะรับผิดชอบในการแมปข้อมูลเนื้อความเป็นพารามิเตอร์เข้าและออกจากการใช้งาน EJB ของบริการGetQuotationResponse นอกจากนี้ตัวประมวลผล SOAP ยังสามารถแมปข้อมูลร่างกายกับวัตถุ. NET, วัตถุ CORBA, โปรแกรม COBOL และอื่น ๆ

หากข้อผิดพลาดเกิดขึ้นระหว่างการประมวลผลการตอบสนองต่อข้อความ SOAP เป็นองค์ประกอบความผิดปกติของ SOAP ในเนื้อหาของข้อความและความผิดปกติจะถูกส่งกลับไปยังผู้ส่งข้อความ SOAP

กลไกความผิดปกติของ SOAP จะส่งคืนข้อมูลเฉพาะเกี่ยวกับข้อผิดพลาดรวมถึงรหัสที่กำหนดไว้ล่วงหน้าคำอธิบายและที่อยู่ของตัวประมวลผล SOAP ที่สร้างข้อผิดพลาด

สิ่งที่ควรทราบ

  • ข้อความ SOAP สามารถดำเนินการบล็อกข้อผิดพลาดได้เพียงบล็อกเดียว

  • Fault เป็นส่วนเสริมของข้อความ SOAP

  • สำหรับการเชื่อมโยง HTTP การตอบกลับที่สำเร็จจะเชื่อมโยงกับรหัสสถานะช่วง 200 ถึง 299

  • SOAP Fault เชื่อมโยงกับรหัสสถานะช่วง 500 ถึง 599

องค์ประกอบย่อยของ Fault

SOAP Fault มีองค์ประกอบย่อยดังต่อไปนี้ -

ซีเนียร์ No องค์ประกอบย่อยและคำอธิบาย
1

<faultCode>

เป็นรหัสข้อความที่ใช้เพื่อระบุระดับข้อผิดพลาด ดูตารางถัดไปสำหรับรายการรหัสความผิดปกติที่กำหนดไว้ล่วงหน้า

2

<faultString>

เป็นข้อความอธิบายข้อผิดพลาด

3

<faultActor>

เป็นสตริงข้อความที่ระบุว่าใครเป็นผู้ก่อให้เกิดความผิดพลาด จะมีประโยชน์ถ้าข้อความ SOAP เดินทางผ่านหลายโหนดในเส้นทางข้อความ SOAP และไคลเอ็นต์จำเป็นต้องทราบว่าโหนดใดทำให้เกิดข้อผิดพลาด โหนดที่ไม่ทำหน้าที่เป็นปลายทางสุดท้ายต้องมีองค์ประกอบfaultActor

4

<detail>

เป็นองค์ประกอบที่ใช้ในการแสดงข้อความแสดงข้อผิดพลาดเฉพาะแอปพลิเคชัน องค์ประกอบรายละเอียดสามารถมีองค์ประกอบลูกที่เรียกว่ารายการรายละเอียด

SOAP Fault Codes

ค่า faultCode ระบุไว้ด้านล่างจะต้องใช้ในfaultcodeองค์ประกอบความผิดพลาดในขณะที่การอธิบาย

ซีเนียร์ No ข้อผิดพลาดและคำอธิบาย
1

SOAP-ENV:VersionMismatch

พบเนมสเปซที่ไม่ถูกต้องสำหรับองค์ประกอบ SOAP Envelope

2

SOAP-ENV:MustUnderstand

ไม่เข้าใจองค์ประกอบลูกในทันทีขององค์ประกอบส่วนหัวที่มีแอตทริบิวต์ mustUnderstand ตั้งค่าเป็น "1"

3

SOAP-ENV:Client

ข้อความถูกสร้างขึ้นอย่างไม่ถูกต้องหรือมีข้อมูลที่ไม่ถูกต้อง

4

SOAP-ENV:Server

เกิดปัญหากับเซิร์ฟเวอร์ดังนั้นข้อความจึงไม่สามารถดำเนินการต่อได้

SOAP Fault ตัวอย่าง

โค้ดต่อไปนี้เป็นตัวอย่าง Fault ลูกค้าได้ร้องขอเมธอดชื่อValidateCreditCardแต่บริการไม่สนับสนุนวิธีการดังกล่าว นี่แสดงถึงข้อผิดพลาดการร้องขอไคลเอ็นต์และเซิร์ฟเวอร์ส่งคืนการตอบสนอง SOAP ต่อไปนี้ -

<?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 มีชุดกฎในตัวสำหรับการเข้ารหัสชนิดข้อมูล เปิดใช้งานข้อความ SOAP เพื่อระบุชนิดข้อมูลที่เฉพาะเจาะจงเช่นจำนวนเต็มลอยคู่หรืออาร์เรย์

  • ประเภทข้อมูล SOAP แบ่งออกเป็นสองประเภทกว้าง ๆ - ประเภทสเกลาร์และประเภทสารประกอบ

  • ประเภทสเกลาร์มีค่าเดียวเช่นนามสกุลราคาหรือรายละเอียดผลิตภัณฑ์

  • ประเภทสารประกอบประกอบด้วยหลายค่าเช่นใบสั่งซื้อหรือรายการราคาหุ้น

  • ประเภทของสารประกอบจะแบ่งย่อยออกเป็นอาร์เรย์และโครงสร้าง

  • รูปแบบการเข้ารหัสสำหรับข้อความ SOAP ถูกตั้งค่าผ่านแอ็ตทริบิวต์SOAP-ENV: encodingStyle

  • ในการใช้การเข้ารหัส SOAP 1.1 ให้ใช้ค่า http://schemas.xmlsoap.org/soap/encoding/

  • ในการใช้การเข้ารหัส SOAP 1.2 ให้ใช้ค่า http://www.w3.org/2001/12/soap-encoding

  • ข้อกำหนด SOAP ล่าสุดใช้ชนิดในตัวทั้งหมดที่กำหนดโดย XML Schema ถึงกระนั้น SOAP ยังคงรักษาแบบแผนของตนเองในการกำหนดโครงสร้างที่ไม่ได้มาตรฐานโดย XML Schema เช่นอาร์เรย์และการอ้างอิง

ประเภทสเกลาร์

สำหรับประเภทสเกลาร์ SOAP จะใช้ประเภทอย่างง่ายในตัวทั้งหมดที่ระบุโดยข้อกำหนด XML Schema ซึ่งรวมถึงสตริงโฟลทคู่และจำนวนเต็ม

ตารางต่อไปนี้แสดงรายการประเภทพื้นฐานหลัก ๆ ซึ่งคัดลอกมาจาก XML Schema Part 0 - Primer http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/

สคีมา XML ในตัวประเภทแบบง่าย
ประเภทธรรมดา ตัวอย่าง)
สตริง ยืนยันว่าเป็นไฟฟ้า
บูลีน จริงเท็จ 1, 0
ลอย -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
สองเท่า -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN
ทศนิยม -1.23, 0, 123.4, 1,000.00
ไบนารี่ 100010
จำนวนเต็ม -126789, -1, 0, 1, 126789
nonPositiveInteger -126789, -1, 0.
negativeInteger -126789, -1.
ยาว -1, 12678967543233
int -1, 126789675
สั้น -1, 12678
ไบต์ -1, 126
nonNegativeInteger 0, 1, 126789
ไม่ได้ลงนาม 0, 12678967543233
unsignedInt 0, 1267896754
ไม่ได้ลงนาม 0, 12678
unsignedByte 0, 126
จำนวนเต็มบวก 1, 126789
วันที่ 2542-05-31, --- 05.
เวลา 13: 20: 00.000, 13: 20: 00.000-05: 00 น

ตัวอย่างเช่นนี่คือการตอบสนอง 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: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>

ประเภทสารประกอบ

อาร์เรย์ SOAP มีชุดกฎที่เฉพาะเจาะจงมากซึ่งกำหนดให้คุณต้องระบุทั้งประเภทองค์ประกอบและขนาดอาร์เรย์ SOAP ยังรองรับอาร์เรย์หลายมิติ แต่การใช้งาน SOAP ทั้งหมดไม่สนับสนุนการทำงานหลายมิติ

ในการสร้างอาร์เรย์คุณต้องระบุเป็นxsi: ประเภทของอาร์เรย์ อาร์เรย์ต้องมีแอตทริบิวต์arrayTypeด้วย แอ็ตทริบิวต์นี้จำเป็นเพื่อระบุชนิดข้อมูลสำหรับองค์ประกอบที่มีและมิติข้อมูลของอาร์เรย์

ตัวอย่างเช่นแอตทริบิวต์ต่อไปนี้ระบุอาร์เรย์ 10 ค่าคู่ -

arrayType = "xsd:double[10]"

ในทางตรงกันข้ามแอตทริบิวต์ต่อไปนี้ระบุอาร์เรย์ของสตริงสองมิติ -

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

นี่คือตัวอย่างการตอบสนอง 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: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>

โครงสร้างมีหลายค่า แต่แต่ละองค์ประกอบจะถูกระบุด้วยองค์ประกอบการเข้าถึงที่ไม่ซ้ำกัน ตัวอย่างเช่นพิจารณาสินค้าภายในแค็ตตาล็อกผลิตภัณฑ์ ในกรณีนี้โครงสร้างอาจมี SKU ของผลิตภัณฑ์ชื่อผลิตภัณฑ์คำอธิบายและราคา โครงสร้างดังกล่าวจะแสดงในข้อความ 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- โปรดดูแลการเยื้องที่เหมาะสมในขณะที่คุณเขียนรหัส SOAP ของคุณ แต่ละองค์ประกอบในโครงสร้างถูกระบุด้วยชื่อผู้เข้าถึงเฉพาะ ตัวอย่างเช่นข้อความด้านบนมีองค์ประกอบของ Accessor 4 องค์ประกอบ ได้แก่ ชื่อราคาคำอธิบายและ SKU แต่ละองค์ประกอบสามารถมีชนิดข้อมูลของตัวเอง ตัวอย่างเช่นชื่อถูกระบุเป็นสตริงในขณะที่ราคาถูกระบุเป็นสองเท่า

SOAP ไม่ได้เชื่อมโยงกับโปรโตคอลการขนส่งใด ๆ SOAP สามารถขนส่งผ่าน SMTP, FTP, MQSeries ของ IBM หรือ Microsoft Message Queuing (MSMQ)

ข้อกำหนด SOAP ประกอบด้วยรายละเอียดเกี่ยวกับ HTTP เท่านั้น HTTP ยังคงเป็นโปรโตคอลการขนส่ง SOAP ที่ได้รับความนิยมมากที่สุด

SOAP ผ่าน HTTP

ค่อนข้างมีเหตุผลคำขอ SOAP ถูกส่งผ่านคำขอ HTTP และการตอบกลับ SOAP จะถูกส่งกลับภายในเนื้อหาของการตอบสนอง HTTP แม้ว่าคำขอ SOAP จะสามารถส่งผ่าน HTTP GET ได้ แต่ข้อกำหนดจะรวมถึงรายละเอียดเกี่ยวกับ HTTP POST เท่านั้น

นอกจากนี้คำขอ HTTP และการตอบกลับจะต้องตั้งค่าประเภทเนื้อหาเป็น text / xml

ข้อกำหนด SOAP กำหนดว่าไคลเอ็นต์ต้องจัดเตรียมส่วนหัว SOAPActionแต่ค่าจริงของส่วนหัว SOAPAction ขึ้นอยู่กับการใช้งานเซิร์ฟเวอร์ SOAP

ตัวอย่างเช่นในการเข้าถึงบริการ AltaVista BabelFish Translation ซึ่งโฮสต์โดย XMethods คุณต้องระบุสิ่งต่อไปนี้เป็นส่วนหัว SOAPAction

urn:xmethodsBabelFish#BabelFish

แม้ว่าเซิร์ฟเวอร์จะไม่ต้องการส่วนหัว SOAPAction แบบเต็มไคลเอ็นต์ต้องระบุสตริงว่าง ("") หรือค่า null ตัวอย่างเช่น -

SOAPAction: ""
SOAPAction:

นี่คือคำขอตัวอย่างที่ส่งผ่าน HTTP ไปยังบริการ XMethods Babelfish Translation -

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>

สังเกตชนิดเนื้อหาและส่วนหัว SOAPAction โปรดทราบว่าวิธี BabelFish ต้องใช้พารามิเตอร์ String สองตัว โหมดการแปล en_fr แปลจากภาษาอังกฤษเป็นภาษาฝรั่งเศส

นี่คือคำตอบจาก 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>

การตอบสนอง SOAP ที่ส่งผ่าน HTTP จำเป็นต้องเป็นไปตามรหัสสถานะ HTTP เดียวกัน ตัวอย่างเช่นรหัสสถานะ 200 OK แสดงถึงการตอบสนองที่ประสบความสำเร็จ รหัสสถานะ 500 Internal Server Error บ่งชี้ว่ามีข้อผิดพลาดของเซิร์ฟเวอร์และการตอบสนอง SOAP มีองค์ประกอบ Fault

ในตัวอย่างด้านล่างคำขอGetQuotationจะถูกส่งไปยังเซิร์ฟเวอร์ SOAP ผ่าน HTTP คำร้องขอมีพารามิเตอร์QuotationNameและ Quotation จะถูกส่งกลับในการตอบกลับ

เนมสเปซสำหรับฟังก์ชันถูกกำหนดใน http://www.xyz.org/quotation ที่อยู่.

นี่คือคำขอ 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>

การตอบสนอง SOAP ที่สอดคล้องกันมีลักษณะดังนี้ -

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 ถูกส่งไปยัง W3C ในเดือนพฤษภาคม พ.ศ. 2543 ผู้ส่งอย่างเป็นทางการ ได้แก่ บริษัท ขนาดใหญ่เช่น Microsoft, IBM และ Ariba และ บริษัท ขนาดเล็กเช่น UserLand Software และ DevelopMentor

ในเดือนกรกฎาคม 2544 คณะทำงานพิธีสาร XML ได้เผยแพร่ "ร่างการทำงาน" ของ SOAP 1.2 ภายใน W3C เอกสารนี้อยู่ระหว่างดำเนินการอย่างเป็นทางการซึ่งหมายความว่าเอกสารมีแนวโน้มที่จะได้รับการอัปเดตหลายครั้งก่อนที่จะสรุป

SOAP เวอร์ชัน 1.1 มีจำหน่ายทางออนไลน์ที่ http://www.w3.org/TR/SOAP/

ร่างการทำงานของ SOAP เวอร์ชัน 1.2 มีอยู่ที่ http://www.w3.org/TR/soap12/

โปรดทราบว่า W3C ยังโฮสต์การส่งสำหรับ "SOAP Messages with Attachments" ซึ่งแยกออกจากข้อกำหนด SOAP หลัก ข้อกำหนดนี้ช่วยให้ข้อความ SOAP รวมไฟล์แนบไบนารีเช่นไฟล์ภาพและเสียง สำหรับรายละเอียดทั้งหมดโปรดดู W3C Note ที่http://www.w3.org/TR/SOAP-attachments.