เนื้อหาบางส่วนสามารถอธิบายความแตกต่างระหว่างสไตล์เอกสารและบริการเว็บสไตล์ RPC ได้หรือไม่
มีโมเดลรูปแบบการสื่อสารสองแบบที่ใช้ในการแปลการเชื่อมโยง WSDL กับเนื้อหาข้อความ SOAP พวกเขาคือ
เอกสารและ RPC
ประโยชน์ของการใช้รูปแบบรูปแบบเอกสารคือการที่คุณสามารถโครงสร้างร่างกาย SOAP วิธีที่คุณต้องการตราบใด ๆ ที่เป็นเนื้อหาของร่างกายข้อความ SOAP เป็นเช่น XML ใด ๆ โดยพลการ รูปแบบเอกสารยังจะเรียกว่าเป็นรูปแบบข้อความเชิง
อย่างไรก็ตามด้วยโมเดลสไตล์ RPCโครงสร้างของเนื้อความคำร้องขอ SOAP ต้องมีทั้งชื่อการดำเนินการและชุดของพารามิเตอร์วิธีการ รูปแบบสไตล์ RPC จะถือว่าโครงสร้างเฉพาะของอินสแตนซ์ XMLอยู่ในเนื้อหาของข้อความ
นอกจากนี้ยังมีโมเดลการใช้การเข้ารหัสสองแบบที่ใช้ในการแปลการผูก WSDL กับข้อความ SOAP พวกเขาคือ: ตามตัวอักษรและเข้ารหัส
เมื่อมีการใช้รูปแบบการใช้งานที่แท้จริงเนื้อหาร่างกายควรเป็นไปตามที่ผู้ใช้กำหนดXML-สคี (XSD) โครงสร้าง ข้อดีคือสองเท่า ประการแรกคุณสามารถตรวจสอบความถูกต้องของเนื้อหาข้อความด้วย XML-schema ที่ผู้ใช้กำหนดนอกจากนี้คุณยังสามารถแปลงข้อความโดยใช้ภาษาการแปลงเช่น XSLT
ด้วยรูปแบบการใช้งานที่เข้ารหัส (SOAP) ข้อความจะต้องใช้ประเภทข้อมูล XSD แต่โครงสร้างของข้อความไม่จำเป็นต้องเป็นไปตาม XML schema ที่ผู้ใช้กำหนด ทำให้ยากต่อการตรวจสอบความถูกต้องของเนื้อหาข้อความหรือใช้การแปลงตาม XSLT บนเนื้อหาข้อความ
การผสมผสานรูปแบบและรูปแบบการใช้งานที่แตกต่างกันทำให้เรามีสี่วิธีในการแปลการผูก WSDL เป็นข้อความ SOAP
Document/literal
Document/encoded
RPC/literal
RPC/encoded
ฉันอยากจะแนะนำให้คุณอ่านบทความนี้ที่ชื่อว่าฉันควรใช้ WSDL รูปแบบใด? โดย Russell Butek ซึ่งมีการอภิปรายที่ดีเกี่ยวกับรูปแบบที่แตกต่างกันและใช้แบบจำลองเพื่อแปล WSDL ที่เชื่อมโยงกับข้อความ SOAP และจุดแข็งและจุดอ่อนที่เกี่ยวข้อง
เมื่อได้รับสิ่งประดิษฐ์ในรูปแบบการสื่อสารทั้งสองรูปแบบฉันจะเรียกใช้เมธอดบนพอร์ต ตอนนี้สิ่งนี้ไม่แตกต่างกันในสไตล์ RPC และสไตล์เอกสาร อะไรคือความแตกต่างและความแตกต่างนั้นมองเห็นได้ที่ไหน?
สถานที่ที่คุณจะพบความแตกต่างคือ "การตอบสนอง"!
สไตล์ RPC:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
ข้อความ SOAP สำหรับการดำเนินการที่สองจะมีเอาต์พุตว่างเปล่าและจะมีลักษณะดังนี้:
การตอบสนองสไตล์ RPC:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
รูปแบบเอกสาร:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
หากเราเรียกใช้ไคลเอนต์สำหรับ SEI ข้างต้นผลลัพธ์คือ:
123 [123, 456]
ผลลัพธ์นี้แสดงให้เห็นว่าองค์ประกอบ ArrayList กำลังแลกเปลี่ยนระหว่างบริการเว็บและไคลเอนต์ การเปลี่ยนแปลงนี้ทำได้โดยการเปลี่ยนแอตทริบิวต์ style ของคำอธิบายประกอบ SOAPBinding เท่านั้น ข้อความ SOAP สำหรับวิธีที่สองที่มีชนิดข้อมูลที่สมบูรณ์กว่าแสดงไว้ด้านล่างสำหรับการอ้างอิง:
การตอบสนองรูปแบบเอกสาร:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
สรุป
- ดังที่คุณจะสังเกตเห็นในข้อความตอบกลับ SOAP สองข้อความว่าเป็นไปได้ที่จะตรวจสอบความถูกต้องของข้อความตอบกลับ SOAP ในกรณีของรูปแบบ DOCUMENT แต่ไม่ใช่ในบริการเว็บสไตล์ RPC
- ข้อเสียพื้นฐานของการใช้สไตล์ RPCคือไม่รองรับประเภทข้อมูลที่สมบูรณ์ยิ่งขึ้นและการใช้สไตล์เอกสารคือทำให้เกิดความซับซ้อนบางอย่างในรูปแบบของ XSD เพื่อกำหนดประเภทข้อมูลที่สมบูรณ์ยิ่งขึ้น
- การเลือกใช้สิ่งเหล่านี้ขึ้นอยู่กับข้อกำหนดการดำเนินการ / วิธีการและลูกค้าที่คาดหวัง
ในทำนองเดียวกัน SOAP บน HTTP แตกต่างจาก XML ผ่าน HTTP อย่างไร หลังจาก SOAP ทั้งหมดยังเป็นเอกสาร XML ที่มี SOAP namespace แล้วความแตกต่างที่นี่คืออะไร?
ทำไมเราต้องมีมาตรฐานเช่น SOAP? ด้วยการแลกเปลี่ยนเอกสาร XML ผ่าน HTTP โปรแกรมสองโปรแกรมสามารถแลกเปลี่ยนข้อมูลที่มีโครงสร้างที่หลากหลายโดยไม่ต้องใช้มาตรฐานเพิ่มเติมเช่น SOAP เพื่ออธิบายรูปแบบซองข้อความอย่างชัดเจนและวิธีการเข้ารหัสเนื้อหาที่มีโครงสร้าง
SOAP จัดเตรียมมาตรฐานเพื่อให้นักพัฒนาไม่ต้องคิดค้นรูปแบบข้อความ XML ที่กำหนดเองสำหรับทุกบริการที่ต้องการให้พร้อมใช้งาน ด้วยลายเซ็นของวิธีการบริการที่จะเรียกใช้ข้อกำหนด SOAP จะกำหนดรูปแบบข้อความ XML ที่ไม่คลุมเครือ นักพัฒนาที่คุ้นเคยกับข้อกำหนด SOAP ซึ่งทำงานในภาษาโปรแกรมใด ๆ สามารถกำหนดคำขอ SOAP XML ที่ถูกต้องสำหรับบริการเฉพาะและเข้าใจการตอบสนองจากบริการโดยรับรายละเอียดบริการต่อไปนี้
- ชื่อบริการ
- ชื่อวิธีการดำเนินการโดยบริการ
- ลายเซ็นของแต่ละวิธี
- ที่อยู่ของการใช้บริการ (แสดงเป็น URI)
การใช้ SOAP ช่วยเพิ่มความคล่องตัวในการเปิดเผยส่วนประกอบซอฟต์แวร์ที่มีอยู่เป็นบริการบนเว็บเนื่องจากลายเซ็นวิธีการของบริการระบุโครงสร้างเอกสาร XML ที่ใช้สำหรับทั้งคำขอและการตอบกลับ