Die Web Application Description Language ( WADL ) ist eine maschinenlesbare XML- Beschreibung von HTTP -basierten Webdiensten . [ 1 ] WADL modelliert die von einem Dienst bereitgestellten Ressourcen und die Beziehungen zwischen ihnen. [ 1 ] WADL soll die Wiederverwendung von Webdiensten vereinfachen, die auf der bestehenden HTTP-Architektur des Webs basieren. [ 1 ] [ 2 ] Sie ist plattform- und sprachunabhängig und zielt darauf ab, die Wiederverwendung von Anwendungen über die grundlegende Nutzung in einem Webbrowser hinaus zu fördern . [ 1 ] WADL wurde am 31. August 2009 von Sun Microsystems beim World Wide Web Consortium eingereicht [ 1 ] , das Konsortium plant jedoch derzeit keine Standardisierung . [ 2 ] WADL ist das REST- Äquivalent der Web Services Description Languages (WSDL) von SOAP , die ebenfalls zur Beschreibung von REST- Webdiensten verwendet werden können . [ 3 ]
Format
Der Dienst wird mithilfe von Ressourcenelementen beschrieben . Jede Ressource enthält Parameterelemente zur Beschreibung der Eingaben sowie Methodenelemente , die Anfrage und Antwort der Ressource beschreiben. Das Anfrageelement legt fest, wie die Eingabe dargestellt wird, welche Datentypen erforderlich sind und welche HTTP-Header benötigt werden. Das Antwortelement beschreibt die Darstellung der Dienstantwort sowie etwaige Fehlerinformationen zur Fehlerbehebung.
Beispiel
Die folgende Auflistung zeigt ein Beispiel für eine WADL-Beschreibung für die Yahoo News Search-Anwendung.
<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>WADL generieren oder Code aus WADL generieren
Java
Es gibt mehrere Tools, um Java-Code aus einer bestehenden WADL zu generieren: [ 4 ] [ 5 ]
- Apache CXF
- Java-API für RESTful Web Services und ihre Referenzimplementierung , Jersey
Beispiel einer von CXF generierten WADL-Datei
<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}"><paramname="customerUserName"style="template"type="xs:string"/><paramname="appName"style="template"type="xs:string"/><methodname="GET"><request></request><response><representationmediaType="app/json"/></response></method><methodname="POST"><request><representationmediaType="app/json"/></request><response><representationmediaType="app/json"/></response></method></resource><resourcepath="/{customerUserName}/apps/{appName}"><methodname="PUT"><request></request><response><representationmediaType="app/json"/></response></method></resource></resource></resources></app>See also
References
- ^ abcdeSun Microsystems (31 August 2009). "Web Application Description Language: W3C Member Submission 31 August 2009". World Wide Web Consortium. Retrieved 12 August 2012.
- ^ abWorld Wide Web Consortium (14 October 2009). "Team Comment on the "Web Application Description Language" Submission". World Wide Web Consortium. Retrieved 12 August 2012.
- ^Lawrence Mandel (29 May 2008). "Describe REST Web services with WSDL 2.0: A how-to guide". IBM. Retrieved 12 August 2012.
- ^github WADL project
- ^Apache CXF
External links
- WADL home page on github
- Aktuelle Spezifikation für WADL ( Archiviert am 22.07.2011 im Internet Archive)
- Carlyle, Benjamin. „WADL für REST-basierte SOA“ (31.08.2009) . soundadvice.id.au . Abgerufen am 9. September 2021 .