RSDL - RSDL
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
The RESTful Popis jazyka služby (RSDL) je čitelný strojem i člověkem XML popis HTTP - webové aplikace (obvykle ZBYTEK webové služby).[1]
Jazyk (definovaný Michaelem Pasternakem během jeho práce na oVirt RESTful API) umožňuje dokumentaci Modelka prostředků poskytovaných službou, vztahů mezi nimi a operací a parametrů, které musí být pro operace zadány. Určuje, zda jsou parametry povinné; a popisuje možné přetížení jako sady parametrů.
RSDL má zjednodušit opětovné použití webových služeb, které jsou založeny na architektuře HTTP webu. Je nezávislý na platformě a jazyce a jeho cílem je podporovat opětovné použití aplikací nad rámec základního použití ve webovém prohlížeči lidmi i stroji.
Na rozdíl od WADL, soustředí se na popis URI jako samostatné vstupní body do aplikace, které lze vyvolat různými způsoby, nevyžaduje pro zjištění struktury URI procházení komponenty URI a podporuje přetížení parametrů URI / záhlaví / těla. Díky tomu je člověk čitelný a snadno se spotřebuje lidmi i stroji.
Pojem
![]() | Tato část je prázdná. Můžete pomoci přidávat k tomu. (červen 2013) |
Vlastní popis
RSDL představuje různé URI jako samostatné vstupní body do aplikace. Následující identifikátory URI prostředků lze zjistit, které metody jsou k dispozici pro dané zdroje a jak je možné tyto zdroje využívat.
Strojově čitelné
Každý identifikátor URI v RSDL obsahuje všechny potřebné informace k vygenerování požadavku HTTP z něj, který lze snadno spotřebovat přístupem k interním identifikátorům URI.
Člověk čitelný
Každý URI v RSDL obsahuje atributy „rel“ a „description“ popisující význam dané operace na tomto URI. Lidé mohou snadno načíst všechny dostupné operace pro danou kolekci / zdroj jednoduše vyhledáním různých deskriptorů ve stejném URI.
Formát
rel ="rsdl" href =„/ api? rsdl“> /> revize ="0" sestavení ="0" menší ="0" hlavní ="0" /> rel ="schéma" href ="/ api? schéma"> <name>api.xsd</name> /> </schema> rel ="*" href ="/*"> <request> <headers> požadováno ="true | false"> /> /> /> </header> </headers> <url> <parameters_set> kontext ="dotaz | matice" zadejte =„xs: string“ požadováno ="true | false"> /> /> </parameter> </parameters_set> </url> </request> /> /> </general> <links> rel ="dostat | ..." href =„/ api / xxx“> <request> <http_method>ZÍSKAT | POST | PUT | ODSTRANIT | ...</http_method> <headers> požadováno ="true | false"> /> /> </header> </headers> <url> <parameters_set> kontext ="dotaz | matice" zadejte ="" požadováno ="true | false"> /> /> </parameter> </parameters_set> </url> <body> <type>...</type> <parameters_set> zadejte ="" požadováno ="true | false"> <name>FQ-jméno-k-parametru</name> </parameter> </parameters_set> </body> </request> <response> /> </response> </link> </links></rsdl>
Součásti
URI
<links> rel ="dostat | ..." href =„/ api / xxx“>
Žádost
<request> <http_method>ZÍSKAT | POST | PUT | ODSTRANIT | ...</http_method> <headers> požadováno ="true | false"> <name></name> <value></value> </header> ... </headers> <url> <parameters_set> kontext ="dotaz | matice" zadejte ="" požadováno ="true | false"> <name></name> <value></value> </parameter> ... </parameters_set> ... </url> <body> <type>...</type> <parameters_set> zadejte ="" požadováno ="true | false"> <name>FQ-jméno-k-parametru</name> </parameter> ... </parameters_set> ... </body> </request>
Odezva
<response> <type></type> ... </response>
Schéma XML
jméno =„detailedLinks“ zadejte =„Podrobné odkazy“/> jméno =„Podrobné odkazy“> <xs:sequence> <xs:annotation> <xs:appinfo> jméno ="Odkazy"/> </xs:appinfo> </xs:annotation> zadejte =„DetailedLink“ jméno ="odkaz" maxOccurs ="neomezený"/> </xs:sequence> </xs:complexType> jméno ="odkaz" zadejte ="Odkaz"/> jméno ="Odkaz"> jméno ="href" zadejte ="xs: string"/> jméno ="rel" zadejte ="xs: string"/> </xs:complexType> jméno =„url“ zadejte =„URL“/> jméno =„URL“> <xs:sequence> ref ="parameters_set" maxOccurs ="neomezený" minOccurs ="0"> <xs:annotation> <xs:appinfo> jméno ="ParametersSets"/> </xs:appinfo> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> jméno ="tělo" zadejte ="Tělo"/> jméno ="Tělo"> <xs:sequence> jméno ="typ" zadejte =„xs: string“ minOccurs ="1" maxOccurs ="1"/> ref ="parameters_set" maxOccurs ="neomezený" minOccurs ="0"> <xs:annotation> <xs:appinfo> jméno ="ParametersSets"/> </xs:appinfo> </xs:annotation> </xs:element> </xs:sequence> jméno ="Požadované" zadejte =„xs: boolean“> <xs:annotation> <xs:appinfo> generateIsSetMethod ="Nepravdivé"/> </xs:appinfo> </xs:annotation> </xs:attribute> </xs:complexType> jméno ="žádost" zadejte ="Žádost"/> jméno ="Žádost"> <xs:sequence> jméno =„http_method“ zadejte =„HttpMethod“ minOccurs ="1" maxOccurs ="1"/> ref ="hlavičky" minOccurs ="0" maxOccurs ="1"/> ref =„url“ minOccurs ="0" maxOccurs ="1"/> ref ="tělo" minOccurs ="0" maxOccurs ="1"/> </xs:sequence> </xs:complexType> jméno =„HttpMethod“> základna =„xs: string“> hodnota ="DOSTAT"/> hodnota ="POŠTA"/> hodnota ="DÁT"/> hodnota ="VYMAZAT"/> hodnota =„MOŽNOSTI“/> </xs:restriction> </xs:simpleType> jméno ="Odezva" zadejte ="Odezva"/> jméno ="Odezva"> <xs:sequence> jméno ="typ" zadejte ="xs: string" minOccurs ="1" maxOccurs ="1"/> </xs:sequence> </xs:complexType> jméno ="parametr" zadejte ="Parametr"/> jméno ="Parametr"> <xs:complexContent> základna =„BaseResource“> <xs:sequence> jméno ="hodnota" zadejte =„xs: string“ minOccurs ="1" maxOccurs ="1"/> ref ="parameters_set" minOccurs ="0" maxOccurs ="1"/> </xs:sequence> jméno ="Požadované" zadejte =„xs: boolean“> <xs:annotation> <xs:appinfo> generateIsSetMethod ="Nepravdivé"/> </xs:appinfo> </xs:annotation> </xs:attribute> jméno ="typ" zadejte ="xs: string"/> jméno ="kontext" zadejte ="xs: string"/> </xs:extension> </xs:complexContent> </xs:complexType> jméno ="záhlaví" zadejte =„Záhlaví“/> jméno =„Záhlaví“> <xs:complexContent> základna =„BaseResource“> <xs:sequence> jméno ="hodnota" zadejte =„xs: string“ minOccurs ="1" maxOccurs ="1"/> </xs:sequence> jméno ="Požadované" zadejte =„xs: boolean“> <xs:annotation> <xs:appinfo> generateIsSetMethod ="Nepravdivé"/> </xs:appinfo> </xs:annotation> </xs:attribute> </xs:extension> </xs:complexContent> </xs:complexType> jméno ="hlavičky" zadejte =„Záhlaví“/> jméno =„Záhlaví“> <xs:sequence> ref ="záhlaví" maxOccurs ="neomezený"> <xs:annotation> <xs:appinfo> jméno =„Záhlaví“/> </xs:appinfo> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> jméno ="parameters_set" zadejte ="ParametersSet"/> jméno ="ParametersSet"> <xs:sequence> ref ="parametr" maxOccurs ="neomezený" minOccurs ="0"> <xs:annotation> <xs:appinfo> jméno ="Parametry"/> </xs:appinfo> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> jméno ="schéma" zadejte ="Schéma"/> jméno ="Schéma"> <xs:complexContent> základna ="Odkaz"> <xs:sequence> jméno ="název" zadejte ="xs: string" minOccurs ="0" maxOccurs ="1"/> jméno ="popis" zadejte ="xs: string" minOccurs ="0" maxOccurs ="1"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> jméno =„general_metadata“ zadejte =„GeneralMetadata“/> jméno =„GeneralMetadata“> <xs:complexContent> základna =„DetailedLink“> <xs:sequence> jméno ="název" zadejte ="xs: string" minOccurs ="0" maxOccurs ="1"/> jméno ="popis" zadejte =„xs: string“ minOccurs ="0" maxOccurs ="1"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> jméno ="rsdl" zadejte =„RSDL“/> jméno =„RSDL“> <xs:sequence> jméno ="popis" zadejte =„xs: string“ minOccurs ="0"/> zadejte ="Verze" jméno ="verze" minOccurs ="0" maxOccurs ="1" /> ref ="schéma" minOccurs ="0" maxOccurs ="1" /> zadejte =„GeneralMetadata“ jméno ="Všeobecné" minOccurs ="0" maxOccurs ="1"/> zadejte =„Podrobné odkazy“ jméno ="Odkazy" minOccurs ="0"/> </xs:sequence> jméno ="href" zadejte ="xs: string"/> jméno ="rel" zadejte ="xs: string"/> </xs:complexType>
Příklady
Seznam zdrojů
rel ="dostat" href =„/ api / clustery“> <request> <http_method>DOSTAT</http_method> <headers> požadováno ="Nepravdivé"> <name>Filtr</name> <value>true | false</value> </header> </headers> <url> <parameters_set> kontext ="dotaz" zadejte ="xs: string" požadováno ="Nepravdivé"> <name>Vyhledávání</name> <value>vyhledávací dotaz</value> </parameter> kontext ="matice" zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>citlivý na velká písmena</name> <value>true | false</value> </parameter> kontext ="matice" zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>max</name> <value>maximální výsledky</value> </parameter> </parameters_set> </url> <body/> </request> <response> <type>Klastry</type> </response> </link>
Získejte zdroj
rel ="dostat" href =„/ api / clusters / {cluster: id}“> <request> <http_method>DOSTAT</http_method> <headers> požadováno ="Nepravdivé"> <name>Filtr</name> <value>true | false</value> </header> </headers> <body/> </request> <response> <type>Klastr</type> </response> </link>
Aktualizovat zdroj
rel ="Aktualizace" href =„/ api / clusters / {cluster: id}“> <request> <http_method>DÁT</http_method> <headers> požadováno ="skutečný"> <name>Typ obsahu</name> <value>application / xml | json</value> </header> požadováno ="Nepravdivé"> <name>ID korelace</name> <value>libovolný řetězec</value> </header> </headers> <body> <type>Klastr</type> <parameters_set> zadejte =„xs: string“ požadováno ="Nepravdivé"> <name>název clusteru</name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>popis klastru</name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>cluster.cpu.id</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.version.major</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.version.minor</name> </parameter> zadejte =„xs: double“ požadováno ="Nepravdivé"> <name>cluster.memory_policy.overcommit.percent</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.memory_policy.transparent_hugepages.enabled </name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.policy</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.low</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.high</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.duration</name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>cluster.error_handling.on_error</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.virt_service</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.gluster_service</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.threads_as_cores</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.tunnel_migration</name> </parameter> </parameters_set> </body> </request> <response> <type>Klastr</type> </response> </link>
Vytvořit zdroj
rel ="přidat" href =„/ api / clustery“> <request> <http_method>POŠTA</http_method> <headers> požadováno ="skutečný"> <name>Typ obsahu</name> <value>application / xml | json</value> </header> požadováno ="Nepravdivé"> <name>Očekávat</name> <value>201 vytvořeno</value> </header> požadováno ="Nepravdivé"> <name>ID korelace</name> <value>libovolný řetězec</value> </header> </headers> <body> <type>Klastr</type> <parameters_set> zadejte =„xs: string“ požadováno ="skutečný"> <name>cluster.data_center.id | název</name> </parameter> zadejte ="xs: string" požadováno ="skutečný"> <name>název clusteru</name> </parameter> zadejte =„xs: int“ požadováno ="skutečný"> <name>cluster.version.major</name> </parameter> zadejte =„xs: int“ požadováno ="skutečný"> <name>cluster.version.minor</name> </parameter> zadejte ="xs: string" požadováno ="skutečný"> <name>cluster.cpu.id</name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>popis klastru</name> </parameter> zadejte =„xs: double“ požadováno ="Nepravdivé"> <name>cluster.memory_policy.overcommit.percent</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.memory_policy.transparent_hugepages.enabled</name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.policy</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.low</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.high</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.duration</name> </parameter> zadejte =„xs: string“ požadováno ="Nepravdivé"> <name>cluster.error_handling.on_error</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.virt_service</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.gluster_service</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.threads_as_cores</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.tunnel_migration</name> </parameter> </parameters_set> </body> </request> <response> <type>Klastr</type> </response> </link>
Smazat zdroj
rel ="vymazat" href =„/ api / clusters / {cluster: id}“> <request> <http_method>VYMAZAT</http_method> <headers> požadováno ="Nepravdivé"> <name>ID korelace</name> <value>libovolný řetězec</value> </header> </headers> <url> <parameters_set> kontext ="matice" zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>asynchronní</name> <value>true | false</value> </parameter> </parameters_set> </url> <body/> </request> </link>
Generování kódu
Deskriptor URI RSDL
rel ="přidat" href =„/ api / clustery“> <request> <http_method>POŠTA</http_method> <headers> požadováno ="skutečný"> <name>Typ obsahu</name> <value>application / xml | json</value> </header> požadováno ="Nepravdivé"> <name>Očekávat</name> <value>201 vytvořeno</value> </header> požadováno ="Nepravdivé"> <name>ID korelace</name> <value>libovolný řetězec</value> </header> </headers> <body> <type>Klastr</type> <parameters_set> zadejte ="xs: string" požadováno ="skutečný"> <name>cluster.data_center.id | název</name> </parameter> zadejte ="xs: string" požadováno ="skutečný"> <name>název clusteru</name> </parameter> zadejte =„xs: int“ požadováno ="skutečný"> <name>cluster.version.major</name> </parameter> zadejte =„xs: int“ požadováno ="skutečný"> <name>cluster.version.minor</name> </parameter> zadejte =„xs: string“ požadováno ="skutečný"> <name>cluster.cpu.id</name> </parameter> zadejte =„xs: string“ požadováno ="Nepravdivé"> <name>popis klastru</name> </parameter> zadejte =„xs: double“ požadováno ="Nepravdivé"> <name>cluster.memory_policy.overcommit.percent</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.memory_policy.transparent_hugepages.enabled</name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.policy</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.low</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.high</name> </parameter> zadejte =„xs: int“ požadováno ="Nepravdivé"> <name>cluster.scheduling_policy.thresholds.duration</name> </parameter> zadejte ="xs: string" požadováno ="Nepravdivé"> <name>cluster.error_handling.on_error</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.virt_service</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.gluster_service</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.threads_as_cores</name> </parameter> zadejte =„xs: boolean“ požadováno ="Nepravdivé"> <name>cluster.tunnel_migration</name> </parameter> </parameters_set> </body> </request> <response> <type>Klastr</type> </response> </link>
Podpis generovaného kódu
/** * Přidá objekt clusteru. * @param cluster {@link org.ovirt.engine.sdk.entities.Cluster} * cluster.data_center.id | název * název clusteru * cluster.version.major * cluster.version.minor * cluster.cpu.id * [popis klastru] * [cluster.memory_policy.overcommit.percent] * [cluster.memory_policy.transparent_hugepages.enabled] * [cluster.scheduling_policy.policy] * [cluster.scheduling_policy.thresholds.low] * [cluster.scheduling_policy.thresholds.high] * [cluster.scheduling_policy.thresholds.duration] * [cluster.error_handling.on_error] * [cluster.virt_service] * [cluster.gluster_service] * [cluster.threads_as_cores] * [cluster.tunnel_migration] * @vrátit se * {@link Cluster} * @throws ClientProtocolException * Signalizuje, že došlo k chybě protokolu HTTP / S. * @hodí ServerException * Signalizuje, že došlo k chybě API oVirt. * @hodí IOException * Signály, že došlo k nějaké I / O výjimce. */ veřejnost Klastr přidat(org.ovirt.motor.sdk.subjekty.Klastr shluk) hodí ClientProtocolException, ServerException, IOException { .... } /** * Přidá objekt clusteru. * @param cluster {@link org.ovirt.engine.sdk.entities.Cluster} * cluster.data_center.id | název * název clusteru * cluster.version.major * cluster.version.minor * cluster.cpu.id * [popis klastru] * [cluster.memory_policy.overcommit.percent] * [cluster.memory_policy.transparent_hugepages.enabled] * [cluster.scheduling_policy.policy] * [cluster.scheduling_policy.thresholds.low] * [cluster.scheduling_policy.thresholds.high] * [cluster.scheduling_policy.thresholds.duration] * [cluster.error_handling.on_error] * [cluster.virt_service] * [cluster.gluster_service] * [cluster.threads_as_cores] * [cluster.tunnel_migration] * @param očekávat * [201 vytvořeno] * @param korelationId * [libovolný řetězec] * @vrátit se * {@link Cluster} * @throws ClientProtocolException * Signalizuje, že došlo k chybě protokolu HTTP / S. * @hodí ServerException * Signalizuje, že došlo k chybě API oVirt. * @hodí IOException * Signály, že došlo k nějaké I / O výjimce. */ veřejnost Klastr přidat(org.ovirt.motor.sdk.subjekty.Klastr shluk, Tětiva očekávat, Tětiva korelační id) hodí ClientProtocolException, ServerException, IOException { .... }
Reference
- ^ „RESTful Service Description Language (RSDL)“. balisage.net.