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:
- Apache CXF
- API Java pentru RESTful Web Services și implementarea sa de referință, Jersey
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
- Prezentare generală a limbilor de descriere API RESTful
- Specificație OpenAPI (Swagger)
- RAML (software)
Referințe
linkuri externe
- Pagina principală WADL pe github
- Specificații actuale pentru WADL
- Carlyle, Benjamin. „WADL pentru SOA în stil REST” (31.08.2009) . soundadvice.id.au . Adus la 9 septembrie 2021 .