Perbedaan antara pesan SOAP dan WSDL?

102

Saya bingung tentang bagaimana pesan SOAP dan WSDL cocok? Saya sudah mulai melihat pesan SOAP seperti:

    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>

Apakah semua pesan SOAP milik WSDL? Apakah SOAP merupakan protokol yang menerima 'pesan SOAP' atau 'WSDL-nya sendiri? Jika berbeda, lalu kapan saya harus menggunakan pesan SOAP dan kapan saya harus menggunakan WSDL?

Beberapa klarifikasi seputar ini akan luar biasa.

James
sumber
1
Wsdl adalah spesifikasi pesan mana yang dapat dikirim dan apa yang diharapkan sebagai tanggapan. Artinya, dokumen wsdl tidak diperlukan untuk komunikasi sabun, tetapi merupakan elemen yang diperlukan sesuai dengan protokol.
troelskn

Jawaban:

121

Dokumen SOAP dikirim per permintaan. Katakanlah kami adalah toko buku, dan memiliki server jarak jauh yang kami tanyai untuk mempelajari harga saat ini dari sebuah buku tertentu. Katakanlah kita perlu meneruskan judul Buku, jumlah halaman dan nomor ISBN ke server.

Kapanpun kami ingin mengetahui harganya, kami akan mengirimkan pesan SOAP yang unik. Ini akan terlihat seperti ini;

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

Dan kami berharap mendapatkan pesan respons SOAP kembali seperti;

<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 kemudian menjelaskan cara menangani / memproses pesan ini ketika server menerimanya. Dalam kasus kami, ini menjelaskan jenis Judul, NumPages & ISBN, apakah kami harus mengharapkan respons dari pesan GetBookPrice dan seperti apa respons itu.

Jenisnya akan terlihat seperti ini;

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

Tetapi WSDL juga berisi lebih banyak informasi, tentang fungsi mana yang terhubung bersama untuk membuat operasi, dan operasi apa yang tersedia dalam layanan, dan keberadaan di jaringan Anda dapat mengakses layanan / operasi.

Lihat juga Contoh WSDL Beranotasi W3

Jono
sumber
4
Ketika Anda mengatakan baris ini "WSDL kemudian menjelaskan bagaimana menangani / memproses pesan ini ketika server menerimanya." Tidakkah menurutmu ada yang salah di sini. Saya pikir WSDL lebih kepada klien untuk mengetahui layanan apa saja yang diekspos kepada klien. Saya tidak berpikir itu memandu penanganan atau pemrosesan pesan ke server. Apakah saya masuk akal?
dipecahkan
76

Pesan SOAP adalah dokumen XML yang digunakan untuk mengirimkan data Anda. WSDL adalah dokumen XML yang menjelaskan cara menghubungkan dan membuat permintaan ke layanan web Anda.

Pada dasarnya pesan SOAP adalah data yang Anda kirimkan, WSDL memberi tahu Anda apa yang dapat Anda lakukan dan bagaimana melakukan panggilan.

Pencarian cepat di Google akan menghasilkan banyak sumber untuk bacaan tambahan (tautan buku sebelumnya sekarang mati, untuk memerangi ini akan memberi rekomendasi baru di komentar)

Hanya mencatat pertanyaan spesifik Anda:

Apakah semua pesan SOAP milik WSDL?Tidak, mereka sama sekali tidak sama.

Apakah SOAP merupakan protokol yang menerima 'pesan SOAP' atau 'WSDL-nya sendiri?Tidak - membaca diperlukan karena ini masih jauh.

Jika berbeda, lalu kapan saya harus menggunakan pesan SOAP dan kapan saya harus menggunakan WSDL? Sabun adalah struktur yang Anda terapkan pada pesan / data Anda untuk ditransfer. WSDL digunakan hanya untuk menentukan cara melakukan panggilan ke layanan pada awalnya. Seringkali ini adalah hal satu kali ketika Anda pertama kali menambahkan kode untuk melakukan panggilan ke layanan web tertentu.

