SOAP mesajı ile WSDL arasındaki fark nedir?


102

SOAP mesajlarının ve WSDL'nin nasıl bir araya geldiği konusunda kafam karıştı mı? SOAP mesajlarına bakmaya başladım, örneğin:

    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>

Tüm SOAP mesajları WSDL mi? SOAP, kendi 'SOAP mesajlarını' veya 'WSDL'leri kabul eden bir protokol midir? Farklılarsa, SOAP mesajlarını ne zaman kullanmalıyım ve WSDL'leri ne zaman kullanmalıyım?

Bununla ilgili bazı açıklamalar harika olurdu.


1
Bir wsdl, hangi mesajların gönderilebileceğinin ve yanıt olarak nelerin beklenebileceğinin bir özelliğidir. Sabun iletişimi için bir anlamda wsdl belgesi gerekli değildir, ancak protokole göre gerekli bir unsurdur.
troelskn

Yanıtlar:


121

Bir SOAP belgesi istek başına gönderilir. Bir kitapçı olduğumuzu ve belirli bir kitabın geçerli fiyatını öğrenmek için sorguladığımız bir uzak sunucumuz olduğunu varsayalım. Kitabın başlığını, sayfa sayısını ve ISBN numarasını sunucuya iletmemiz gerektiğini varsayalım.

Fiyatı öğrenmek istediğimizde, benzersiz bir SABUN mesajı gönderirdik. Böyle bir şeye benzeyecekti;

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

Ve şöyle bir SOAP yanıt mesajı almayı bekliyoruz;

<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 daha sonra bir sunucu tarafından alındığında bu mesajın nasıl işleneceğini / işleneceğini açıklar. Bizim durumumuzda, Başlık, NumPages ve ISBN'nin ne tür olacağını, GetBookPrice mesajından bir yanıt bekleyip beklemememiz gerektiğini ve bu yanıtın nasıl görünmesi gerektiğini açıklar.

Türler şöyle görünecektir;

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

Ancak WSDL, işlem yapmak için hangi işlevlerin birbirine bağlandığı ve hizmette hangi işlemlerin mevcut olduğu ve hizmete / işlemlere erişebileceğiniz bir ağda nerede olduğu hakkında daha fazla bilgi içerir.

Ayrıca W3 Açıklamalı WSDL Örneklerine bakın


4
Bu satırı "WSDL daha sonra bir sunucu aldığında bu iletinin nasıl işleneceğini / işleneceğini açıklar." Burada bir sorun olduğunu düşünmüyor musun? Bence WSDL, müşterinin müşteriye sunulan hizmetlerin neler olduğunu bilmesi için daha fazla. Sunucuya iletilerin işlenmesine veya işlenmesine rehberlik ettiğini sanmıyorum. Mantıklı mıyım?
Unbreakable

76

SOAP mesajı, verilerinizi iletmek için kullanılan bir XML belgesidir. WSDL, web hizmetinize nasıl bağlanılacağını ve istekte bulunulacağını açıklayan bir XML belgesidir.

Temelde SOAP mesajları ilettiğiniz verilerdir, WSDL size ne yapabileceğinizi ve aramaları nasıl yapacağınızı söyler.

Google'da hızlı bir arama, ek okuma için birçok kaynak sağlayacaktır (önceki kitap bağlantısı artık yok, bununla mücadele etmek için yorumlara yeni öneriler ekleyecektir)

Sadece özel sorularınızı not ederek:

Tüm SOAP mesajları WSDL mi? Hayır, hiç aynı şey değiller.

SOAP, kendi 'SOAP mesajlarını' veya 'WSDL'leri kabul eden bir protokol midir? Hayır - bu çok uzak olduğu için okuma gerekli.

Farklılarsa, SOAP mesajlarını ne zaman kullanmalıyım ve WSDL'leri ne zaman kullanmalıyım?Sabun, aktarım için mesajınıza / verilerinize uyguladığınız yapıdır. WSDL'ler yalnızca, ilk etapta hizmete nasıl çağrı yapılacağını belirlemek için kullanılır. Bu genellikle, belirli bir web hizmetine çağrı yapmak için kodu ilk eklediğinizde tek seferlik bir olaydır.


Harika olacak bazı örnek mesajlarla açıklığa kavuşturabilirseniz "tek seferlik bir şeyle" ne demek istediğinizi kafam karıştı. Ayrıca, WSDL ve SOAP mesajlarının birlikte kullanıldığını mı söylüyorsunuz?
James

