RESTful 서비스 설명 언어

RESTful Service Description Language

RESTful Service Description Language(RSDL)는 HTTP 기반 웹 애플리케이션(일반적으로 REST 웹 서비스)[1]의 기계 및 사람이 읽을 수 있는 XML 기술입니다.

언어(Michael Pasternak이 oVirt RESTful API 작업 중 정의)를 사용하면 서비스에서 제공하는 리소스 모델, 리소스 간의 관계, 운영 및 작업에 제공해야 하는 매개 변수를 문서화할 수 있습니다.파라미터가 필수인지 여부를 지정하고 파라미터 세트로 발생할 수 있는 오버로드를 설명합니다.

RSDL은 웹의 HTTP 아키텍처를 기반으로 하는 웹 서비스의 재사용을 단순화하는 것을 목적으로 합니다.플랫폼과 언어에 의존하지 않으며 인간과 기계 모두 웹 브라우저에서 기본 사용 이상의 애플리케이션 재사용을 촉진하는 것을 목표로 합니다.

WADL과는 달리 URI를 다양한 방법으로 호출할 수 있는 어플리케이션의 스탠드아론 엔트리 포인트로 기술하는 데 중점을 두고 URI 컴포넌트를 통과할 필요가 없으며 URI/Headers/body 파라미터 오버로드도 지원합니다.이를 통해 사람이 읽을 수 있고 사람과 기계 모두 쉽게 소비할 수 있습니다.

특성.

  • 자기설명: RSDL은 어플리케이션의 스탠드아론 엔트리 포인트로서 다른 URI를 나타냅니다.리소스 URI에 따라 지정된 리소스에 사용할 수 있는 메서드와 이러한 리소스를 어떻게 사용할 수 있는지 파악할 수 있습니다.
  • 기계 판독 가능:RSDL의 각 URI에는 HTTP 요구를 생성하기 위해 필요한 모든 정보가 포함되어 있습니다.이 정보는 URI 내부 액세스로 쉽게 소비할 수 있습니다.
  • 사람이 읽을 수 있는 것:RSDL 의 각 URI 에는, 그 URI 에서의 소정의 조작의 의미를 나타내는 「rel」아트리뷰트와 「description」아트리뷰트가 포함되어 있습니다.사용자는 동일한 URI 내에서 서로 다른 기술자를 찾는 것만으로 특정 컬렉션/리소스에 대해 사용 가능한 모든 작업을 쉽게 가져올 수 있습니다.

포맷

AddThis"0"major="0"/>,<>스키마 rel="스키마"href="/api?스키마">,<>name>, api.xsd<, /name>, <, 설명 />,<>/schema>,<>;일반 rel="*"href="및">,<>request>,<>headers>, <, 헤더 required="거짓">,<>이름 />, <, 설명 />,<>값 />,<>/header>,<>/headers>,<>url>,<>.Parameters_set>,<>매개 변수 context="쿼리 행렬"type="xs:문자열"required="거짓">,<>이름입니다./> <value /> </parameters_set> </url> </request> <이름 /> <설명 /> </general> <link rel="get ..." href="/api/xxx"> <request> </parameters_set>POST PUT DELETE 가져오기...<>/http_method>,<>headers>, <, 헤더 required="거짓">,<>이름 />,<>값 />,<>/header>,<>/headers>,<>url>,<>parameters_set>,<>매개 변수 context="쿼리 행렬"type=""required="거짓">,<>이름 />,<>값 />,<>/parameter>,<>/parameters_set>,<>/url>,<>body>,<>ty.pe>,...</type> <parameters_set> <parameters type=" required="true false"> <name>FQ-name-to-parameter </name> </parameter_set> </body> </body> </request> <type /> </links> </rsdl>

구성 요소들

URI

    <blocks>         <링크> rel="가져와..." href="/api/xxx"> 

부탁한다

 <request> <blocks_blocks>POST PUT DELETE 가져오기...</balue_value> </balue> </balue> </balue> </balue> </balue> ...</parameters> <parameters_set> <파라미터 context="parametrix" type="required="true false"> <name> <value> </parameter> ...</parameters_set> ...</url> <body> <type>...</type> <parameters_set> <parameters type=" required="true false"> <name>FQ-name-to-parameter </name> </parameter> ...</parameters_set> ...</body> </request>

대답

 <response> <type> </type> ...</response>