Matthew
sumber
Saya bingung apa yang Anda maksud dengan "satu kali" jika Anda bisa menjelaskan dengan beberapa contoh pesan yang akan luar biasa. Juga, jadi Anda mengatakan bahwa pesan WSDL dan SOAP digunakan bersama?
Yakobus
6
WSDL memberi tahu Anda cara memanggil layanan web. Seringkali Anda akan menggunakan WSDL untuk menghasilkan kode secara otomatis untuk memanggil layanan web dan kemudian tidak pernah menggunakannya lagi. Membaca sekilas bab-bab dalam buku yang saya tautkan akan membantu.
Matius
27

WSDL (Web Service Definition Language) adalah file meta-data yang menjelaskan layanan web.

Hal-hal seperti nama operasi, parameter, dll.

Pesan sabun adalah muatan yang sebenarnya

bajingan
sumber
25

Kita perlu mendefinisikan apa itu layanan web sebelum memberi tahu apa perbedaan antara SOAP dan WSDL dimana keduanya (SOAP dan WSDL) adalah komponen dari layanan web

Sebagian besar aplikasi dikembangkan untuk berinteraksi dengan pengguna, pengguna memasukkan atau mencari data melalui antarmuka dan aplikasi kemudian merespons masukan pengguna.

Layanan Web melakukan hal yang kurang lebih sama kecuali bahwa aplikasi layanan Web hanya berkomunikasi dari mesin ke mesin atau aplikasi ke aplikasi. Seringkali tidak ada interaksi pengguna langsung.

Layanan Web pada dasarnya adalah kumpulan protokol terbuka yang digunakan untuk bertukar data antar aplikasi. Penggunaan protokol terbuka memungkinkan layanan Web menjadi platform independen. Perangkat lunak yang ditulis dalam bahasa pemrograman berbeda dan berjalan pada platform berbeda dapat menggunakan layanan Web untuk bertukar data melalui jaringan komputer seperti Internet. Dengan kata lain, aplikasi Windows dapat berkomunikasi dengan PHP, Java dan aplikasi Perl dan banyak lainnya, yang dalam keadaan normal tidak mungkin dilakukan.

Bagaimana Cara Kerja Layanan Web?

Karena aplikasi yang berbeda ditulis dalam bahasa pemrograman yang berbeda, seringkali aplikasi tersebut tidak dapat saling berkomunikasi. Layanan Web memungkinkan komunikasi ini dengan menggunakan kombinasi protokol dan standar terbuka, terutama XML, SOAP, dan WSDL. Layanan Web menggunakan XML untuk menandai data, SOAP untuk mentransfer pesan, dan akhirnya WSDL untuk menjelaskan ketersediaan layanan. Mari kita lihat tiga komponen utama dari aplikasi layanan Web ini.

Simple Object Access Protocol (SOAP)

Simple Object Access Protocol atau SOAP adalah protokol untuk mengirim dan menerima pesan antar aplikasi tanpa menghadapi masalah interoperabilitas (interoperabilitas berarti platform yang menjalankan layanan Web menjadi tidak relevan). Protokol lain yang memiliki fungsi serupa adalah HTTP. Ini digunakan untuk mengakses halaman Web atau menjelajahi Internet. HTTP memastikan bahwa Anda tidak perlu khawatir tentang jenis server Web - apakah Apache atau IIS atau lainnya - yang menyajikan halaman yang Anda lihat atau apakah halaman yang Anda lihat dibuat dalam ASP.NET atau HTML.

Karena SOAP digunakan baik untuk meminta dan menanggapi, isinya sedikit berbeda tergantung pada tujuannya.

Di bawah ini adalah contoh permintaan SOAP dan pesan respons

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

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

Meskipun kedua pesan terlihat sama, metode yang mereka gunakan berbeda. Misalnya dengan melihat contoh di atas, Anda dapat melihat bahwa pesan yang meminta menggunakan GetBookPricemetode untuk mendapatkan harga buku. Respon tersebut dilakukan olehGetBookPriceResponse metode, yang akan menjadi pesan yang akan Anda lihat sebagai "pemohon". Anda juga dapat melihat bahwa pesan disusun menggunakan XML.

Web Services Description Language atau WSDL

WSDL adalah dokumen yang menjelaskan layanan Web dan juga memberi tahu Anda cara mengakses dan menggunakan metodenya.

