Webprogram Beskrivelse Språk - Web Application Description Language

The Web Application Description Language ( WADL ) er en maskinlesbar XML beskrivelse av HTTP -baserte webtjenester . WADL modellerer ressursene fra en tjeneste og forholdet mellom dem. WADL er ment å forenkle gjenbruk av webtjenester som er basert på den eksisterende HTTP -arkitekturen på nettet. Det er plattform- og språkuavhengig og har som mål å fremme gjenbruk av applikasjoner utover grunnleggende bruk i en nettleser.

WADL ble sendt til World Wide Web Consortium av Sun Microsystems 31. august 2009, men konsortiet har ingen nåværende planer om å standardisere det. WADL er REST tilsvarer SOAP 's wsdl (WSDL), som også kan brukes til å beskrive REST webtjenester.

Format

Tjenesten er beskrevet ved hjelp av et sett med ressurselementer . Hver ressurs inneholder param elementer for å beskrive de innganger og metode elementer som beskriver forespørselen og reaksjon av en ressurs. De forespørsel elementet angir hvordan å representere inngangen, hvilke typer er nødvendig og eventuelle spesifikke HTTP-hoder som kreves. Den responsen beskriver representasjon av tjenesten respons, samt eventuelle feil opplysninger, for å håndtere feil.

Eksempel

Følgende oppføring viser et eksempel på en WADL -beskrivelse for Yahoo News Search -programmet.

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

Generer WADL eller generer kode fra WADL

Java

Det er flere verktøy for å generere java -kode fra en eksisterende WADL:

Eksempel WADL Generert av 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>

Se også

Referanser

Eksterne linker