3.6. 服务
服务是负责检索、添加更新、删除和执行 API 支持的对象操作的服务器的一部分。
有两种相关的服务:
每一服务都可通过服务器中的特定路径访问。例如,可以通过路径 /vms
在 中管理系统中可用的虚拟机集合的服务,以及管理虚拟机 123 的服务可通过路径 /vms/123
获取
。
所有类型的服务都具有一组方法,表示它们可以执行的操作。管理对象集合的服务通常具有 列表
和 添加
方法。管理特定对象的服务通常具有 get
、update和
remove
方法。此外,服务也可能具有代表较少常见操作的操作方法。例如,Vm 服务具有一个用于启动虚拟机的 start 方法。
对于更常用的方法,方法名称和 HTTP 方法名称之间存在直接映射:
方法名称 | HTTP 方法 |
---|---|
| POST |
| GET |
| GET |
| PUT |
| 删除 |
HTTP 请求中使用的路径是服务的路径,其前缀为 /ovirt-engine/api
。
例如,列出
虚拟机的请求应如下所示,使用 HTTP GET
方法和路径 /vms
:
GET /ovirt-engine/api/vms
对于操作方法,HTTP 方法始终为 POST
,方法的名称作为后缀添加到路径中。例如,启动虚拟机 123 的请求 应
如下所示,使用 HTTP POST
方法和路径 /vms/123/start
:
POST /ovirt-engine/api/vms/123/start
每种方法具有一组参数。
参数分为两类:
- main 参数
-
main 参数对应检索、添加或更新的对象或集合。这只适用于
add
、get
、列表
和更新
方法,每个方法正好有一个这样的主参数。 - 辅助参数
- 其余的参数.
例如,添加虚拟机的操作(请参阅 此处)具有三个参数:vm 、
克隆和 clone
_permissions
。主要参数是 vm
,因为它描述了要添加的对象。clone
和 clone_permissions
参数是辅助参数。
用于输入的主要参数必须包含在 HTTP 请求的正文中。例如,在添加虚拟机时,类型为 Vm 的 vm
参数必须包含在请求正文中。因此,添加虚拟机的完整请求(包括所有 HTTP 详情)必须如下所示:
POST /ovirt-engine/api/vms HTTP/1.1 Host: myengine.example.com Authorization: Bearer fqbR1ftzh8wBCviLxJcYuV5oSDI= Content-Type: application/xml Accept: application/xml <vm> <name>myvm</name> <description>My VM</description> <cluster> <name>Default</name> </cluster> <template> <name>Blank</name> </template> </vm>
当用于输出时,主要参数包含在响应正文中。例如,添加虚拟机时,vm
参数将包含在响应正文中。因此,完整的响应正文如下所示:
HTTP/1.1 201 Created Content-Type: application/xml <vm href="/ovirt-engine/api/vms/123" id="123"> <name>myvm</name> <description>My VM</description> ... </vm>
辅助参数仅允许进行输入(操作方法除外,稍后介绍),且必须作为查询参数包含。例如,当添加将 clone
参数设置为 true
的虚拟机时,完整的请求必须如下所示:
POST /ovirt-engine/api/vms?clone=true HTTP/1.1 Host: myengine.example.com Authorization: Bearer fqbR1ftzh8wBCviLxJcYuV5oSDI= Content-Type: application/xml Accept: application/xml <vm> <name>myvm</name> <description>My VM</description> <cluster> <name>Default</name> </cluster> <template> <name>Blank</name> </template> </vm>
操作方法仅具有次要参数。它们可用于输入和输出,并且它们应包含在请求正文中,并用 action
元素打包。例如,用于启动虚拟机的操作方法(请参阅 此处)有一个 vm
参数,用于描述应当如何启动虚拟机,以及用于指定是否应使用 cloud-init 参数来配置客户机操作系统 的 use_cloud_ init
参数。因此,在使用 XML 时,使用 cloud-init 启动虚拟机 123
的完整请求将如下所示:
POST /ovirt-engine/api/vms/123/start HTTP/1.1 Host: myengine.example.com Authorization: Bearer fqbR1ftzh8wBCviLxJcYuV5oSDI= Content-Type: application/xml Accept: application/xml <action> <use_cloud_init>true</use_cloud_init> <vm> <initialization> <nic_configurations> <nic_configuration> <name>eth0</name> <on_boot>true</on_boot> <boot_protocol>static</boot_protocol> <ip> <address>192.168.0.100</address> <netmask>255.255.255.0</netmask> <gateway>192.168.0.1</netmask> </ip> </nic_configuration> </nic_configurations> <dns_servers>192.168.0.1</dns_servers> </initialization> </vm> </action>