本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode

过滤 API

需要讨论

更新:

目前,通配符不受限制,但由于扩展性问题,未来可能需要添加限制。此外,为了解决通配符匹配中的一个错误 (https://bugs.launchpad.net/designate/+bug/1335902) 并符合标准,通配符字符已从 ‘%’ 更改为 ‘*’。

之前的讨论:

http://paste.openstack.org/show/85431/

问题描述

https://blueprints.launchpad.net/designate/+spec/example

过滤功能提供了一种限定从 designate API 查询返回的结果集的能力。最终,它将在所有集合上可用 - 区域、记录集、记录集的 rdata 和池。

过滤将使用与被过滤属性名称匹配的查询参数进行控制。并非所有属性都必须作为过滤目标可用,但大部分属性将会。

过滤器可以是精确匹配或通配符匹配,通过是否存在保留的通配符字符 (‘*’) 来指定。

如果过滤请求成功,则返回通过过滤标准的资源,以及用于检索更多详细信息的链接。

结果分页将利用提议的 Designate 分页 (https://blueprints.launchpad.net/designate/+spec/pagination)

提议的变更

过滤与搜索:澄清

注意:过滤和搜索是两个完全不同的功能,将分别解决。搜索涉及从存储中编译结果列表的能力,可能从许多不同的地方获取(例如,查找租户的所有具有特定 IP 地址的 A 记录)。过滤仅涉及进一步限制 API 提供的标准查询(例如,/zones、/zones/{id}/recordsets 等)。

您可以在 这里 找到搜索的 wiki

API 变更

  • 基本过滤

    • 黑名单:pattern

    • 记录集:name, type, ttl, data

    • TLD:name

    • 区域:name

  • 使用 SQL 模式匹配的通配符搜索

以下示例演示了通常使用过滤进行的调用类型。这些调用适用于上述所有过滤参数。

动词

Resource

描述

GET

zones/{id}/recordsets/{id}/recordsets?

name=www.example.com

从指定的记录集中,返回名称与指定的过滤器(“name”)完全匹配的任何记录。

GET

zones/{id}/recordsets/{id}/recordsets?

name=www.test*

从指定的记录集中,返回名称以指定的“name”属性开头的任何记录。

GET

zones/{id}/recordsets/{id}/recordsets?

name=*.com

从指定的记录集中,返回名称以指定的“name”属性结尾的任何记录。

GET

zones/{id}/recordsets/{id}/recordsets?

name=www.*.com

从指定的记录集中,返回名称在通配符两侧都包含指定名称数据的任何记录。

GET zones/{zone-id}/recordsets?name=example*

此调用是特权用户使用通配符匹配,针对一个租户过滤记录集。

请求

GET zones/{zone-id}/recordsets?name=example*
Host: dns.provider.com
Accept: application/json

响应

{
    "recordsets": [
        {
            "description": null,
            "links": {
                "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets/948a0233-abdf-434e-a003-c5d682daf0ea"
            },
            "updated_at": null,
            "records": [],
            "ttl": null,
            "id": "948a0233-abdf-434e-a003-c5d682daf0ea",
            "name": "example.com.",
            "zone_id": "a4e29ed3-d7a4-4e4d-945d-ce64678d3b94",
            "created_at": "2014-07-08T20:28:27.000000",
            "priority": [],
            "version": 1,
            "type": "NS"
        },
        {
            "description": null,
            "links": {
                "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets/7da6119a-8b41-4f09-a2b7-a44ed2c9ebd0"
            },
            "updated_at": null,
            "records": [
                "mail2.example.org.",
                "mail.example.org."
            ],
            "ttl": null,
            "id": "7da6119a-8b41-4f09-a2b7-a44ed2c9ebd0",
            "name": "example.org.",
            "zone_id": "a4e29ed3-d7a4-4e4d-945d-ce64678d3b94",
            "created_at": "2014-07-08T20:28:28.000000",
            "priority": [
                20,
                10
            ],
            "version": 1,
            "type": "MX"
        }
    ],
    "links": {
        "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets?name=example%2A"
    }
}

GET zones/{zone-id}/recordsets?name=example.org.

此调用是客户使用精确匹配过滤记录集。

请求

GET zones/{zone-id}/recordsets?name=www.example.org.
Host: dns.provider.com
Accept: application/json

响应

{
    "recordsets": [
        {
            "description": null,
            "links": {
                "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets/7da6119a-8b41-4f09-a2b7-a44ed2c9ebd0"
            },
            "updated_at": null,
            "records": [
                "mail2.example.org.",
                "mail.example.org."
            ],
            "ttl": null,
            "id": "7da6119a-8b41-4f09-a2b7-a44ed2c9ebd0",
            "name": "example.org.",
            "zone_id": "a4e29ed3-d7a4-4e4d-945d-ce64678d3b94",
            "created_at": "2014-07-08T20:28:28.000000",
            "priority": [
                20,
                10
            ],
            "version": 1,
            "type": "MX"
        }
    ],
    "links": {
        "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets?name=example%2A"
    }
}

GET zones/{zone-id}/recordsets?data=1.2.3.*

此调用是希望查找区域中包含一个或多个匹配数据值(应用通配符)记录的客户。数据参数可以与其他参数结合使用。

请求

GET zones/{zone-id}/recordsets?data=1.2.3.*
Host: dns.provider.com
Accept: application/json

响应

{
    "recordsets": [
        {
            "description": null,
            "links": {
                "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets/077ce2b4-1d52-4c3f-8c70-07dfddeed5cc"
            },
            "updated_at": null,
            "records": [
                "1.2.3.4"
            ],
            "ttl": null,
            "id": "077ce2b4-1d52-4c3f-8c70-07dfddeed5cc",
            "name": "dns2.example.com.",
            "zone_id": "a4e29ed3-d7a4-4e4d-945d-ce64678d3b94",
            "created_at": "2014-07-08T20:28:26.000000",
            "priority": [
                null
            ],
            "version": 1,
            "type": "A"
        },
        {
            "description": null,
            "links": {
                "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets/758004fe-4f0f-4756-a8f3-ee01ca5db8a2"
            },
            "updated_at": null,
            "records": [
                "1.2.3.10"
            ],
            "ttl": null,
            "id": "758004fe-4f0f-4756-a8f3-ee01ca5db8a2",
            "name": "mail2.example.com.",
            "zone_id": "a4e29ed3-d7a4-4e4d-945d-ce64678d3b94",
            "created_at": "2014-07-08T20:28:20.000000",
            "priority": [
                null
            ],
            "version": 1,
            "type": "A"
        }
    ],
    "links": {
        "self": "http://192.168.33.8:9001/v2/zones/a4e29ed3-d7a4-4e4d-945d-ce64678d3b94/recordsets?data=1.2.3.*"
    }
}

Central 变更

未来可能会对通配符过滤的使用施加一些限制。

Storage 变更

其他变更

替代方案

实现

负责人

里程碑

工作项

上述 API 更改基本上已经完成。潜在的未来更改示例包括:* 限制通配符搜索(当前通配符搜索不受限制)* 添加更多可以过滤的属性

依赖项