เราต้องกำหนดสิ่งที่เป็นบริการเว็บก่อนที่จะบอกว่า SOAP และ WSDL ต่างกันอย่างไรโดยที่ทั้งสอง (SOAP และ WSDL) เป็นส่วนประกอบของบริการบนเว็บ
แอปพลิเคชันส่วนใหญ่ได้รับการพัฒนาเพื่อโต้ตอบกับผู้ใช้ผู้ใช้ป้อนหรือค้นหาข้อมูลผ่านอินเทอร์เฟซจากนั้นแอปพลิเคชันจะตอบสนองต่อการป้อนข้อมูลของผู้ใช้
บริการบนเว็บทำสิ่งเดียวกันไม่มากก็น้อยยกเว้นว่าแอปพลิเคชันบริการบนเว็บจะสื่อสารจากเครื่องไปยังเครื่องหรือแอปพลิเคชันไปยังแอปพลิเคชันเท่านั้น มักไม่มีการโต้ตอบกับผู้ใช้โดยตรง
บริการเว็บโดยทั่วไปคือชุดของโปรโตคอลแบบเปิดที่ใช้ในการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน การใช้โปรโตคอลแบบเปิดทำให้บริการเว็บเป็นอิสระจากแพลตฟอร์ม ซอฟต์แวร์ที่เขียนด้วยภาษาโปรแกรมที่แตกต่างกันและทำงานบนแพลตฟอร์มที่แตกต่างกันสามารถใช้บริการเว็บเพื่อแลกเปลี่ยนข้อมูลผ่านเครือข่ายคอมพิวเตอร์เช่นอินเทอร์เน็ต กล่าวอีกนัยหนึ่งแอปพลิเคชัน Windows สามารถพูดคุยกับแอปพลิเคชัน PHP, Java และ Perl และอื่น ๆ อีกมากมายซึ่งในสถานการณ์ปกติจะไม่สามารถทำได้
บริการบนเว็บทำงานอย่างไร
เนื่องจากแอปพลิเคชันที่แตกต่างกันเขียนด้วยภาษาโปรแกรมที่แตกต่างกันจึงมักไม่สามารถสื่อสารกันได้ บริการบนเว็บช่วยให้สามารถสื่อสารได้โดยใช้โปรโตคอลและมาตรฐานแบบเปิดร่วมกันโดยส่วนใหญ่ XML, SOAP และ WSDL บริการบนเว็บใช้ XML ในการแท็กข้อมูล SOAP เพื่อถ่ายโอนข้อความและสุดท้าย WSDL เพื่ออธิบายความพร้อมใช้งานของบริการ มาดูองค์ประกอบหลักสามส่วนนี้ของแอปพลิเคชันบริการบนเว็บ
Simple Object Access Protocol (SOAP)
Simple Object Access Protocol หรือ SOAP เป็นโปรโตคอลสำหรับการส่งและรับข้อความระหว่างแอปพลิเคชันโดยไม่ต้องเผชิญกับปัญหาด้านความสามารถในการทำงานร่วมกัน (ความสามารถในการทำงานร่วมกันหมายถึงแพลตฟอร์มที่บริการบนเว็บกำลังทำงานอยู่ไม่เกี่ยวข้อง) โปรโตคอลอื่นที่มีฟังก์ชันคล้ายกันคือ HTTP ใช้เพื่อเข้าถึงหน้าเว็บหรือท่องเน็ต HTTP ช่วยให้มั่นใจได้ว่าคุณไม่ต้องกังวลเกี่ยวกับประเภทของเว็บเซิร์ฟเวอร์ไม่ว่าจะเป็น Apache หรือ IIS หรืออื่น ๆ - ให้บริการหน้าที่คุณกำลังดูอยู่หรือหน้าที่คุณดูนั้นสร้างขึ้นใน ASP.NET หรือ HTML หรือไม่
เนื่องจาก SOAP ใช้สำหรับการร้องขอและการตอบสนองเนื้อหาจึงแตกต่างกันเล็กน้อยขึ้นอยู่กับวัตถุประสงค์
ด้านล่างนี้คือตัวอย่างคำขอ SOAP และข้อความตอบกลับ
คำขอ SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPrice>
<m:BookName>The Fleamarket</m:BookName>
</m:GetBookPrice>
</soap:Body>
</soap:Envelope>
การตอบสนองของ SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPriceResponse>
<m: Price>10.95</m: Price>
</m:GetBookPriceResponse>
</soap:Body>
</soap:Envelope>
แม้ว่าข้อความทั้งสองจะดูเหมือนกัน แต่ก็ใช้วิธีการที่แตกต่างกัน ตัวอย่างเช่นการดูตัวอย่างข้างต้นคุณจะเห็นว่าข้อความขอใช้GetBookPrice
วิธีการรับราคาหนังสือ การตอบสนองจะดำเนินการโดยGetBookPriceResponse
วิธีการซึ่งจะเป็นข้อความที่คุณในฐานะ "ผู้ร้องขอ" จะเห็น คุณยังสามารถดูว่าข้อความนั้นประกอบขึ้นโดยใช้ XML
ภาษาคำอธิบายบริการเว็บหรือ WSDL
WSDL เป็นเอกสารที่อธิบายถึงบริการบนเว็บและยังบอกวิธีการเข้าถึงและใช้วิธีการต่างๆ
WSDL ดูแลคุณจะรู้ได้อย่างไรว่ามีวิธีใดบ้างในบริการบนเว็บที่คุณพบเจอบนอินเทอร์เน็ต
ดูไฟล์ WSDL ตัวอย่าง:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name ="DayOfWeek"
targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="DayOfWeekInput">
<part name="date" type="xsd:date"/>
</message>
<message name="DayOfWeekResponse">
<part name="dayOfWeek" type="xsd:string"/>
</message>
<portType name="DayOfWeekPortType">
<operation name="GetDayOfWeek">
<input message="tns:DayOfWeekInput"/>
<output message="tns:DayOfWeekResponse"/>
</operation>
</portType>
<binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetDayOfWeek">
<soap:operation soapAction="getdayofweek"/>
<input>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="DayOfWeekService" >
<documentation>
Returns the day-of-week name for a given date
</documentation>
<port name="DayOfWeekPort" binding="tns:DayOfWeekBinding">
<soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/>
</port>
</service>
</definitions>
สิ่งสำคัญที่ต้องจำเกี่ยวกับไฟล์ WSDL คือให้คุณ:
คำอธิบายของบริการบนเว็บ
วิธีการที่บริการบนเว็บใช้และพารามิเตอร์ที่ใช้
วิธีค้นหาเว็บเซอร์วิส