Articulo de referencia

Lenguaje de descripción de aplicaciones web

El Lenguaje de Descripción de Aplicaciones Web ( WADL ) es una descripción XML legible por máquina de servicios web basados ​​en HTTP . [ 1 ] WADL modela los recursos proporcion...

El Lenguaje de Descripción de Aplicaciones Web ( WADL ) es una descripción XML legible por máquina de servicios web basados ​​en HTTP . [ 1 ] WADL modela los recursos proporcionados por un servicio y las relaciones entre ellos. [ 1 ] WADL tiene como objetivo simplificar la reutilización de servicios web que se basan en la arquitectura HTTP existente de la Web. [ 1 ] [ 2 ] Es independiente de la plataforma y del lenguaje y tiene como objetivo promover la reutilización de aplicaciones más allá del uso básico en un navegador web . [ 1 ] WADL fue presentado al Consorcio World Wide Web por Sun Microsystems el 31 de agosto de 2009 [ 1 ] , pero el consorcio no tiene planes actuales para estandarizarlo [ 2 ] . WADL es el equivalente REST de los Lenguajes de Descripción de Servicios Web (WSDL) de SOAP , que también se pueden usar para describir servicios web REST . [ 3 ]

Formato

El servicio se describe mediante un conjunto de elementos de recurso . Cada recurso contiene elementos de parámetro para describir las entradas y elementos de método que describen la solicitud y la respuesta del recurso. El elemento de solicitud especifica cómo representar la entrada, qué tipos se requieren y cualquier encabezado HTTP específico que sea necesario. La respuesta describe la representación de la respuesta del servicio, así como cualquier información de error para gestionar los fallos.

Ejemplo

El siguiente listado muestra un ejemplo de descripción WADL para la aplicación 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>

Generar WADL o generar código a partir de WADL.

Java

Existen varias herramientas para generar código Java a partir de un WADL existente: [ 4 ] [ 5 ]

Ejemplo de WADL generado por 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:cadena" /> <xs:element minOccurs= "0" name= "paymentNotificationEndpointAddress" type= "xs:string" /> <xs:element minOccurs= "0" name= "pseCustomerId" type= "xs:string" /> <xs:element minOccurs=<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" nombre= "descripción" tipo= "xs:cadena" /> <xs:elemento minOccurs= "0" nombre= "customerName" tipo= "xs:string" /> <xs:element minOccurs= "0" nombre= "resourceURL" tipo= "xs:string" /> <xs:element minOccurs= "0" nombre= "serviceContractName" tipo= "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:cadena" /> </request> <respuesta> <representación mediaType= "app/json" /> </respuesta> </método > <método nombre= "POST" > <request> <representación mediaType= "app/json" /> </request> <respuesta> <representación mediaType= "app/json" /> </respuesta> < /método> <método nombre= "PUT" > <request></request> <respuesta> <representación mediaType= "app/json" /> </respuesta> </método> </resource> < resource ruta= "/{customerUserName}" > <método nombre= "DELETE" > <request></request> <respuesta> <representación mediaType= "app/json" /> </respuesta> </método> </resource> < resource ruta= "/{customerUserName}" > <param nombre= "customerUserName" estilo= <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> < ruta del recurso="/{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" /> </respuesta> </método> </recurso> </recurso> </recursos> </aplicación>

Véase también

Referencias

  1. 1 2 3 4 5 Sun Microsystems (31 de agosto de 2009). "Web Application Description Language: W3C Member Submission 31 de agosto de 2009" . World Wide Web Consortium . Recuperado el 12 de agosto de 2012 .
  2. 1 2 Consorcio World Wide Web (14 de octubre de 2009). "Comentario del equipo sobre la presentación del "Lenguaje de descripción de aplicaciones web" . Consorcio World Wide Web . Recuperado el 12 de agosto de 2012 .
  3. Lawrence Mandel (29 de mayo de 2008). "Describir servicios web REST con WSDL 2.0: una guía práctica" . IBM . Consultado el 12 de agosto de 2012 .
  4. Proyecto WADL de GitHub
  5. Apache CXF
  • Página principal de WADL en GitHub
  • Especificación actual para WADL archivada el 22/07/2011 en la Wayback Machine.
  • Carlyle, Benjamin. "WADL para SOA estilo REST" (31 de agosto de 2009) . soundadvice.id.au . Consultado el 9 de septiembre de 2021 .