6
WSDL, web hizmetini nasıl arayacağınızı anlatır. Web hizmetini aramak için kodu otomatik olarak oluşturmak için WSDL'yi sıklıkla kullanırsınız ve sonra onu bir daha asla kullanmazsınız. Bağladığım kitaptaki bölümleri gözden geçirmek yardımcı olacaktır.
Matthew

27

WSDL (Web Hizmeti Tanım Dili), web hizmetini tanımlayan bir meta veri dosyasıdır.

İşlem adı, parametreler vb. Şeyler

Sabun mesajları gerçek yüklerdir


25

SABUN ile WSDL arasındaki farkın ne olduğunu söylemeden önce, ikisinin (SOAP ve WSDL) bir web hizmetinin bileşenleri olduğu bir web hizmetinin ne olduğunu tanımlamamız gerekir.

Çoğu uygulama, kullanıcılarla etkileşim kurmak için geliştirilir, kullanıcı bir arabirim aracılığıyla verileri girer veya arar ve ardından uygulama kullanıcının girdisine yanıt verir.

Bir Web hizmeti, bir Web hizmeti uygulamasının yalnızca makineden makineye veya uygulamadan uygulamaya iletişim kurması dışında aşağı yukarı aynı şeyi yapar. Genellikle doğrudan kullanıcı etkileşimi yoktur.

Bir Web hizmeti temelde uygulamalar arasında veri alışverişi yapmak için kullanılan açık protokoller koleksiyonudur. Açık protokollerin kullanılması, Web hizmetlerinin platformdan bağımsız olmasını sağlar. Farklı programlama dillerinde yazılan ve farklı platformlarda çalışan yazılımlar, İnternet gibi bilgisayar ağları üzerinden veri alışverişi yapmak için Web hizmetlerini kullanabilir. Başka bir deyişle, Windows uygulamaları PHP, Java ve Perl uygulamalarıyla ve diğer pek çok şeyle konuşabilir ki bu normal koşullarda mümkün olmaz.

Web Hizmetleri Nasıl Çalışır?

Farklı uygulamalar farklı programlama dillerinde yazıldığından, genellikle birbirleriyle iletişim kuramazlar. Bir Web hizmeti, bu iletişimi açık protokoller ve standartlar, özellikle XML, SOAP ve WSDL kombinasyonunu kullanarak sağlar. Bir Web hizmeti, verileri etiketlemek için XML, bir mesajı aktarmak için SOAP ve son olarak hizmetlerin kullanılabilirliğini açıklamak için WSDL kullanır. Bir Web servis uygulamasının bu üç ana bileşenine bir göz atalım.

Basit Nesne Erişim Protokolü (SOAP)

Basit Nesne Erişim Protokolü veya SOAP, birlikte çalışabilirlik sorunlarıyla karşılaşmadan uygulamalar arasında mesaj göndermek ve almak için bir protokoldür (birlikte çalışabilirlik, bir Web hizmetinin üzerinde çalıştığı platformun alakasız hale gelmesi anlamına gelir). Benzer bir işleve sahip başka bir protokol de HTTP'dir. Web sayfalarına erişmek veya İnternet'te gezinmek için kullanılır. HTTP, ne tür bir Web sunucusu (Apache veya IIS veya başka herhangi bir şey) size görüntülediğiniz sayfaları veya görüntülediğiniz sayfaların ASP.NET veya HTML'de oluşturulmuş olup olmadığı konusunda endişelenmenize gerek kalmamasını sağlar.

SABUN hem istemek hem de yanıtlamak için kullanıldığından, içeriği amacına bağlı olarak biraz değişiklik gösterir.

Aşağıda bir SOAP isteği ve yanıt mesajı örneği bulunmaktadır

SABUN İsteği:

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 Yanıtı:

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> 

Her iki mesaj da aynı görünse de farklı yöntemler kullanırlar. Örneğin yukarıdaki örneklere bakarak, talep eden mesajın GetBookPricekitap fiyatını almak için yöntemi kullandığını görebilirsiniz . Yanıt, GetBookPriceResponse"istek sahibi" olarak sizin göreceğiniz mesaj olacak olan yöntem tarafından gerçekleştirilir . Ayrıca mesajların XML kullanılarak oluşturulduğunu da görebilirsiniz.