WSDL menangani bagaimana Anda mengetahui metode apa yang tersedia dalam layanan Web yang Anda temukan di Internet.

Lihat contoh file 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> 

Hal utama yang perlu diingat tentang file WSDL adalah bahwa file tersebut memberi Anda:

  • Penjelasan tentang layanan Web

  • Metode yang digunakan layanan Web dan parameter yang diperlukan

  • Sebuah cara untuk menemukan layanan Web

  • Jad Chahine
    sumber
    Deskripsi beton
    TapanHP
    7

    Analogi yang lebih baik daripada panggilan telepon: Memesan produk melalui surat pos dari layanan pemesanan lewat pos. Dokumen WSDL seperti petunjuk yang menjelaskan cara membuat jenis formulir pemesanan yang akan diterima penyedia layanan. Pesan SOAP seperti amplop dengan desain standar (ukuran, bentuk, konstruksi) yang diketahui oleh setiap kantor pos di seluruh dunia. Anda memasukkan formulir pesanan Anda ke dalam amplop seperti itu. Jaringan (misalnya internet) adalah layanan pos. Anda memasukkan amplop Anda ke dalam pos. Karyawan layanan pos tidak melihat ke dalam amplop. Payload XML adalah formulir pemesanan yang telah Anda lampirkan di amplop. Setelah kantor pos mengirimkan amplop tersebut, penyedia layanan web membuka amplop tersebut dan memproses formulir pemesanan. Jika Anda sudah membuat dan mengisi formulir dengan benar,

    Israel Gale
    sumber
    4

    Secara sederhana jika Anda memiliki layanan web kalkulator. WSDL memberi tahu tentang fungsi yang dapat Anda terapkan atau diekspos ke klien. Misalnya: tambah, hapus, kurangi dan sebagainya. Dimana saat menggunakan SOAP Anda benar-benar melakukan tindakan seperti doDelete (), doSubtract (), doAdd (). Jadi SOAP dan WSDL adalah apel dan jeruk. Kita seharusnya tidak membandingkannya. Keduanya memiliki fungsi yang berbeda.

    Tidak bisa dipecahkan
    sumber
    1

    SOAP: Ini adalah protokol Komunikasi berbasis XML standar terbuka yang digunakan untuk bertukar informasi dari pengguna ke layanan web atau sebaliknya. Sabun hanyalah dokumen di mana data diatur dengan cara tertentu. Untuk setiap permintaan dan tanggapan mungkin ada sabun terpisah.

    WSDL: Pada dasarnya, data diatur dalam beberapa cara dan organisasi ini ditentukan dalam WSDL, Tipe data yang harus digunakan juga ditentukan di sini. Untuk permintaan dan tanggapan, WSDL tunggal akan hadir

    arun kumar
    sumber
    0

    WSDL adalah semacam kontrak antara penyedia API dan klien yang menggambarkan layanan web: fungsi publik, bidang opsional / wajib ...

    Tapi pesan sabun adalah data yang ditransfer antara klien dan penyedia (payload)

    Abderrahim Soubai-Elidrisi
    sumber
    0

    WSDL bertindak sebagai antarmuka antara pengirim dan penerima.
    Pesan SOAP adalah request and response dalam format xml.

    membandingkan dengan java RMI

    WSDL adalah kelas antarmuka
    pesan SOAP adalah pesan permintaan dan respons yang disusun.

    fasil
    sumber
    -1

    Kita dapat menganggap panggilan telepon Dalam Nomor itu wsdl dan pertukaran informasi adalah sabun.

    WSDL adalah deskripsi bagaimana cara terhubung dengan server komunikasi.SOAP adalah pesan komunikasi.

    khushbu
    sumber
    1
    Tidak, nomor telepon akan lebih seperti salah satu titik akhir yang ditentukan di WSDL. Tidak ada padanan nyata dengan WSDL dalam domain panggilan telepon. Yang paling dekat mungkin adalah direktori telepon, terutama jika Anda menyertakan konsep "halaman kuning" yang mengkategorikan bisnis dan memberikan beberapa detail tentang bisnis (bukan hanya nomor telepon).
    John Saunders