XML 스키마

  <클릭: 개요 이름="상세 링크" 입력="상세 링크"/>    <x: complex Type> 이름="상세 링크">     <contract: 시퀀스>       <메시지: 정보>         <view: appinfo>           <jaxb: 개요 이름="실패"/>         </filename: appinfo>       </messages: 정보>       <클릭: 개요 입력="상세 링크" 이름=링크 maxOccurs="확장"/>     </communications: 시퀀스>   </x: complex Type>    <클릭: 개요 이름=링크 입력='링크"/>    <x: complex Type> 이름='링크">     <클릭: 개요 이름="href" 입력="문자열: 문자열"/>     <클릭: 개요 이름="rel" 입력="문자열: 문자열"/>   </x: complex Type>    <클릭: 개요 이름="url" 입력="Url"/>    <x: complex Type> 이름="Url">     <contract: 시퀀스>       <클릭: 개요 참조="parameters_set" maxOccurs="확장" minoccurs="0">         <메시지: 정보>           <view: appinfo>             <jaxb: 개요 이름="파라미터 세트"/>           </filename: appinfo>         </messages: 정보>       </filename: 삭제>     </communications: 시퀀스>   </x: complex Type>    <클릭: 개요 이름="본체' 입력="바디"/>    <x: complex Type> 이름="바디">     <contract: 시퀀스>       <클릭: 개요 이름="타입" 입력="문자열: 문자열" minoccurs="1" maxOccurs="1"/>       <클릭: 개요 참조="parameters_set" maxOccurs="확장" minoccurs="0">         <메시지: 정보>           <view: appinfo>             <jaxb: 개요 이름="파라미터 세트"/>           </filename: appinfo>         </messages: 정보>       </filename: 삭제>     </communications: 시퀀스>     <클릭: 개요 이름="필수" 입력="메시지: 삭제">       <메시지: 정보>         <view: appinfo>           <jaxb: 개요 generateIsSetMethod="false"/>         </filename: appinfo>       </messages: 정보>     </filename: 삭제>   </x: complex Type>    <클릭: 개요 이름="요청" 입력="요청"/>    <x: complex Type> 이름="요청">     <contract: 시퀀스>       <클릭: 개요 이름="filen_filen_filen_filename" 입력="Http Method" minoccurs="1" maxOccurs="1"/>       <클릭: 개요 참조="실패" minoccurs="0" maxOccurs="1"/>       <클릭: 개요 참조="url" minoccurs="0" maxOccurs="1"/>       <클릭: 개요 참조="본체' minoccurs="0" maxOccurs="1"/>     </communications: 시퀀스>   </x: complex Type>    <x: simple Type> 이름="Http Method">     <설명: 설명> 베이스="문자열: 문자열">       <메시지: 열거 값=「취득」/>       <메시지: 열거 값=「POST」/>       <메시지: 열거 값="넣다"/>       <메시지: 열거 값="삭제"/>       <메시지: 열거 값="옵션"/>     </private: 설명>   </xs: simple Type>    <클릭: 개요 이름="응답" 입력="응답"/>    <x: complex Type> 이름="응답">     <contract: 시퀀스>       <클릭: 개요 이름="타입" 입력="문자열: 문자열" minoccurs="1" maxOccurs="1"/>     </communications: 시퀀스>   </x: complex Type>    <클릭: 개요 이름="파라미터" 입력="파라미터"/>    <x: complex Type> 이름="파라미터">     <x: complex Content >       <클릭: 개요 베이스="베이스 리소스">         <contract: 시퀀스>           <클릭: 개요 이름="값" 입력="문자열: 문자열" minoccurs="1" maxOccurs="1"/>           <클릭: 개요 참조="parameters_set" minoccurs="0" maxOccurs="1"/>         </communications: 시퀀스>         <클릭: 개요 이름="필수" 입력="메시지: 삭제">           <메시지: 정보>             <view: appinfo>               <jaxb: 개요 generateIsSetMethod="false"/>             </filename: appinfo>           </messages: 정보>         </filename: 삭제>         <클릭: 개요 이름="타입" 입력="문자열: 문자열"/>         <클릭: 개요 이름="실패" 입력="문자열: 문자열"/>       </filename: 삭제>     </x: complex Content >   </x: complex Type>    <클릭: 개요 이름="실패" 입력="헤더"/>    <x: complex Type> 이름="헤더">     <x: complex Content >       <클릭: 개요 베이스="베이스 리소스">         <contract: 시퀀스>           <클릭: 개요 이름="값" 입력="문자열: 문자열" minoccurs="1" maxOccurs="1"/>         </communications: 시퀀스>         <클릭: 개요 이름="필수" 입력="메시지: 삭제">           <메시지: 정보>             <view: appinfo>               <jaxb: 개요 generateIsSetMethod="false"/>             </filename: appinfo>           </messages: 정보>         </filename: 삭제>       </filename: 삭제>     </x: complex Content >   </x: complex Type>    <클릭: 개요 이름="실패" 입력="헤더"/>    <x: complex Type> 이름="헤더">     <contract: 시퀀스>       <클릭: 개요 참조="실패" maxOccurs="확장">         <메시지: 정보>           <view: appinfo>             <jaxb: 개요 이름="헤더"/>           </filename: appinfo>         </messages: 정보>       </filename: 삭제>     </communications: 시퀀스>   </x: complex Type>    <클릭: 개요 이름="parameters_set" 입력="파라미터 세트"/>    <x: complex Type> 이름="파라미터 세트">     <contract: 시퀀스>       <클릭: 개요 참조="파라미터" maxOccurs="확장" minoccurs="0">         <메시지: 정보>           <view: appinfo>             <jaxb: 개요 이름="파라미터"/>           </filename: appinfo>         </messages: 정보>       </filename: 삭제>     </communications: 시퀀스>   </x: complex Type>    <클릭: 개요 이름="실패" 입력="스케마"/>    <x: complex Type> 이름="스케마">     <x: complex Content >       <클릭: 개요 베이스='링크">         <contract: 시퀀스>           <클릭: 개요 이름="이름 입력="문자열: 문자열" minoccurs="0" maxOccurs="1"/>           <클릭: 개요 이름="설명" 입력="문자열: 문자열" minoccurs="0" maxOccurs="1"/>         </communications: 시퀀스>       </filename: 삭제>     </x: complex Content >   </x: complex Type>    <클릭: 개요 이름="general_module" 입력="General Metadata/>    <x: complex Type> 이름="General Metadata>     <x: complex Content >       <클릭: 개요 베이스="상세 링크">         <contract: 시퀀스>           <클릭: 개요 이름="이름 입력="문자열: 문자열" minoccurs="0" maxOccurs="1"/>           <클릭: 개요 이름="설명" 입력="문자열: 문자열" minoccurs="0" maxOccurs="1"/>         </communications: 시퀀스>       </filename: 삭제>     </x: complex Content >   </x: complex Type>    <클릭: 개요 이름="RSDL" 입력=RSDL/>    <x: complex Type> 이름=RSDL>     <contract: 시퀀스>       <클릭: 개요 이름="설명" 입력="문자열: 문자열" minoccurs="0"/>       <클릭: 개요 입력="버전" 이름="버전" minoccurs="0" maxOccurs="1" />       <클릭: 개요 참조="실패" minoccurs="0" maxOccurs="1" />       <클릭: 개요 입력="General Metadata 이름="일반" minoccurs="0" maxOccurs="1"/>       <클릭: 개요 입력="상세 링크" 이름="실패" minoccurs="0"/>     </communications: 시퀀스>     <클릭: 개요 이름="href" 입력="문자열: 문자열"/>     <클릭: 개요 이름="rel" 입력="문자열: 문자열"/>   </x: complex Type> 

