Web Application Description Language
WADL ( Web Application Description Language) är en maskinläsbar XML - beskrivning av HTTP -baserade webbtjänster . WADL modellerar resurserna som tillhandahålls av en tjänst och relationerna mellan dem. WADL är avsett att förenkla återanvändningen av webbtjänster som är baserade på webbens befintliga HTTP-arkitektur. Det är plattforms- och språkoberoende och syftar till att främja återanvändning av applikationer utöver den grundläggande användningen i en webbläsare. WADL skickades till World Wide Web Consortium av Sun Microsystems den 31 augusti 2009, men konsortiet har inga aktuella planer på att standardisera det. WADL är REST- motsvarigheten till SOAP: s Web Services Description Language (WSDL), som också kan användas för att beskriva REST -webbtjänster.
Formatera
Tjänsten beskrivs med hjälp av en uppsättning resurselement . Varje resurs innehåller param -element för att beskriva indata, och metodelement som beskriver begäran och svar från en resurs. Begäranelementet anger hur indata ska representeras, vilka typer som krävs och eventuella specifika HTTP-rubriker som krävs . Svaret beskriver representationen av tjänstens svar, samt eventuell felinformation, för att hantera fel .
Exempel
Följande lista visar ett exempel på en WADL-beskrivning för Yahoo News Search-applikationen.
<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> <resurser base= "http://api.search.yahoo.com/NewsSearchService/V1/" > <resurssökväg = "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 = "typ" style= "query" default= "alla" > <option value= "alla" /> <option value= "alla" /> <option value= "fras" /> </param> <param name= "results" style= "query" type= "xsd:int" default= "10" /> <param name= "start" style= "query" type= "xsd:int" default= "1" /> <param name= "sortera" 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>
Generera WADL eller generera kod från WADL
Java
Det finns flera verktyg för att generera java-kod från en befintlig WADL:
- Apache CXF
- Java API för RESTful Web Services och dess referensimplementering, Jersey
Exempel WADL Genererad 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" namn = "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= "/" > <metodnamn = "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" stil = "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}" > <metodnamn = "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> </metod> < 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> </metod> < /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" /> <metodnamn = "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> </metod > </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" /> < /respons> </method> </resource> <resource path= "/{customerUserName}/apps/{appName}" > <method name= "PUT" > <request></request> <response> <representation mediaType= "app/json" /> </response> </method> </resource> </resource> </resources> </app>
Se även
externa länkar
- WADL hemsida på github
- Aktuell specifikation för WADL
- Carlyle, Benjamin. "WADL för REST-stil SOA" ( 2009-08-31) . soundadvice.id.au . Hämtad 9 september 2021 .