Limba de descriere a aplicației web - Web Application Description Language

Descriere Web Application Language ( WADL ) este o mașină care poate fi citit XML descriere HTTP bazate pe servicii web . WADL modelează resursele furnizate de un serviciu și relațiile dintre acestea. WADL este destinat să simplifice reutilizarea serviciilor web care se bazează pe arhitectura HTTP existentă a Web-ului. Este independent de platformă și limbă și își propune să promoveze refolosirea aplicațiilor dincolo de utilizarea de bază într-un browser web.

WADL a fost prezentat consorțiului World Wide Web de Sun Microsystems la 31 august 2009, dar consorțiul nu are planuri actuale de standardizare. WADL este REST echivalentul SOAP e Web Services Description Language (WSDL), care poate fi de asemenea folosit pentru a descrie REST servicii web.

Format

Serviciul este descris folosind un set de elemente de resurse . Fiecare resursă conține elemente param pentru a descrie intrările și elemente de metodă care descriu solicitarea și răspunsul unei resurse. Elementul de solicitare specifică modul de reprezentare a intrării, ce tipuri sunt necesare și orice anteturi HTTP specifice care sunt necesare. Răspunsul descrie reprezentarea răspunsului serviciului, precum și orice informație de eroare, pentru a face față cu erori.

Exemplu

Următoarea listă prezintă un exemplu de descriere WADL pentru aplicația Yahoo News Search.

 <application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://wadl.dev.java.net/2009/02 wadl.xsd" 
  xmlns:tns="urn:yahoo:yn" xmlns:yn="urn:yahoo:yn" xmlns:ya="urn:yahoo:api"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://wadl.dev.java.net/2009/02"> 
   <grammars> 
     <include href="NewsSearchResponse.xsd"/> 
     <include href="Error.xsd"/> 
   </grammars> 
 
   <resources base="http://api.search.yahoo.com/NewsSearchService/V1/"> 
     <resource path="newsSearch"> 
       <method name="GET" id="search"> 
         <request> 
           <param name="appid" type="xsd:string" style="query" required="true"/> 
           <param name="query" type="xsd:string" style="query" required="true"/> 
           <param name="type" style="query" default="all"> 
             <option value="all"/> 
             <option value="any"/> 
             <option value="phrase"/> 
           </param> 
           <param name="results" style="query" type="xsd:int" default="10"/> 
           <param name="start" style="query" type="xsd:int" default="1"/> 
           <param name="sort" style="query" default="rank"> 
             <option value="rank"/> 
             <option value="date"/> 
           </param> 
           <param name="language" style="query" type="xsd:string"/> 
         </request> 
         <response status="200"> 
           <representation mediaType="application/xml" element="yn:ResultSet"/> 
         </response> 
         <response status="400"> 
           <representation mediaType="application/xml" element="ya:Error"/> 
         </response> 
       </method> 
     </resource> 
   </resources>
 </application>

Generați WADL sau generați cod din WADL

Java

Există mai multe instrumente pentru a genera cod Java dintr-un WADL existent:

Exemplu WADL generat de CXF

<app xmlns="http://research.sun.com/wadl/2006/10" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <grammars>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified"
               elementFormDefault="unqualified">
      <xs:element name="appProfile" type="appProfile"/>
      <xs:element name="customerProfile" type="customerProfile"/>
      <xs:complexType name="customerProfile">
        <xs:sequence>
          <xs:element minOccurs="0" name="accessPaymentServicesEnabled" type="xs:boolean"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="attributes" nillable="true" type="attribute"/>
          <xs:element minOccurs="0" name="billingType" type="xs:string"/>
          <xs:element minOccurs="0" name="defaultCurrency" type="xs:string"/>
          <xs:element minOccurs="0" name="defaultSpendingLimitCurrency" type="xs:string"/>
          <xs:element minOccurs="0" name="maximumSpendingLimit" type="xs:double"/>
          <xs:element minOccurs="0" name="minimumSpendingLimit" type="xs:double"/>
          <xs:element minOccurs="0" name="customerCategory" type="xs:string"/>
          <xs:element minOccurs="0" name="customerEnabled" type="xs:boolean"/>
          <xs:element minOccurs="0" name="customerName" type="xs:string"/>
          <xs:element minOccurs="0" name="paymentNotificationEndpointAddress" type="xs:string"/>
          <xs:element minOccurs="0" name="pseCustomerId" type="xs:string"/>
          <xs:element minOccurs="0" name="resourceURL" type="xs:string"/>
          <xs:element minOccurs="0" name="settlementContractUuid" type="xs:string"/>
          <xs:element minOccurs="0" name="isSpendingLimitEnabled" type="xs:boolean"/>
          <xs:element minOccurs="0" name="abcCustomerId" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="attribute">
        <xs:sequence>
          <xs:element minOccurs="0" name="key" type="xs:string"/>
          <xs:element minOccurs="0" name="value" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="appProfile">
        <xs:sequence>
          <xs:element minOccurs="0" name="appEnabled" type="xs:boolean"/>
          <xs:element minOccurs="0" name="appName" type="xs:string"/>
          <xs:element minOccurs="0" name="appPassword" type="xs:string"/>
          <xs:element minOccurs="0" name="appUserName" type="xs:string"/>
          <xs:element minOccurs="0" name="appUuid" type="xs:string"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="attributes" nillable="true" type="attribute"/>
          <xs:element minOccurs="0" name="description" type="xs:string"/>
          <xs:element minOccurs="0" name="customerName" type="xs:string"/>
          <xs:element minOccurs="0" name="resourceURL" type="xs:string"/>
          <xs:element minOccurs="0" name="serviceContractName" type="xs:string"/>
          <xs:element minOccurs="0" name="abcAppId" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
  </grammars>
  <resources base="http://mpsamara-mobl-vm1:9078/customermanagement/v1">
    <resource path="/customers">
      <resource path="/">
        <method name="DELETE">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
        <method name="GET">
          <request>
            <param name="page" style="query" type="xs:int"/>
            <param name="partialCustomerName" style="query" type="xs:string"/>
          </request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
        <method name="POST">
          <request>
            <representation mediaType="app/json"/>
          </request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
        <method name="PUT">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}">
        <method name="DELETE">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}">
        <param name="customerUserName" style="template" type="xs:string"/>
        <method name="GET">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
        <method name="POST">
          <request>
            <representation mediaType="app/json"/>
          </request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}">
        <method name="PUT">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}/apps">
        <method name="DELETE">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}/apps">
        <param name="customerUserName" style="template" type="xs:string"/>
        <method name="GET">
          <request>
            <param name="page" style="query" type="xs:int"/>
          </request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
        <method name="POST">
          <request>
            <representation mediaType="app/json"/>
          </request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}/apps">
        <method name="PUT">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}/apps/{appName}">
        <method name="DELETE">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}/apps/{appName}">
        <param name="customerUserName" style="template" type="xs:string"/>
        <param name="appName" style="template" type="xs:string"/>
        <method name="GET">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
        <method name="POST">
          <request>
            <representation mediaType="app/json"/>
          </request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
      <resource path="/{customerUserName}/apps/{appName}">
        <method name="PUT">
          <request></request>
          <response>
            <representation mediaType="app/json"/>
          </response>
        </method>
      </resource>
    </resource>
  </resources>
</app>

Vezi si

Referințe

linkuri externe