本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode
过滤 API¶
需要讨论¶
更新:¶
目前,通配符不受限制,但由于扩展性问题,未来可能需要添加限制。此外,为了解决通配符匹配中的一个错误 (https://bugs.launchpad.net/designate/+bug/1335902) 并符合标准,通配符字符已从 ‘%’ 更改为 ‘*’。
之前的讨论:¶
问题描述¶
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 |
|
从指定的记录集中,返回名称与指定的过滤器(“name”)完全匹配的任何记录。 |
GET |
|
从指定的记录集中,返回名称以指定的“name”属性开头的任何记录。 |
GET |
|
从指定的记录集中,返回名称以指定的“name”属性结尾的任何记录。 |
GET |
|
从指定的记录集中,返回名称在通配符两侧都包含指定名称数据的任何记录。 |
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 更改基本上已经完成。潜在的未来更改示例包括:* 限制通配符搜索(当前通配符搜索不受限制)* 添加更多可以过滤的属性
依赖项¶
无