자원 목록 표시

 <link rel="get" href="/api/messages"> <요청> <link rel_messages>GET </http_method> <timeout> <time required="false"> <name>Filter<, /name>,<>가 진정한 false<, /value>,<>/header>,<>/headers>,<>url>,<>parameters_set>,<>매개 변수 context="쿼리"type="xs:문자열"required="거짓">,<>name>, search<, /name>,<>가 검색 query<, /value>,<>/parameter>,<>매개 변수 context="매트릭스"type="xs:부울"required="거짓".><>name>, case_sensitive<, /name>,<>가 진정한 false<, /value>,<>/parameter>,<>매개 변수 context="parameters" type="parameters" required="false"> <name> max </value> </parameters_set> </url> </url> <body/> </request> </type> 클러스터 </response> </link> </l>

자원 취득

 <link rel="get" href="/api/cluster/{cluster:id}"> <request> <request> <request_parames>GET </http_method> <timeout> <time required="false"> <name>필터 </name> <value> True false </value> </headers> </body/> </request> </response> </type> </link>

리소스 업데이트

 <link rel="update" href="/api/cluster/{cluster:id}"> <request> <request> <request> <request>PUT<, /http_method>,<>headers>, <, 헤더 required="진정한">,<>name&gt을 말한다.Content-Type<, /name>,<>가 application/xml json<, /value>,<>/header>,<>헤더 required="거짓">,<>name>, Correlation-Id<, /name>,<>가; 어떠한 string<, /value>,<>/header>,<>/headers>,<>body>, <, type&gt을 말한다.Cluster<, /type>,<>parameters_set>,<>매개 변수 type="xs:문자열"required="거짓">,<>name>, cluster.name<, /name>,<>/param.eter> <파라미터 type="cluster:string" required="false"> </parameter type="parameter:string" required="parameter type="false"> </parameter type=" required=" </name> <파라미터 type:string> </name> 클러스터version.major </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.version.memory </name> </parameter> <파라미터 타입="parameter:double" required="false"> <name> cluster.memory_policy.overcommit.percent </name> </parameter type="parameter:required="false"> <name> cluster.memory_policy.required_parameterpages.enabled </name> <파라미터 type="parameter:string" required="false"> <name> 클러스터.scheduling_policy.policy </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.thresholds.low </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.문턱값high </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.Thresholds.duration<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="거짓">,<>name>, cluster.error_handling.on_error<, /name>,<>/parameter>,<>매개 변수 type="xs:부울"required="거짓">,<>name>, cluster.virt_service<, /name>,<>/parameter>,<>매개 변수 type="xs:부울"required="거짓"&gt을 말한다.<>name>, cluster.gluster_service<, /name>,<>/parameter>,<>변수 형식="complete:complete" 필수="false"> <name> 클러스터.threads_as_parameter </name> </parameter> <파라미터 타입="parameter:parameter" required="false"> <name> 클러스터.tunnel_migration </name> </parameters_set> </body> </request> </request> <type> </type> </link>

