Jump to content

Язык описания веб-приложения

Язык описания веб-приложений ( 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]

Пример 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>

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б с д и Sun Microsystems (31 августа 2009 г.). «Язык описания веб-приложения: представление участника W3C 31 августа 2009 г.» . Консорциум Всемирной паутины . Проверено 12 августа 2012 г.
  2. ^ Перейти обратно: а б Консорциум Всемирной паутины (14 октября 2009 г.). «Комментарий группы к представлению «Язык описания веб-приложений»» . Консорциум Всемирной паутины . Проверено 12 августа 2012 г.
  3. ^ Лоуренс Мандель (29 мая 2008 г.). «Описание веб-служб REST с помощью WSDL 2.0: практическое руководство» . ИБМ . Проверено 12 августа 2012 г.
  4. ^ проект GitHub WADL
  5. ^ Апач CXF
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fdffe638b9facafeb0c228d8978a56cf__1647945060
URL1:https://arc.ask3.ru/arc/aa/fd/cf/fdffe638b9facafeb0c228d8978a56cf.html
Заголовок, (Title) документа по адресу, URL1:
Web Application Description Language - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)