Web Hizmetleri Açıklama Dili veya WSDL

WSDL, bir Web hizmetini açıklayan ve ayrıca yöntemlerine nasıl erişip kullanacağınızı anlatan bir belgedir.

WSDL, İnternette rastladığınız bir Web hizmetinde hangi yöntemlerin mevcut olduğunu nasıl bileceğinizle ilgilenir.

Örnek bir WSDL dosyasına bir göz atın:

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

Bir WSDL dosyası hakkında hatırlanması gereken ana şeyler, size şunları sağlamasıdır:

  • Bir Web hizmetinin açıklaması

  • Bir Web hizmetinin kullandığı yöntemler ve aldığı parametreler

  • Web hizmetlerini bulmanın bir yolu


  • Somut açıklama
    TapanHP

    7

    Telefon görüşmesinden daha iyi bir benzetme: Postayla sipariş hizmetinden posta yoluyla ürün siparişi. WSDL belgesi, hizmet sağlayıcının kabul edeceği türden sipariş formlarının nasıl oluşturulacağını açıklayan talimatlar gibidir. SABUN mesajı, dünyadaki her postanenin nasıl kullanılacağını bildiği standart bir tasarıma (boyut, şekil, yapı) sahip bir zarf gibidir. Sipariş formunuzu böyle bir zarfa koyuyorsunuz. Ağ (örneğin internet) posta hizmetidir. Zarfınızı postaya koydunuz. Posta servisi çalışanları zarfın içine bakmaz. Yük XML'si, zarfa eklediğiniz sipariş formudur. Postane zarfı teslim ettikten sonra, web servis sağlayıcısı zarfı açar ve sipariş formunu işler. Formu doğru oluşturup doldurduysanız,


    4

    Basit bir ifadeyle, bir web hesap makinesi hizmetiniz varsa. WSDL, uygulayabileceğiniz veya istemciye sunabileceğiniz işlevler hakkında bilgi verir. Örneğin: toplama, silme, çıkarma vb. SOAP kullanırken aslında doDelete (), doSubtract (), doAdd () gibi eylemleri gerçekleştirirsiniz. SoAP ve WSDL elma ve portakaldır. Onları karşılaştırmamalıyız. Her ikisinin de kendi farklı işlevleri vardır.


    1

    SABUN: Kullanıcıdan web servisine veya tersi yönde bilgi alışverişi yapmak için kullanılan açık standart XML tabanlı bir İletişim protokolüdür. Sabun, verilerin bir şekilde düzenlendiği belgedir. Her istek ve yanıt için ayrı sabun mevcut olabilir.

    WSDL: Sabunda veriler bir şekilde düzenlenmiştir ve bu organizasyon WSDL'de belirtilmiştir, Kullanılması gereken veri türü de burada belirtilmiştir. İstek ve yanıt için tek WSDL mevcut olacak


    0

    WSDL, API sağlayıcısı ile istemci arasındaki bir tür sözleşmedir ve web hizmetini açıklar: genel işlev, isteğe bağlı / zorunlu alan ...

    Ancak sabun mesajı, müşteri ve sağlayıcı arasında aktarılan bir veridir (yük)


    0

    WSDL, gönderen ve alıcı arasında bir arayüz görevi görür.
    SOAP mesajı xml formatında istek ve yanıttır.

    java RMI ile karşılaştırma

    WSDL arabirim sınıfı
    SOAP mesajı, sıraya konulmuş istek ve yanıt mesajıdır.


    -1

    Bir telefon görüşmesini düşünebiliriz Bu Numarada wsdl ve bilgi alışverişi sabundur.

    WSDL, iletişim sunucusuna nasıl bağlanılacağının açıklamasıdır.SOAP, iletişim mesajlarına sahiptir.


    1
    Hayır, telefon numarası WSDL'de tanımlanan uç noktalardan biri gibi olacaktır. Telefon görüşmeleri alanında WSDL'nin gerçek bir eşdeğeri yoktur. En yakını bir telefon rehberi olabilir, özellikle işletmeleri kategorize eden ve işletme hakkında bazı ayrıntılar (sadece telefon numarası değil) sağlayan bir "sarı sayfalar" konseptini eklerseniz.
    John Saunders
    Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
    Licensed under cc by-sa 3.0 with attribution required.