高效轮询

REST API 允许您通过对各种元素执行 GET 请求来轮询某些操作的状态。为了避免在每个轮询间隔重新下载和重新解析完整的状态,您的 REST 客户端可以使用 changes-since 和/或 changes-before 参数来检查在指定时间段内的更改。

changes-since 时间或 changes-before 时间应指定为 ISO 8601 日期时间 (2011-01-24T17:08Z)。时间戳的格式为 CCYY-MM-DDThh:mm:ss。可以通过附加 ±hh:mm 的形式来写入可选的时区,该形式描述了时区相对于 UTC 的偏移量。如果未指定时区 (2011-01-24T17:08),则假定为 UTC 时区。

需要考虑以下情况

  • 如果在 changes-since 时间之后没有发生任何更改,则返回一个空列表。如果数据已更改,则响应中仅返回自指定时间以来更改的项目。例如,对以下地址执行 GET 请求

    https://api.servers.openstack.org/v2.1/servers?changes-since=2015-01-24T17:08Z
    

    将列出自 2015 年 1 月 24 日星期一 17:08:00 UTC 以来发生更改的所有服务器。

  • 如果在 changes-before 时间之前或等于该时间没有发生任何更改,则返回一个空列表。如果数据已更改,则响应中仅返回早于或等于指定时间更改的项目。例如,对以下地址执行 GET 请求

    https://api.servers.openstack.org/v2.1/servers?changes-before=2015-01-24T17:08Z
    

    将列出早于或等于 2015 年 1 月 24 日星期一 17:08:00 UTC 发生更改的所有服务器。

  • 如果在晚于或等于 changes-since 或早于或等于 changes-before 时没有发生任何更改,则返回一个空列表。如果数据已更改,则响应中仅返回在 changes-since 时间和 changes-before 时间之间更改的项目。例如,对以下地址执行 GET 请求

    https://api.servers.openstack.org/v2.1/servers?changes-since=2015-01-24T17:08Z&changes-before=2015-01-25T17:08Z
    

    将列出晚于或等于 2015 年 1 月 24 日星期一 17:08:00 UTC 且早于或等于 2015 年 1 月 25 日星期一 17:08:00 UTC 发生更改的所有服务器。

关于 changes-sincechanges-before 的服务器、实例操作和迁移的微版本更改历史记录

  • 2.21 微版本 允许读取已删除服务器资源的实例操作。

  • 2.58 微版本 允许在列出服务器的实例操作时按 changes-since 进行筛选。

  • 2.59 微版本 允许在列出迁移记录时按 changes-since 进行筛选。

  • 2.66 微版本 在列出服务器、实例操作和迁移时添加了 changes-before 筛选器。

changes-since 筛选器或 changes-before 筛选器不会更改 os-instance-actions 或 os-migrations API 中的任何已读取删除行为。使用 2.21 微版本的 os-instance-actions API 允许检索已删除服务器资源的实例操作。os-migrations API 接受可选的 instance_uuid 筛选器参数,但不支持返回已删除的迁移记录。

为了允许客户端跟踪更改,changes-since 筛选器和 changes-before 筛选器显示最近删除的项目。服务器包含一个 DELETED 状态,指示该资源已被删除。实现不需要无限期地跟踪已删除的资源,因此发送一个 changes-since 时间或一个 changes-before 时间到遥远的过去可能会错过删除操作。