第 3 章 REST API 快速入门介绍

本章提供了一个实例,它展示了使用 REST API 设置一个基本的 Red Hat Enterprise Virtualization 环境并创建一个虚拟机的方法。
除了前面提到的标准先决条件外,这个实例还需要以下条件:
  • 一个包括了 Red Hat Enterprise Virtualization Hypervisor 的、已经联网并配置的主机;
  • 包括了需要安装的虚拟机操作系统的 ISO 文件。在这个实例中我们使用 Red Hat Enterprise Linux Server 6 作为虚拟机的操作系统;
  • Red Hat Enterprise Virtualization 提供的、用来上传操作系统 ISO 文件的 engine-iso-uploader 工具程序。
这个实例使用 cURL 来演示到客户端应用程序的 REST 请求。任何支持 HTTP 请求的程序都可以替代这里的 cURL

重要

为了简化,这个实例中的 HTTP 请求头中都省略掉了 Host:Authorization: 项。这些项是强制的项,它们需要和您所安装的 Red Hat Enterprise Virtualization Manager 相对应。

重要

所有的 cURL 实例中的验证信息和证书位置都使用替换符(分别是 USER:PASSCERT)。请确认 cURL 的所有请求都包括相关的验证信息。

注意

Red Hat Enterprise Virtualization Manager 会为每个资源的 id 属性生成一个 GUID。这里所使用的值可能会和您实际使用的 Red Hat Enterprise Virtualization 环境中的值不同。

3.1. 实例:访问 API 进入点(API Entry Point)

以下请求会获得 API 主进入点的表述。

例 3.1. 访问 API 的进入点

请求:

GET /api HTTP/1.1
Accept: application/xml

cURL 命令:

# curl -X GET -H "Accept: application/xml" -u [USER:PASS] \
    --cacert [CERT] https://[RHEVM Host]:443/api

结果:

HTTP/1.1 200 OK
Content-Type: application/xml

<api>
    <link rel="capabilities" href="/api/capabilities"/>
    <link rel="clusters" href="/api/clusters"/>
    <link rel="clusters/search" href="/api/clusters?search={query}"/>
    <link rel="datacenters" href="/api/datacenters"/>
    <link rel="datacenters/search" href="/api/datacenters?search={query}"/>
    <link rel="events" href="/api/events"/>
    <link rel="events/search" href="/api/events?search={query}"/>
    <link rel="hosts" href="/api/hosts"/>
    <link rel="hosts/search" href="/api/hosts?search={query}"/>
    <link rel="networks" href="/api/networks"/>
    <link rel="roles" href="/api/roles"/>
    <link rel="storagedomains" href="/api/storagedomains"/>
    <link rel="storagedomains/search" href="/api/storagedomains?search={query}"/>
    <link rel="tags" href="/api/tags"/>
    <link rel="templates" href="/api/templates"/>
    <link rel="templates/search" href="/api/templates?search={query}"/>
    <link rel="users" href="/api/users"/>
    <link rel="groups" href="/api/groups"/>
    <link rel="domains" href="/api/domains"/>
    <link rel="vmpools" href="/api/vmpools"/>
    <link rel="vmpools/search" href="/api/vmpools?search={query}"/>
    <link rel="vms" href="/api/vms"/>
    <link rel="vms/search" href="/api/vms?search={query}"/>
    <special_objects>
        <link rel="templates/blank"
          href="/api/templates/00000000-0000-0000-0000-000000000000"/>
        <link rel="tags/root"
          href="/api/tags/00000000-0000-0000-0000-000000000000"/>
    </special_objects>
    <product_info>
        <name>Red Hat Enterprise Virtualization</name>
        <vendor>Red Hat</vendor>
        <version revision="0" build="0" minor="0" major="3"/>
    </product_info>
    <summary>
        <vms>
            <total>5</total>
            <active>0</active>
        </vms>
        <hosts>
            <total>1</total>
            <active>1</active>
        </hosts>
        <users>
            <total>1</total>
            <active>1</active>
        </users>
        <storage_domains>
            <total>2</total>
            <active>2</active>
        </storage_domains>
    </summary>
</api>

进入点为用户提供了虚拟环境中的集合连接。每个集合连接的 rel= 属性提供了到这个连接的参考点。这个实例的下一步会检查 datacenter 集合(连接是 rel="datacenter")。
进入点还包括了 product_infospecial_objectssummary 等其它信息。这些信息没有包括在这个实例中。