ความแตกต่างระหว่างข้อความ SOAP และ WSDL?


102

ฉันสับสนว่าข้อความ SOAP และ WSDL เข้ากันได้อย่างไร? ฉันได้เริ่มค้นหาข้อความ 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/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/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 ทั้งหมดเป็นของ WSDL หรือไม่? SOAP เป็นโปรโตคอลที่ยอมรับ 'SOAP messages' หรือ 'WSDL's ของตัวเองหรือไม่? หากแตกต่างกันฉันควรใช้ข้อความ SOAP เมื่อใดและฉันควรใช้ WSDL เมื่อใด

การชี้แจงบางอย่างเกี่ยวกับเรื่องนี้จะดีมาก


1
wsdl คือข้อกำหนดที่สามารถส่งข้อความและสิ่งที่คาดหวังได้จากการตอบกลับ ความรู้สึกเอกสาร wsdl ไม่จำเป็นสำหรับการสื่อสารสบู่ แต่เป็นองค์ประกอบที่จำเป็นตามโปรโตคอล
troelskn

คำตอบ:


121

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

เมื่อใดก็ตามที่เราต้องการทราบราคาเราจะส่งข้อความ SOAP ที่ไม่ซ้ำใคร มันจะเป็นแบบนี้

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

และเราคาดว่าจะได้รับข้อความตอบกลับ SOAP เช่น;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

จากนั้น WSDL จะอธิบายวิธีจัดการ / ประมวลผลข้อความนี้เมื่อเซิร์ฟเวอร์ได้รับ ในกรณีของเราจะอธิบายถึงประเภทของ Title, NumPages & ISBN ว่าเราควรคาดหวังการตอบกลับจากข้อความ GetBookPrice หรือไม่และการตอบกลับนั้นควรมีลักษณะอย่างไร

ประเภทจะมีลักษณะดังนี้

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

แต่ WSDL ยังมีข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันที่เชื่อมโยงเข้าด้วยกันเพื่อดำเนินการและการดำเนินการใดที่สามารถใช้ได้ในบริการและตำแหน่งของเครือข่ายที่คุณสามารถเข้าถึงบริการ / การดำเนินการได้

ดูW3 ตัวอย่าง WSDL ที่มีคำอธิบายประกอบ


4
เมื่อคุณพูดบรรทัดนี้ "WSDL จะอธิบายวิธีจัดการ / ประมวลผลข้อความนี้เมื่อเซิร์ฟเวอร์ได้รับ" คุณไม่คิดว่ามีอะไรผิดปกติที่นี่ ฉันคิดว่า WSDL มีไว้สำหรับลูกค้ามากกว่าที่จะรู้ว่ามีบริการใดบ้างที่ลูกค้าสัมผัสได้ ฉันไม่คิดว่าจะแนะนำการจัดการหรือประมวลผลข้อความไปยังเซิร์ฟเวอร์ ฉันมีเหตุผลไหม?
Unbreakable

76

ข้อความ SOAP คือเอกสาร XML ที่ใช้ในการส่งข้อมูลของคุณ WSDL เป็นเอกสาร XML ซึ่งอธิบายวิธีการเชื่อมต่อและส่งคำขอไปยังบริการบนเว็บของคุณ

โดยทั่วไปข้อความ SOAP คือข้อมูลที่คุณส่ง WSDL จะบอกคุณว่าคุณสามารถทำอะไรได้บ้างและจะโทรออกอย่างไร

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

เพียงสังเกตคำถามเฉพาะของคุณ:

ข้อความ SOAP ทั้งหมดเป็นของ WSDL หรือไม่? ไม่พวกเขาไม่ใช่สิ่งเดียวกันเลย

SOAP เป็นโปรโตคอลที่ยอมรับ 'SOAP messages' หรือ 'WSDL's ของตัวเองหรือไม่? ไม่จำเป็นต้องอ่านเนื่องจากอยู่ไกล

หากแตกต่างกันฉันควรใช้ข้อความ SOAP เมื่อใดและฉันควรใช้ WSDL เมื่อใด Soap เป็นโครงสร้างที่คุณใช้กับข้อความ / ข้อมูลสำหรับการถ่ายโอน WSDL ใช้เพื่อกำหนดวิธีการโทรเข้าสู่บริการในตอนแรกเท่านั้น บ่อยครั้งที่นี่เป็นครั้งแรกเมื่อคุณเพิ่มรหัสเพื่อโทรไปยังบริการเว็บใดเว็บหนึ่ง


ฉันสับสนว่าคุณหมายถึงอะไร "ครั้งเดียว" ถ้าคุณสามารถอธิบายด้วยข้อความตัวอย่างที่น่าจะดี นอกจากนี้คุณกำลังบอกว่าข้อความ WSDL และ SOAP ใช้ร่วมกัน?
เจมส์

6
WSDL บอกวิธีเรียกใช้บริการเว็บ บ่อยครั้งที่คุณใช้ WSDL เพื่อสร้างรหัสโดยอัตโนมัติเพื่อเรียกใช้บริการเว็บจากนั้นจะไม่ใช้อีกเลย การอ่านบทต่างๆในหนังสือที่ฉันเชื่อมโยงน่าจะช่วยได้
Matthew