자원 생성

 <link rel="add" href="/api/messages"> <요청> <link rel_messages>POST </http_method> </http required="true"> <name> 콘텐츠 유형 </name> 애플리케이션/xml json </http> </http> </http required="false"> <name>Expect<, /name>,<>가 201-created<, /value>,<>/header>,<>헤더 required="거짓">,<>name>, Correlation-Id<, /name>,<>가; 어떠한 string<, /value>,<>/header>,<>/headers>,<>body>, <, type&gt을 말한다.Cluster<, /type>,<>parameters_set>,<>매개 변수 type="xs:문자열"required="진정한">,<>name>,cluster.data_center.id name<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="진정한">,<>name>, clu.ster.name </name> </parameter> <파라미터 타입="parameter:int" required="true"> <name> 클러스터.version.major </name> </parameter> <파라미터 타입="parameter:int" required="true"> <name> 클러스터.Version.minor<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="진정한">,<>name>, cluster.cpu.id<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="거짓">,<>name>, cluster.description<, /name>,<>/parameter>,<>매개 변수 type="xs:더블"required="거짓">,<>name>, cluster.memory._policy.overcommit.percent </name> </parameter type="parameter:required="false"> <name> cluster.memory_policy.required_parameterpages.enabled </name> <파라미터 type="parameter:string" required="> <name> 클러스터.scheduling_policy.policy </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.thresholds.low </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.문턱값high </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.Thresholds.duration<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="거짓">,<>name>, cluster.error_handling.on_error<, /name>,<>/parameter>,<>매개 변수 type="xs:부울"required="거짓">,<>name>, cluster.virt_service<, /name>,<>/parameter>,<>매개 변수 type="xs:부울"required="거짓"&gt을 말한다.<>name>, cluster.gluster_service<, /name>,<>/parameter>,<>변수 형식="complete:complete" 필수="false"> <name> 클러스터.threads_as_parameter </name> </parameter> <파라미터 타입="parameter:parameter" required="false"> <name> 클러스터.tunnel_migration </name> </parameters_set> </body> </request> </request> <type> </type> </link>

자원 삭제

 <link rel="delete" href="/api/cluster/{cluster:id}"> <request> <request> <request_delete>DELETE<, /http_method>,<>headers>, <, 헤더 required="거짓">,<>name>, Correlation-Id<, /name>,<>가; 어떠한 string<, /value>,<>/header>,<>/headers>,<>url>,<>parameters_set>,<>매개 변수 context="매트릭스"type="xs:부울"required="거짓">,<>name>, async<, /name>,<>가 진정한 false<, /.Value>,<>/parameter>,<>/parameters_set>,<>/url>,<>body/>,<>/request>,<>/link&gt을 말한다.

코드 생성

