- สบู่ยืนสำหรับเข้าถึงวัตถุง่าย P rotocol
- SOAP เป็นโปรโตคอลการสื่อสารประยุกต์ใช้
- สบู่เป็นรูปแบบการส่งและรับข้อความ
- สบู่แพลตฟอร์ม
- สบู่อยู่บนพื้นฐานของ XML
- สบู่คำแนะนำ W3C
ทำไมสบู่?
มันเป็นสิ่งสำคัญสำหรับการใช้งานเว็บเพื่อให้สามารถติดต่อสื่อสารผ่านทางอินเทอร์เน็ต
วิธีที่ดีที่สุดในการสื่อสารระหว่างการใช้งานคือผ่าน HTTP, HTTP เพราะได้รับการสนับสนุนโดยทุกเบราว์เซอร์อินเทอร์เน็ตและเซิร์ฟเวอร์ สบู่ถูกสร้างขึ้นเพื่อให้บรรลุนี้
สบู่มีวิธีการติดต่อสื่อสารระหว่างโปรแกรมที่ทำงานบนระบบปฏิบัติการที่แตกต่างกันด้วยเทคโนโลยีที่แตกต่างกันและการเขียนโปรแกรมภาษา
สบู่อาคารบล็อก
ข้อความสบู่เอกสาร XML สามัญที่มีองค์ประกอบดังต่อไปนี้:
- องค์ประกอบซองจดหมายที่ระบุเอกสาร XML เป็นข้อความสบู่
- องค์ประกอบส่วนหัวที่มีข้อมูลส่วนหัว
- องค์ประกอบของร่างกายที่มีการโทรและการตอบสนองต่อข้อมูล
- องค์ประกอบความผิดที่มีข้อผิดพลาดและข้อมูลสถานะ
องค์ประกอบทั้งหมดข้างต้นมีการประกาศใน namespace เริ่มต้นสำหรับซองจดหมาย SOAP นี้:
http://www.w3.org/2003/05/soap-envelope/
และ namespace เริ่มต้นสำหรับการเข้ารหัสและสบู่ชนิดข้อมูลคือ
http://www.w3.org/2003/05/soap-encoding
กฎไวยากรณ์
นี่คือบางส่วนกฎไวยากรณ์ที่สำคัญ ได้แก่ :
- ข้อความ SOAP ต้องมีการเข้ารหัสโดยใช้ XML
- ข้อความ SOAP ต้องใช้ namespace SOAP ซองจดหมาย
- ข้อความ SOAP ต้องใช้ namespace SOAP เข้ารหัส
- ข้อความ SOAP ไม่ต้องมีการอ้างอิง DTD
- ข้อความ SOAP ไม่ต้องมีคำแนะนำในการประมวลผล XML
โครงกระดูกข้อความ SOAP
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
สบู่ซองจดหมายธาตุ
ที่จำเป็นต้องใช้องค์ประกอบ SOAP ซองจดหมายเป็นองค์ประกอบรากของข้อความสบู่ องค์ประกอบนี้กำหนดเอกสาร XML เป็นข้อความสบู่
ตัวอย่าง
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
xmlns: สบู่ Namespace
ขอให้สังเกต xmlns นี้: namespace สบู่ในตัวอย่างข้างต้น มันก็ควรจะมีค่าของ: "http://www.w3.org/2003/05/soap-envelope/"
namespace ที่กำหนดซองจดหมายซองจดหมายเป็นสบู่
ถ้า namespace ที่แตกต่างกันมีการใช้แอพลิเคชันสร้างข้อผิดพลาดและทิ้งข้อความ
encodingStyle แอตทริบิวต์
encodingStyle แอตทริบิวต์ที่ถูกใช้ในการกำหนดชนิดข้อมูลที่ใช้ในเอกสาร คุณลักษณะนี้อาจปรากฏในองค์ประกอบ SOAP ใด ๆ และนำไปใช้กับเนื้อหาองค์ประกอบและองค์ประกอบของเด็กทั้งหมด
ข้อความ SOAP มีการเข้ารหัสเริ่มต้นไม่มี
วากยสัมพันธ์
soap:encodingStyle="URI"
ตัวอย่าง
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
สบู่หัวธาตุ
ตัวเลือกองค์ประกอบส่วนหัว SOAP มีข้อมูลเฉพาะของโปรแกรมประยุกต์ (like authentication, payment, etc) เกี่ยวกับข้อความสบู่
ถ้าองค์ประกอบส่วนหัวเป็นปัจจุบันก็จะต้องมีองค์ประกอบที่ลูกคนแรกขององค์ประกอบซองจดหมาย
Note: ทุกองค์ประกอบของเด็กทันทีขององค์ประกอบส่วนหัวจะต้อง namespace ที่ผ่านการคัดเลือก
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
ตัวอย่างข้างต้นมีส่วนหัวที่มี "Trans" องค์ประกอบเป็น "mustUnderstand" แอตทริบิวต์ที่มีค่า 1 และค่าของ 234
สบู่กำหนดคุณลักษณะที่สามใน namespace เริ่มต้น คุณลักษณะเหล่านี้คือ: mustUnderstand นักแสดงและ encodingStyle
แอตทริบิวต์ที่กำหนดไว้ในส่วนหัว SOAP กำหนดวิธีผู้รับควรประมวลผลข้อความสบู่
mustUnderstand แอตทริบิวต์
แอตทริบิวต์ SOAP mustUnderstand สามารถนำมาใช้เพื่อบ่งชี้ว่ารายการส่วนหัวมีผลบังคับใช้หรือไม่จำเป็นสำหรับผู้รับในการประมวลผล
ถ้าคุณเพิ่ม mustUnderstand = "1" ไปยังองค์ประกอบลูกขององค์ประกอบส่วนหัวก็แสดงว่ารับการประมวลผลส่วนหัวจะต้องรับรู้องค์ประกอบ ถ้ารับไม่รู้จักองค์ประกอบมันจะล้มเหลวเมื่อการประมวลผลส่วนหัว
วากยสัมพันธ์
soap:mustUnderstand="0|1"
ตัวอย่าง
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
actor แอตทริบิวต์
ข้อความ SOAP อาจเดินทางจากผู้ส่งไปยังผู้รับปลายทางโดยผ่านที่แตกต่างกันไปตามเส้นทางข้อความ แต่ไม่ทุกส่วนของข้อความ SOAP อาจจะมีไว้สำหรับปลายทางที่ดีที่สุด แต่มันอาจจะมีไว้สำหรับหนึ่งหรือมากกว่าหนึ่งของปลายทางบนเส้นทางข้อความ
แอตทริบิวต์ SOAP นักแสดงที่ถูกนำมาใช้เพื่อแก้ไของค์ประกอบส่วนหัวไปยังปลายทางที่เฉพาะเจาะจง
วากยสัมพันธ์
soap:actor="URI"
ตัวอย่าง
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="http://www.w3ii.com/transaction/"
soap:actor="http://www.w3ii.com/appml/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
encodingStyle แอตทริบิวต์
encodingStyle แอตทริบิวต์ที่ถูกใช้ในการกำหนดชนิดข้อมูลที่ใช้ในเอกสาร คุณลักษณะนี้อาจปรากฏในองค์ประกอบ SOAP ใด ๆ และมันจะนำไปใช้กับเนื้อหาขององค์ประกอบที่และองค์ประกอบของเด็กทั้งหมด
ข้อความ SOAP มีการเข้ารหัสเริ่มต้นไม่มี
วากยสัมพันธ์
soap:encodingStyle="URI"
สบู่ร่างกายธาตุ
ที่จำเป็นต้องใช้องค์ประกอบ Body Soap สบู่ประกอบด้วยข้อความที่เกิดขึ้นจริงมีไว้สำหรับปลายทางที่ดีที่สุดของข้อความ
องค์ประกอบของเด็กทันทีขององค์ประกอบสบู่อาจจะ namespace ที่ผ่านการคัดเลือก
ตัวอย่าง
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="http://www.w3ii.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
ตัวอย่างข้างต้นขอราคาของแอปเปิ้ล โปรดทราบว่า M: GetPrice และองค์ประกอบรายการดังกล่าวข้างต้นเป็นองค์ประกอบเฉพาะของโปรแกรมประยุกต์ พวกเขาจะไม่เป็นส่วนหนึ่งของ namespace สบู่
การตอบสนอง SOAP จะมีลักษณะบางอย่างเช่นนี้
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="http://www.w3ii.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
สบู่ Fault ธาตุ
องค์ประกอบความผิด SOAP จำเป็นจะใช้เพื่อระบุข้อความผิดพลาด
องค์ประกอบความผิด SOAP ถือข้อผิดพลาดและข้อมูลสถานะข้อความสบู่
หากเป็นองค์ประกอบความผิดพลาดที่มีอยู่นั้นจะต้องปรากฏเป็นองค์ประกอบลูกขององค์ประกอบของร่างกาย องค์ประกอบความผิดพลาดเพียงครั้งเดียวสามารถปรากฏในข้อความสบู่
องค์ประกอบความผิด SOAP มีองค์ประกอบย่อยต่อไปนี้:
ตำบลธาตุ | ลักษณะ |
---|---|
<faultcode> | รหัสสำหรับการระบุความผิดต่อ A |
<faultstring> | คำอธิบายการอ่านของมนุษย์ของความผิด |
<faultactor> | ข้อมูลเกี่ยวกับผู้ที่ก่อให้เกิดความผิดพลาดที่จะเกิดขึ้น |
<detail> | เก็บข้อมูลผิดพลาดโปรแกรมเฉพาะที่เกี่ยวข้องกับองค์ประกอบของร่างกาย |
รหัส SOAP Fault
ค่า faultcode ระบุไว้ด้านล่างจะต้องใช้ในองค์ประกอบ faultcode เมื่ออธิบายความผิดพลาด:
ความผิดพลาด | ลักษณะ |
---|---|
VersionMismatch | พบ namespace ที่ไม่ถูกต้องสำหรับองค์ประกอบ SOAP ซองจดหมาย |
MustUnderstand | องค์ประกอบเด็กทันทีขององค์ประกอบส่วนหัวกับ mustUnderstand ตั้งค่าแอตทริบิวต์ "1" ก็ไม่เข้าใจ |
Client | ข้อความที่ถูกสร้างขึ้นไม่ถูกต้องหรือมีข้อมูลไม่ถูกต้อง |
Server | มีปัญหากับเซิร์ฟเวอร์ได้ดังนั้นข้อความไม่สามารถดำเนินการต่อไป |
โปรโตคอล HTTP
HTTP สื่อสารผ่าน TCP / IP ไคลเอนต์ HTTP เชื่อมต่อกับเซิร์ฟเวอร์ HTTP ใช้ TCP หลังจากการสร้างการเชื่อมต่อให้ลูกค้าสามารถส่งข้อความร้องขอ HTTP ไปยังเซิร์ฟเวอร์:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
เซิร์ฟเวอร์แล้วประมวลผลการร้องขอและส่งการตอบสนอง HTTP กลับไปยังลูกค้า การตอบสนองที่มีรหัสสถานะที่บ่งบอกถึงสถานะของคำขอ:
200 OK
Content-Type: text/plain
Content-Length: 200
ในตัวอย่างข้างต้น, เซิร์ฟเวอร์ส่งคืนรหัสสถานะของ 200 นี้เป็นรหัสความสำเร็จมาตรฐานสำหรับ HTTP
ถ้าเซิร์ฟเวอร์ไม่สามารถถอดรหัสคำขอก็อาจมีบางสิ่งบางอย่างกลับมาเช่นนี้
400 Bad Request
Content-Length: 0
สบู่เข้าเล่ม
สเป SOAP กำหนดโครงสร้างของข้อความ SOAP ไม่ว่าพวกเขาจะมีการแลกเปลี่ยน ช่องว่างนี้จะเต็มไปด้วยสิ่งที่เรียกว่า "SOAP Bindings" ผูก SOAP กลไกที่ช่วยให้ข้อความ SOAP ที่จะแลกเปลี่ยนได้อย่างมีประสิทธิภาพโดยใช้โปรโตคอลการขนส่ง
ส่วนใหญ่การใช้สบู่ให้ผูกสำหรับโปรโตคอลการขนส่งทั่วไปเช่น HTTP หรือ SMTP
HTTP เป็นซิงโครและใช้กันอย่างแพร่หลาย ขอ SOAP HTTP ระบุอย่างน้อยสองหัว http: ประเภทเนื้อหาและความยาวของเนื้อหา
SMTP ไม่ตรงกันและใช้ในรีสอร์ทสุดท้ายหรือกรณีเฉพาะ
การใช้งาน Java ของสบู่มักจะให้เฉพาะผูกพันสำหรับ JMS (Java Messaging System) โปรโตคอล
ชนิดของเนื้อหา
ส่วนหัวของเนื้อหาชนิดสำหรับคำขอสบู่และการตอบสนองกำหนดชนิดไมม์สำหรับข้อความและการเข้ารหัสอักขระ (optional) ใช้สำหรับร่างกาย XML ของการร้องขอหรือการตอบสนอง
วากยสัมพันธ์
Content-Type: MIMEType; charset=character-encoding
ตัวอย่าง
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
ความยาวของเนื้อหา
ส่วนหัวของความยาวเนื้อหาสำหรับคำขอสบู่และการตอบสนองระบุจำนวนไบต์ในร่างกายของการร้องขอหรือการตอบสนอง
วากยสัมพันธ์
Content-Length: bytes
ตัวอย่าง
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
ตัวอย่างสบู่
ในตัวอย่างด้านล่างขอ GetStockPrice จะถูกส่งไปยังเซิร์ฟเวอร์ การร้องขอมีพารามิเตอร์ StockName และพารามิเตอร์ราคาที่จะถูกส่งกลับในการตอบสนอง namespace ของฟังก์ชั่นที่มีการกำหนดไว้ใน "http://www.example.org/stock"
ขอ SOAP:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
การตอบสนอง SOAP:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>