웹 응용 프로그램 설명 언어
Web Application Description LanguageWADL(Web Application Description Language)은 HTTP 기반 웹 서비스의 기계 판독이 가능한 XML 설명이다.[1]WADL은 서비스에서 제공하는 리소스와 서비스 간의 관계를 모델링한다.[1]WADL은 웹의 기존 HTTP 아키텍처를 기반으로 하는 웹 서비스의 재사용을 단순화하는 것을 목적으로 한다.[1][2]그것은 플랫폼과 언어에 독립적이며 웹 브라우저에서의 기본적인 사용을 넘어 응용 프로그램의 재사용을 촉진하는 것을 목표로 한다.[1]WADL은 2009년[1] 8월 31일 선마이크로시스템스가 월드와이드웹 컨소시엄에 제출했으나 컨소시엄은 현재 표준화[2] 계획이 없다.WADL은 SOAP의 WSDL(Web Services Description Language)에 해당하는 REST로, REST 웹 서비스를 설명하는 데도 사용할 수 있다.[3]
포맷
서비스는 일련의 자원 요소를 사용하여 설명된다.각 자원은 입력을 기술하는 매개변수 요소와 자원의 요청과 대응을 기술하는 방법 요소를 포함한다.요청 요소는 입력을 나타내는 방법, 필요한 유형 및 필요한 특정 HTTP 헤더를 지정한다.응답은 오류를 처리하기 위한 서비스 응답 및 결함 정보의 표현을 설명한다.
예
다음 목록은 야후 뉴스 검색 응용 프로그램에 대한 WADL 설명의 예를 보여준다.
<응용. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wadl.dev.java.net/2009/02 wadl.xsd" xmlns:tns="urn:reason:yn" xmlns:yn="urn:reason:yn" xmlns:ya="urn:reason:api" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://wadl.dev.java.net/2009/02"> <그래머> << include> href="NewsSearchResponse.xsd"/> << include> href="오류.xsd"/> </그래머> << resources> base="http://api.search.yahoo.com/NewsSearchService/V1/"> << resource> 경로="newssearch"> << method> 이름을 붙이다"GET" id="검색"> <<request>> <변수 이름을 붙이다"appid" 타자를 치다"xsd:string" 스타일="query" 필수의"진짜"/> <변수 이름을 붙이다"query" 타자를 치다"xsd:string" 스타일="query" 필수의"진짜"/> <변수 이름을 붙이다"형식" 스타일="query" 디폴트="모두"> <선택권 값어치="모두"/> <선택권 값어치="임의"/> <선택권 값어치="phrase"/> </param> <변수 이름을 붙이다"results" 스타일="query" 타자를 치다"xsd:int" 디폴트="10"/> <변수 이름을 붙이다"시작" 스타일="query" 타자를 치다"xsd:int" 디폴트="1"/> <변수 이름을 붙이다"sort" 스타일="query" 디폴트="직위"> <선택권 값어치="직위"/> <선택권 값어치="날짜"/> </param> <변수 이름을 붙이다"언어" 스타일="query" 타자를 치다"xsd:string"/> </기호> <응답하라. 지위="200"> << representation> mediaType="응용프로그램/xml" 원소="yn:ResultSet"/> </반응> <응답하라. 지위="400"> << representation> mediaType="응용프로그램/xml" 원소="야:에러"/> </반응> </기호> </기호> </기호> </응용> WADL 생성 또는 WADL에서 코드 생성
자바
기존 WADL에서 Java 코드를 생성하기 위한 여러 도구가 있다.[4][5]
- 아파치 CXF
- Java API for RESTful Web Services 및 그 참조 구현, 저지
CXF에서 생성된 WADL 예제
<앱> xmlns="http://research.sun.com/wadl/2006/10" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <그래머> <xs:message> xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" 요소양식기본값="unqualified"> <xs:message> 이름을 붙이다"appProfile" 타자를 치다"appProfile"/> <xs:message> 이름을 붙이다"customerProfile" 타자를 치다"customerProfile"/> <xs:complexType> 이름을 붙이다"customerProfile"> <xs:sequence> <xs:message> minoccurs="0" 이름을 붙이다"access PaymentServicesEnabled" 타자를 치다"xs:부울"/> <xs:message> maxoccurs="unbounded" minoccurs="0" 이름을 붙이다"attributes" 영락없는"진짜" 타자를 치다"attribute"/> <xs:message> minoccurs="0" 이름을 붙이다"빌링타입" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"기본 통화" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"DefaultSpendingLimitCurrency" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"MaximumSpendingLimit" 타자를 치다"xs:double"/> <xs:message> minoccurs="0" 이름을 붙이다"minimumSpendingLimit" 타자를 치다"xs:double"/> <xs:message> minoccurs="0" 이름을 붙이다"고객 카테고리" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"고객 지원" 타자를 치다"xs:부울"/> <xs:message> minoccurs="0" 이름을 붙이다"customerName" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"지불 통지EndpointAddress" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"pseCustomerId" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"리소스URL" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"settlementContractUuid" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"SpendingLimitEnabled" 타자를 치다"xs:부울"/> <xs:message> minoccurs="0" 이름을 붙이다"abcCustomerId" 타자를 치다"xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType> 이름을 붙이다"attribute"> <xs:sequence> <xs:message> minoccurs="0" 이름을 붙이다"키" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"가치" 타자를 치다"xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType> 이름을 붙이다"appProfile"> <xs:sequence> <xs:message> minoccurs="0" 이름을 붙이다"app 사용 가능" 타자를 치다"xs:부울"/> <xs:message> minoccurs="0" 이름을 붙이다"앱 이름" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"app Password" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"AppUserName" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"Appuuid" 타자를 치다"xs:string"/> <xs:message> maxoccurs="unbounded" minoccurs="0" 이름을 붙이다"attributes" 영락없는"진짜" 타자를 치다"attribute"/> <xs:message> minoccurs="0" 이름을 붙이다"description" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"customerName" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"리소스URL" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"serviceContractName" 타자를 치다"xs:string"/> <xs:message> minoccurs="0" 이름을 붙이다"abcAppId" 타자를 치다"xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> </그래머> << resources> base="1987://mpsamara-mobl-vm1:9078/고객 관리/v1"> << resource> 경로="/message"> << resource> 경로="/"> << method> 이름을 붙이다"삭제"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> << method> 이름을 붙이다"GET"> <<request>> <변수 이름을 붙이다"페이지" 스타일="query" 타자를 치다"xs:int"/> <변수 이름을 붙이다"partialCustomerName" 스타일="query" 타자를 치다"xs:string"/> </기호> <응답> << representation> mediaType="app/json"/> </반응> </기호> << method> 이름을 붙이다"포스트"> <<request>> << representation> mediaType="app/json"/> </기호> <응답> << representation> mediaType="app/json"/> </반응> </기호> << method> 이름을 붙이다"PUT"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}"> << method> 이름을 붙이다"삭제"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}"> <변수 이름을 붙이다"CustomerUserName" 스타일="template" 타자를 치다"xs:string"/> << method> 이름을 붙이다"GET"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> << method> 이름을 붙이다"포스트"> <<request>> << representation> mediaType="app/json"/> </기호> <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}"> << method> 이름을 붙이다"PUT"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}/apps"> << method> 이름을 붙이다"삭제"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}/apps"> <변수 이름을 붙이다"CustomerUserName" 스타일="template" 타자를 치다"xs:string"/> << method> 이름을 붙이다"GET"> <<request>> <변수 이름을 붙이다"페이지" 스타일="query" 타자를 치다"xs:int"/> </기호> <응답> << representation> mediaType="app/json"/> </반응> </기호> << method> 이름을 붙이다"포스트"> <<request>> << representation> mediaType="app/json"/> </기호> <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}/apps"> << method> 이름을 붙이다"PUT"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}/apps/{appName}"> << method> 이름을 붙이다"삭제"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}/apps/{appName}"> <변수 이름을 붙이다"CustomerUserName" 스타일="template" 타자를 치다"xs:string"/> <변수 이름을 붙이다"앱 이름" 스타일="template" 타자를 치다"xs:string"/> << method> 이름을 붙이다"GET"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> << method> 이름을 붙이다"포스트"> <<request>> << representation> mediaType="app/json"/> </기호> <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> << resource> 경로="/{customerUserName}/apps/{appName}"> << method> 이름을 붙이다"PUT"> [美] <응답> << representation> mediaType="app/json"/> </반응> </기호> </기호> </기호> </기호> </app> 참고 항목
참조
- ^ a b c d e Sun Microsystems (31 August 2009). "Web Application Description Language: W3C Member Submission 31 August 2009". World Wide Web Consortium. Retrieved 12 August 2012.
- ^ a b World Wide Web Consortium (14 October 2009). "Team Comment on the "Web Application Description Language" Submission". World Wide Web Consortium. Retrieved 12 August 2012.
- ^ Lawrence Mandel (29 May 2008). "Describe REST Web services with WSDL 2.0: A how-to guide". IBM. Retrieved 12 August 2012.
- ^ Github WADL 프로젝트
- ^ 아파치 CXF
외부 링크
- Github의 WADL 홈 페이지
- WADL의 현재 사양
- Carlyle, Benjamin. "WADL for REST-style SOA" (2009-08-31). soundadvice.id.au. Retrieved 9 September 2021.