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>을 말한다.Content-Type<, /name>,<>가 application/xml json<, /value>,<>/header>,<>헤더 required="거짓">,<>name>, Correlation-Id<, /name>,<>가; 어떠한 string<, /value>,<>/header>,<>/headers>,<>body>, <, type>을 말한다.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="거짓">을 말한다.<>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>을 말한다.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="거짓">을 말한다.<>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>을 말한다.코드 생성
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>을 말한다.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="거짓">을 말한다.<>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) { .... } 레퍼런스
- ^ "RESTful Service Description Language (RSDL)". balisage.net.