Limbajul de descriere a serviciilor web

Limbajul de descriere a serviciilor web
Captură de ecran
Extensie fișier : .wsdl
Tip MIME : application / wsdl + xml
Dezvoltat de: Consorțiul World Wide Web
Container pentru: XML
Standard (e) : W3C WSDL 1.1
W3C WSDL 2.0



Web Services Description Language ( WSDL ) este o platformă, limbaj de programare și de protocol independent de descriere limbaj pentru servicii de rețea ( servicii web ) pentru schimbul de mesaje pe baza XML . WSDL este un standard industrial al World Wide Web Consortium (W3C).

Conţinut

WSDL este un limbaj metalic care poate fi utilizat pentru a descrie funcțiile, datele, tipurile de date și protocoalele de schimb oferite de un serviciu web . În esență, definește operațiunile accesibile din exterior, precum și parametrii și valorile returnate ale acestor operații. În detaliu, un document WSDL conține informații funcționale despre:

  • interfața
  • Jurnal de acces și detalii de implementare
  • Toate informațiile necesare pentru a accesa serviciul, în format care poate fi citit de mașină

Cu toate acestea, nu include:

Elemente descriptive

Structura unui fișier WSDL

Serviciile sunt definite de șase elemente XML principale:

tipuri ( tipuri de date )
Definiția tipurilor de date care sunt utilizate pentru schimbul de mesaje .
mesaj (mesaj)
Definiții abstracte ale datelor transmise, constând din mai multe părți logice, fiecare dintre ele fiind legată de o definiție într-un sistem de tipuri de date.
portType ( tipuri de interfață)
Un set de operații abstracte (patru tipuri de mesaje schimbate):
  • O modalitate: serviciul primește un mesaj de intrare de la client.
  • Solicitare-răspuns: Serviciul primește o cerere (mesaj de intrare) de la client și trimite un răspuns (mesaj de ieșire).
  • Solicit-response: Serviciul trimite un mesaj și așteaptă un răspuns de la client.
  • Notificare: Serviciul trimite un mesaj de ieșire.
În WSDL 2.0 numele a fost schimbat în Interfață.
obligatoriu (obligatoriu)
Determină protocolul specific și formatul de date pentru pașii de lucru și mesajele date de un anumit tip de port.
port (port)
Specifică o adresă pentru o legare, adică o interfață de comunicație, de obicei un URI . În WSDL 2.0 numele a fost schimbat în Endpoint.
service (service)
Rezumă setul de porturi de tip port.

În plus, aceste șase elemente principale sunt împărțite în grupul de definiții abstracte și concrete.

Definiții abstracte:

  • Tipuri
  • Mesaje
  • PortTypes (din WSDL 2.0: Interfețe)

Definiții concrete:

  • Legături
  • Porturi (din WSDL 2.0: Endpoints)
  • Servicii

Definiția conținutului concret distinge WSDL de limbile de descriere a interfeței existente, cum ar fi IDL . Până acum, acestea descriseră doar interfețele în mod abstract.

cerere

WSDL este adesea utilizat în combinație cu SOAP și schema XML pentru a oferi servicii web pe Internet. Un client care apelează un serviciu web poate citi WSDL pentru a determina ce funcții sunt disponibile pe server. Toate tipurile speciale de date utilizate sunt incluse în fișierul WSDL în formă XML. Codul sursă care este necesar pentru asamblarea obiectelor trimise pe partea clientului poate fi generat automat din fișierul WSDL. Clientul poate folosi acum SOAP pentru a apela în cele din urmă o funcție listată în WSDL.

Exemplu de aplicație

Un exemplu este destinat să ilustreze modul în care secțiunile individuale ale unui document WSDL sunt legate între ele. În acest exemplu, este implementat un serviciu care, după primirea unui nume de acțiune, returnează valoarea de tranzacționare curentă a acestei acțiuni.

 <definitions name="StockQuote"
          targetNamespace="http://example.com/stockquote.wsdl"
          xmlns:tns="http://example.com/stockquote.wsdl"
          xmlns:xsd1="http://example.com/stockquote.xsd"
          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
          xmlns="http://schemas.xmlsoap.org/wsdl/">

    <types>
       <schema targetNamespace="http://example.com/stockquote.xsd"
              xmlns="http://www.w3.org/2001/XMLSchema">
           <element name="TradePriceRequest">
              <complexType>
                  <all>
                      <element name="tickerSymbol" type="string"/>
                  </all>
              </complexType>
           </element>
           <element name="TradePrice">
              <complexType>
                  <all>
                      <element name="price" type="float"/>
                  </all>
              </complexType>
           </element>
       </schema>
    </types>

    <message name="GetLastTradePriceInput">
        <part name="body" element="xsd1:TradePriceRequest"/>
    </message>

    <message name="GetLastTradePriceOutput">
        <part name="body" element="xsd1:TradePrice"/>
    </message>

    <portType name="StockQuotePortType">
        <operation name="GetLastTradePrice">
           <input message="tns:GetLastTradePriceInput"/>
           <output message="tns:GetLastTradePriceOutput"/>
        </operation>
    </portType>

    <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="GetLastTradePrice">
           <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
           <input>
               <soap:body use="literal"/>
           </input>
           <output>
               <soap:body use="literal"/>
           </output>
        </operation>
    </binding>

    <service name="StockQuoteService">
        <documentation>My first service</documentation>
        <port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
           <soap:address location="http://example.com/stockquote"/>
        </port>
    </service>

 </definitions>

