搜索

第 4 章 不同语言的 API 请求

download PDF

本章概述了通过 curl、Ruby 和 Python 向 Red Hat Satellite 发送 API 请求,并提供示例。

4.1. 使用 curl 进行 API 请求

本节概述了如何使用 curl 和 Satellite API 执行各种任务。

Red Hat Satellite 需要使用 HTTPS,默认证书进行主机识别。如果您还没有添加 Satellite 服务器证书,如 第 3.1 节 “SSL 身份验证概述” 所述,您可以使用 --insecure 选项绕过证书检查。

对于用户身份验证,您可以使用 --user 选项以 --user username:password 格式提供卫星用户凭证,或者如果您未包含密码,该命令会提示您输入该密码。要降低安全风险,不要将密码包括在命令中,因为它随后成为您的 shell 历史记录的一部分。本节中的示例只包括用于简单起性的密码。

请注意,如果您使用 --silent 选项,curl 不会显示进度计量或任何错误消息。

本章示例使用 Python json.tool 模块来格式化输出。

4.1.1. 将 JSON 数据传递给 API 请求

您可以使用 API 请求将数据传递给卫星服务器。数据必须采用 JSON 格式。当使用 --data 选项指定 JSON 数据时,您必须使用 --header 选项设置以下 HTTP 标头:

--header "Accept:application/json" \
--header "Content-Type:application/json"

使用以下选项之一使用 --data 选项包括数据:

  1. 用大括号 {} 括起的带引号 JSON 格式的数据。当为 JSON 类型参数传递值时,您必须转义引号 " with backslashes \。例如,在大括号中,您必须将 "Example JSON Variable" 格式化为 \"Example JSON Variable\"

    --data {"id":44, "smart_class_parameter":{"override":"true", "parameter_type":"json", "default_value":"{\"GRUB_CMDLINE_LINUX\": {\"audit\":\"1\",\"crashkernel\":\"true\"}}"}}
  2. 未加引号的 JSON 格式数据包括在文件中,并由 @ 符号和文件名指定。例如:

    --data @file.json

    对 JSON 格式的数据使用外部文件有以下优点:

    • 您可以使用您首选的文本编辑器。
    • 您可以使用语法检查器来查找和避免错误。
    • 您可以使用工具检查 JSON 数据的有效性或重新格式化它。

验证 JSON 文件

使用 json_verify 工具检查 JSON 文件的有效性:

$ json_verify < test_file.json

4.1.2. 检索资源列表

本节概述了如何使用 Satellite 6 API 使用 curl 来从 Satellite 部署请求信息。这些示例包括 requests 和 响应。每个部署都有不同的结果。

列出用户

这个示例是返回 Satellite 资源列表的基本请求,本例中为 Satellite 用户。这些请求会返回元数据中嵌套的数据列表,其他请求类型仅返回实际对象。

请求示例:

$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/users | python -m json.tool

响应示例:

{
    "page": 1,
    "per_page": 20,
    "results": [
        {
            "admin": false,
            "auth_source_id": 1,
            "auth_source_name": "Internal",
            "created_at": "2018-09-21 08:59:22 UTC",
            "default_location": null,
            "default_organization": null,
            "description": "",
            "effective_admin": false,
            "firstname": "",
            "id": 5,
            "last_login_on": "2018-09-21 09:03:25 UTC",
            "lastname": "",
            "locale": null,
            "locations": [],
            "login": "test",
            "mail": "example@domain.com",
            "organizations": [
                {
                    "id": 1,
                    "name": "Default Organization"
                }
            ],
            "ssh_keys": [],
            "timezone": null,
            "updated_at": "2018-09-21 09:04:45 UTC"
        },
        {
            "admin": true,
            "auth_source_id": 1,
            "auth_source_name": "Internal",
            "created_at": "2018-09-20 07:09:41 UTC",
            "default_location": null,
            "default_organization": {
                "description": null,
                "id": 1,
                "name": "Default Organization",
                "title": "Default Organization"
            },
            "description": "",
            "effective_admin": true,
            "firstname": "Admin",
            "id": 4,
            "last_login_on": "2018-12-07 07:31:09 UTC",
            "lastname": "User",
            "locale": null,
            "locations": [
                {
                    "id": 2,
                    "name": "Default Location"
                }
            ],
            "login": "admin",
            "mail": "root@example.com",
            "organizations": [
                {
                    "id": 1,
                    "name": "Default Organization"
                }
            ],
            "ssh_keys": [],
            "timezone": null,
            "updated_at": "2018-11-14 08:19:46 UTC"
        }
    ],
    "search": null,
    "sort": {
        "by": null,
        "order": null
    },
    "subtotal": 2,
    "total": 2
}

4.1.3. 创建和修改资源

本节概述了如何使用 curl 和 Satellite 6 API 来操作卫星服务器上的资源。这些 API 调用要求您通过 API 调用以 json 格式传递数据。更多信息请参阅 第 4.1.1 节 “将 JSON 数据传递给 API 请求”

创建用户

这个示例使用 --data 选项创建用户,以提供所需信息。

请求示例:

$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request POST \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"Test Name\",\"mail\":\"test@example.com\",\"login\":\"test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users | python -m json.tool

修改用户

这个示例修改在 创建用户 中创建的 first name 并登录 test_user

请求示例:

$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"New Test Name\",\"mail\":\"test@example.com\",\"login\":\"new_test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users/8 | python -m json.tool
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.