使用 JSON Home 进行 API 发现

什么是 JSON Home?

JSON Home 描述了一种为非浏览器 HTTP 客户端进行 API 发现的方法。 草案 仍在审查中,但 keystone 提供了一个可供最终用户访问的实现。 调用 keystone 的 JSON Home API 的结果是一个 JSON 文档,该文档告知用户有关 API 端点、查找它们的位置,甚至有关 API 状态的信息(例如,实验性、受支持、已弃用)。 关于 keystone 的 JSON Home 实现的更多信息可以在 规范 中找到。

请求 JSON Home 文档

请求 keystone 的 JSON Home 文档非常简单。 API 不需要令牌,但未来的实现可能会扩展其保护,包括令牌验证和强制执行。 要获取 JSON Home 文档,只需使用 application/json-homeAccept 标头中指定即可

curl -X GET -H "Accept: application/json-home" http://example.com/identity/

结果将是一个包含 resources 列表的 JSON 文档

{
    "resources": [
        "https://docs.openstack.org/api/openstack-identity/3/ext/OS-TRUST/1.0/rel/trusts": {
            "href": "/v3/OS-TRUST/trusts"
        },
        "https://docs.openstack.org/api/openstack-identity/3/ext/s3tokens/1.0/rel/s3tokens": {
            "href": "/v3/s3tokens"
        },
        "https://docs.openstack.org/api/openstack-identity/3/rel/application_credential": {
            "href-template": "/v3/users/{user_id}/application_credentials/{application_credential_id}",
            "href-vars": {
                "application_credential_id": "https://docs.openstack.org/api/openstack-identity/3/param/application_credential_id",
                "user_id": "https://docs.openstack.org/api/openstack-identity/3/param/user_id"
            }
        },
        "https://docs.openstack.org/api/openstack-identity/3/rel/auth_catalog": {
            "href": "/v3/auth/catalog"
        },
        "https://docs.openstack.org/api/openstack-identity/3/rel/auth_domains": {
            "href": "/v3/auth/domains"
        },
        "https://docs.openstack.org/api/openstack-identity/3/rel/auth_projects": {
            "href": "/v3/auth/projects"
        },
        "https://docs.openstack.org/api/openstack-identity/3/rel/auth_system": {
            "href": "/v3/auth/system"
        },
        ...
    ]
}

然后可以根据关系的键解析资源列表,以获取有关该端点的字典数据。 这包括一个路径,用户可以在其中找到与该特定资源的端点进行交互的位置。 API 状态信息也将存在。