Explicaţie

O funcție „GetLastTradePrice” este definită de elementul din <operation>interior <portType>, care primește date de intrare („input”) și returnează date de ieșire („output”). Datele de intrare este numele acțiunii, datele de ieșire reprezintă valoarea acțiunii. Ordinea elementelor <input> și <output> determină faptul că această operațiune ar trebui să devină o operație cerere-răspuns. Dacă modificați ordinea (de exemplu, mai întâi <output> apoi <input>) sau dacă lăsați unul dintre cele două elemente, se modifică și „Modelul de schimb de mesaje (MEP)”. Aceasta permite z. De exemplu, puteți defini și operații care emit doar o cerere și nu așteaptă un răspuns.

În calitate de programator, trebuie totuși să determinați ce parametri sunt așteptați pentru intrare și ieșire. Acest lucru se face prin intermediul <message>elementului. În exemplul nostru, mesajul „GetLastTradePriceInput” este menționat în operațiunea „GetLastTradePriceInput” din eticheta <input>.

În <message>element, parametrii individuali sunt combinați într-un grup, astfel încât să fie disponibili pentru mai multe operații. În exemplul nostru, elementul de mesaj „GetLastTradePriceInput” are un singur parametru <part>, care este de tipul „TradePriceRequest”. Prin urmare, operațiunea „GetLastTradePrice” necesită doar un parametru. Dacă în mesajul „GetLastTradePriceInput” ar fi de ex. Dacă, de exemplu, este definit un alt parametru pentru bursă, operațiunea noastră ar necesita 2 parametri în consecință. Ca și în cazul unei funcții, puteți forța introducerea acestor parametri cu use="required"sau use="optional"manipula opțional.

Acum tipurile (șir, număr întreg, tip propriu) trebuie definite pentru parametri. Tipurile sunt definite separat în cadrul <types>..</types>etichetelor. Tipurile de date simple și complexe pot fi definite în conformitate cu XSD . „TradePriceRequest” este un tip de date complex care așteaptă un șir de caractere („(caractere) șir”). Probabil că un tip complex a fost definit aici din motive de extindere, deși un simplu șir de caractere de tip de date ar fi fost suficient.

Între <binding>..</binding>formatul mesajului și protocolul este definit. Protocolul este specificat în atributul „transport”, care în exemplul nostru este SOAP . De asemenea, puteți specifica dacă mesajul trebuie trimis în „stil rpc” sau „stil document” și cum ar trebui codate intrarea și ieșirea. Cu „stilul documentului”, numai datele sunt trimise către serviciul responsabil („serviciu”), în timp ce cu „stilul rpc” se trimite o anumită metodă, inclusiv parametrii săi, care urmează să fie apelată la punctul final.

În element <service>, un punct final "(port)" este prin intermediul unei legături legate de operațiunile noastre și setează adresa la care poate ajunge acest port .

Etapă de dezvoltare

La 15 martie 2001, World Wide Web Consortium a publicat Nota Serviciului de descriere a limbii web (WSDL) Note Versiunea 1.1. Versiunea 2.0 a fost publicată pe 26 iunie 2007, care este împărțită în două părți pentru definiția limbajului („Core Language”) și completări („Adjuncts”).

Extensii și delimitare la alte evoluții

WSDL specifică doar elementele sintactice ale unui serviciu web, i. H. modul în care un client poate accesa serviciul web corespunzător. Orice alte specificații semantice ale unui serviciu web sunt deseori de dorit; Informații despre timpul de răspuns, costurile unui serviciu, reglementările de securitate și specificații mai precise ale efectelor unei operațiuni sunt necesare în special pentru descoperirea și orchestrarea automată a serviciilor. Pentru a descrie acești parametri, există extensii la WSDL, cum ar fi WSDL-S sau WSLA , pe de o parte, și dezvoltări precum OWL-S sau WSMO , care definesc ontologiile pentru descrierea semantică a serviciilor web. Aceste ontologii sunt mult mai puternice atunci când descriu serviciile web, dar sunt în mod corespunzător complexe. În OGSA (Open Grid Services Architecture), o descriere standard pentru serviciile de rețea , GWSDL (Grid-Extended WSDL) este definit ca o extensie care permite adăugarea stării formalizate a serviciului (adică starea instanțelor de serviciu) la definiția interfeței .

Vezi si

Link-uri web