27

WSDL (Web Service Definition Language) คือไฟล์ข้อมูลเมตาที่อธิบายเกี่ยวกับบริการบนเว็บ

สิ่งต่างๆเช่นชื่อการดำเนินการพารามิเตอร์ ฯลฯ

ข้อความสบู่เป็นน้ำหนักบรรทุกจริง


25

เราต้องกำหนดสิ่งที่เป็นบริการเว็บก่อนที่จะบอกว่า 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 คือให้คุณ:

  • คำอธิบายของบริการบนเว็บ

  • วิธีการที่บริการบนเว็บใช้และพารามิเตอร์ที่ใช้

  • วิธีค้นหาเว็บเซอร์วิส


  • คำอธิบายที่เป็น
    รูปธรรม

    7

    การเปรียบเทียบที่ดีกว่าการโทร: การสั่งซื้อสินค้าทางไปรษณีย์จากบริการสั่งซื้อทางไปรษณีย์ เอกสาร WSDL เป็นเหมือนคำแนะนำที่อธิบายวิธีการสร้างแบบฟอร์มคำสั่งซื้อที่ผู้ให้บริการจะยอมรับ ข้อความ SOAP เปรียบเสมือนซองจดหมายที่มีการออกแบบมาตรฐาน (ขนาดรูปร่างโครงสร้าง) ที่ไปรษณีย์ทุกแห่งทั่วโลกรู้วิธีจัดการ คุณใส่แบบฟอร์มการสั่งซื้อของคุณลงในซองจดหมายดังกล่าว เครือข่าย (เช่นอินเทอร์เน็ต) คือบริการไปรษณีย์ คุณใส่ซองจดหมายของคุณในจดหมาย พนักงานของไปรษณีย์ไม่เปิดดูข้างในซองจดหมาย XML payload คือแบบฟอร์มคำสั่งซื้อที่คุณใส่ไว้ในซองจดหมาย หลังจากที่ทำการไปรษณีย์ส่งซองแล้วผู้ให้บริการเว็บจะเปิดซองและดำเนินการตามแบบฟอร์มการสั่งซื้อ หากคุณสร้างและกรอกแบบฟอร์มอย่างถูกต้อง


    4

    พูดง่ายๆว่าคุณมีบริการเครื่องคิดเลขบนเว็บ WSDL บอกเกี่ยวกับฟังก์ชั่นที่คุณสามารถใช้งานหรือสัมผัสกับไคลเอนต์ ตัวอย่างเช่น: เพิ่มลบลบและอื่น ๆ ในกรณีที่ใช้ SOAP คุณจะดำเนินการต่างๆเช่น doDelete (), doSubtract (), doAdd () SOAP และ WSDL คือแอปเปิ้ลและส้ม เราไม่ควรเปรียบเทียบพวกเขา ทั้งสองมีฟังก์ชันการทำงานที่แตกต่างกัน


    1

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

    WSDL: ในสบู่ข้อมูลจะถูกจัดระเบียบในบางลักษณะและองค์กรนี้ระบุไว้ใน WSDL ประเภทข้อมูลที่ต้องใช้จะระบุไว้ที่นี่ด้วย สำหรับคำขอและการตอบกลับ WSDL เดียวจะปรากฏขึ้น


    0

    WSDL เป็นสัญญาประเภทหนึ่งระหว่างผู้ให้บริการ API และไคลเอนต์ซึ่งอธิบายถึงบริการเว็บ: ฟังก์ชันสาธารณะฟิลด์เสริม / จำเป็น ...

    แต่ข้อความสบู่เป็นข้อมูลที่ถ่ายโอนระหว่างไคลเอนต์และผู้ให้บริการ (payload)


    0

    WSDL ทำหน้าที่เป็นส่วนติดต่อระหว่างผู้ส่งและผู้รับ
    ข้อความ SOAP คือการร้องขอและการตอบกลับในรูปแบบ xml

    เปรียบเทียบกับ java RMI

    WSDL เป็น
    ข้อความ SOAP คลาสอินเทอร์เฟซคือการร้องขอและข้อความตอบกลับแบบมาร์แชล


    -1

    เราสามารถพิจารณาการโทรได้ในจำนวนนั้นคือ wsdl และการแลกเปลี่ยนข้อมูลคือสบู่

    WSDL คือคำอธิบายวิธีการเชื่อมต่อกับเซิร์ฟเวอร์การสื่อสาร SOAP มีข้อความสื่อสาร


    1
    ไม่หมายเลขโทรศัพท์จะเหมือนกับหนึ่งในอุปกรณ์ปลายทางที่กำหนดไว้ใน WSDL ไม่มีสิ่งใดเทียบเท่ากับ WSDL ในโดเมนของการโทร สิ่งที่ใกล้เคียงที่สุดอาจเป็นสมุดโทรศัพท์โดยเฉพาะอย่างยิ่งหากคุณมีแนวคิดของ "สมุดหน้าเหลือง" ซึ่งจัดหมวดหมู่ธุรกิจและให้รายละเอียดบางอย่างเกี่ยวกับธุรกิจ (ไม่ใช่แค่หมายเลขโทรศัพท์)
    John Saunders
    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.