Язык описания веб-приложения
Язык описания веб-приложений ( 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">
<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 или сгенерировать код из 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" 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>
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и 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 г.