Язык описания веб-приложения
Язык описания веб-приложений ( WADL ) — это машиночитаемое XML- описание HTTP на основе веб-служб . [1] WADL моделирует ресурсы, предоставляемые службой, и отношения между ними. [1] WADL предназначен для упрощения повторного использования веб-сервисов, основанных на существующей HTTP-архитектуре Интернета. [1] [2] Он не зависит от платформы и языка и направлен на содействие повторному использованию приложений, выходящему за рамки базового использования в веб-браузере. [1] WADL был представлен Консорциуму World Wide Web компанией Sun Microsystems 31 августа 2009 г. [1] , но у консорциума в настоящее время нет планов по его стандартизации. [2] . WADL — это REST- эквивалент ( SOAP языка описания веб-служб WSDL), который также можно использовать для описания веб-служб REST . [3]
Формат
[ редактировать ]Сервис описывается с использованием набора ресурсных элементов. Каждый ресурс содержит элементы param для описания входных данных и элементы метода , которые описывают запрос и ответ ресурса. Элемент запроса определяет, как представлять входные данные, какие типы требуются и какие конкретные HTTP-заголовки необходимы. Ответ . описывает представление ответа службы, а также любую информацию об ошибках, необходимую для устранения ошибок
Пример
[ редактировать ]В следующем листинге показан пример описания WADL для приложения 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" > <имя метода = "GET" id= "search" > <request> <param name= " appid" type= "xsd:string" style= "query" требуется= "true" /> < имя параметра= "query" type= "xsd:string" style= "query" требуется= "true" /> < имя параметра = "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» /> < имя параметра= «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" тип = "xsd: строка" /> </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 или сгенерировать код из WADL
[ редактировать ]Ява
[ редактировать ]Существует несколько инструментов для генерации Java-кода из существующего WADL: [4] [5]
- Апач CXF
- Java API для веб-служб RESTful и его эталонная реализация, Джерси
Пример WADL, созданного 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" атрибутFormDefault= "неквалифицированный" elementFormDefault= "неквалифицированный" > <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= "неограниченный" 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= "payNotificationEndpointAddress" 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= "/" > метода < имя = "DELETE" > <request></request> <response> <representation mediaType= "app/json " /> </response> </method> <имя метода = "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> <имя метода = "POST" > <request > <representation mediaType= "app/json" /> </request> <ответ> <representation mediaType= "app/json" /> </response> </method> <method name= "PUT" > <request></request> <response> <representation mediaType= "app/json" /> </ ответ> </method> </resource> <resource path= "/{customerUserName}" > метода < имя = "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> <имя метода = "POST" > <request> <representation mediaType= "app/json " /> </request> <response> <representation mediaType= "app/json" /> </response> </method> </resource> <resource path= "/{customerUserName}" > метода < имя = "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" > < имя параметра = "customerUserName" style = "template" type = "xs:string" /> <имя метода = "GET" > <запрос> <имя параметра = "страница" style= "query" type= "xs:int" /> </request> <response> <representation mediaType= "app/json" /> </response> </method> <имя метода = "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" /> метода < имя = "GET" > <request></request> <response> <representation mediaType= "app/json" /> </response> </method> <метод name= "POST" > <request> <representation mediaType= "app/json" /> </request> <response> <representation mediaType= "app/json" /> </response> </method> </resource> <resource path= "/{customerUserName}/apps/{appName}" > метода < имя = "PUT" > <request></request> <response> <representation mediaType= "app/json" /> </response> </method> </resource> </resource> </resources> </app>
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и Sun Microsystems (31 августа 2009 г.). «Язык описания веб-приложения: представление участника W3C 31 августа 2009 г.» . Консорциум Всемирной паутины . Проверено 12 августа 2012 г.
- ^ Перейти обратно: а б Консорциум Всемирной паутины (14 октября 2009 г.). «Комментарий группы к представлению «Язык описания веб-приложений»» . Консорциум Всемирной паутины . Проверено 12 августа 2012 г.
- ^ Лоуренс Мандель (29 мая 2008 г.). «Описание веб-служб REST с помощью WSDL 2.0: практическое руководство» . ИБМ . Проверено 12 августа 2012 г.
- ^ проект GitHub WADL
- ^ Апач CXF
Внешние ссылки
[ редактировать ]- Домашняя страница WADL на github
- Текущая спецификация WADL
- Карлайл, Бенджамин. «WADL для SOA в стиле REST» (31 августа 2009 г.) . soundadvice.id.au . Проверено 9 сентября 2021 г.