RSDL URI 기술자

 <link rel="add" href="/api/messages"> <요청> <link rel_messages>POST </http_method> </http required="true"> <name> 콘텐츠 유형 </name> 애플리케이션/xml json </http> </http> </http required="false"> <name>Expect<, /name>,<>가 201-created<, /value>,<>/header>,<>헤더 required="거짓">,<>name>, Correlation-Id<, /name>,<>가; 어떠한 string<, /value>,<>/header>,<>/headers>,<>body>, <, type&gt을 말한다.Cluster<, /type>,<>parameters_set>,<>매개 변수 type="xs:문자열"required="진정한">,<>name>,cluster.data_center.id name<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="진정한">,<>name>, clu.ster.name </name> </parameter> <파라미터 타입="parameter:int" required="true"> <name> 클러스터.version.major </name> </parameter> <파라미터 타입="parameter:int" required="true"> <name> 클러스터.Version.minor<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="진정한">,<>name>, cluster.cpu.id<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="거짓">,<>name>, cluster.description<, /name>,<>/parameter>,<>매개 변수 type="xs:더블"required="거짓">,<>name>, cluster.memory._policy.overcommit.percent </name> </parameter type="parameter:required="false"> <name> cluster.memory_policy.required_parameterpages.enabled </name> <파라미터 type="parameter:string" required="> <name> 클러스터.scheduling_policy.policy </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.thresholds.low </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.문턱값high </name> </parameter> <파라미터 타입="parameter:int" required="false"> <name> 클러스터.scheduling_policy.Thresholds.duration<, /name>,<>/parameter>,<>매개 변수 type="xs:문자열"required="거짓">,<>name>, cluster.error_handling.on_error<, /name>,<>/parameter>,<>매개 변수 type="xs:부울"required="거짓">,<>name>, cluster.virt_service<, /name>,<>/parameter>,<>매개 변수 type="xs:부울"required="거짓"&gt을 말한다.<>name>, cluster.gluster_service<, /name>,<>/parameter>,<>변수 형식="complete:complete" 필수="false"> <name> 클러스터.threads_as_parameter </name> </parameter> <파라미터 타입="parameter:parameter" required="false"> <name> 클러스터.tunnel_migration </name> </parameters_set> </body> </request> </request> <type> </type> </link>

생성된 코드 서명

    /** * 클러스터 개체를 추가합니다. * @link org.ovirt.engine.http.http.http: {@link org.클러스터} * cluster.data_center.id 이름 * cluster.name * 클러스터version.major * 클러스터version.discloss.discloss 。 * cluster.cpu.id * [cluster.description] * [cluster.memory_policy.overcommit ]퍼센트] * [cluster.memory_policy.clusterrent_parampages.enabled] * [클러스터]scheduling_policy.정책] * [클러스터]scheduling_policy.thresholds.low] * [클러스터]scheduling_policy.문턱값높다] * [클러스터]scheduling_policy.문턱값.문턱값] * [cluster.error_handling.on_error] * [cluster.disc_service] * [cluster.gluster_service] * [클러스터]스레드_as_displays] * [클러스터]tunnel_module] * @return * {@link 클러스터} * @throws Client Protocol Exception * HTTP/S 프로토콜 오류가 발생했음을 알립니다. * @throws Server Exception * oVirt api 오류가 발생했음을 나타냅니다. * @throws IOException * I/O 예외가 발생했음을 나타냅니다. */     일반의 클러스터 더하다(조직.난로 만들다.엔진.SDK.엔티티.클러스터 클러스터) 던지다             Client Protocol Exception(클라이언트 프로토콜 예외), Server Exception(서버 예외), IOException(IOException) {              ....     }      /** * 클러스터 개체를 추가합니다. * @link org.ovirt.engine.http.http.http: {@link org.클러스터} * cluster.data_center.id 이름 * cluster.name * 클러스터version.major * 클러스터version.discloss.discloss 。 * cluster.cpu.id * [cluster.description] * [cluster.memory_policy.overcommit ]퍼센트] * [cluster.memory_policy.clusterrent_parampages.enabled] * [클러스터]scheduling_policy.정책] * [클러스터]scheduling_policy.thresholds.low] * [클러스터]scheduling_policy.문턱값높다] * [클러스터]scheduling_policy.문턱값.문턱값] * [cluster.error_handling.on_error] * [cluster.disc_service] * [cluster.gluster_service] * [클러스터]스레드_as_displays] * [클러스터]tunnel_module] * @예상치 않음 * [201-created] * @paramplicate아이디 * [모든 문자열] * @return * {@link 클러스터} * @throws Client Protocol Exception * HTTP/S 프로토콜 오류가 발생했음을 알립니다. * @throws Server Exception * oVirt api 오류가 발생했음을 나타냅니다. * @throws IOException * I/O 예외가 발생했음을 나타냅니다. */     일반의 클러스터 더하다(조직.난로 만들다.엔진.SDK.엔티티.클러스터 클러스터, 스트링 기대하다, 스트링 상관 관계아이디) 던지다             Client Protocol Exception(클라이언트 프로토콜 예외), Server Exception(서버 예외), IOException(IOException) {             ....     } 

레퍼런스

  1. ^ "RESTful Service Description Language (RSDL)". balisage.net.