لغة وصف تطبيقات الويب

لغة وصف تطبيقات الويب ( WADL ) هي وصف XML قابل للقراءة آليًا لخدمات الويب القائمة على بروتوكول HTTP . [ 1 ] تُنمذج WADL الموارد التي توفرها الخدمة والعلاقات بينها. [ 1 ] تهدف WADL إلى تبسيط إعادة استخدام خدمات الويب القائمة على بنية HTTP الحالية للويب. [ 1 ] [ 2 ] وهي مستقلة عن المنصة واللغة، وتهدف إلى تعزيز إعادة استخدام التطبيقات بما يتجاوز الاستخدام الأساسي في متصفح الويب . [ 1 ] قدمت شركة صن مايكروسيستمز لغة WADL إلى اتحاد شبكة الويب العالمية ( W3C) في 31 أغسطس 2009 [ 1 ] ، ولكن ليس لدى الاتحاد خطط حالية لتوحيدها [ 2 ] . تُعد WADL مكافئ REST للغات وصف خدمات الويب (WSDL) الخاصة ببروتوكول SOAP ، والتي يمكن استخدامها أيضًا لوصف خدمات الويب REST . [ 3 ]

شكل

تُوصَف الخدمة باستخدام مجموعة من عناصر الموارد . يحتوي كل مورد على عناصر param لوصف المدخلات، وعناصر method لوصف طلب المورد واستجابته. يحدد عنصر request كيفية تمثيل المدخلات، وأنواعها المطلوبة، وأي رؤوس HTTP محددة مطلوبة. أما response فيصف تمثيل استجابة الخدمة، بالإضافة إلى أي معلومات عن الأخطاء، للتعامل معها.

مثال

يعرض الجدول التالي مثالاً على وصف WADL لتطبيق بحث أخبار ياهو.

<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:<request> <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

جافا

توجد أدوات متعددة لإنشاء كود جافا من ملف 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=" <xs:element 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: element minOccurs = "0" name= "customerEnabled" type= "xs:boolean" /> <xs:element minOccurs= "0" name= "customerName" type= "xs:< 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" name= "description" type= "xs:string" /> <xs:<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:<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:<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=<request> <request> <reponse> <representation mediaType="app/json" / > <request> <request> < representation mediaType = " app / json " / > </request> <reponse> < representation mediaType = " app / json " /> </reponse> </method> <resource> < resource path = " / { customerUserName } / apps / { appName } " > < method name = " PUT " > <request> <reponse> < representation mediaType= "app/json" /> </response> </method> </resource> </resource> </resources> </app>

انظر أيضاً

مراجع