Murano/Blueprints/APIv0.2
Murano vNext API 规范过渡
当前版本和 vNext 之间的一些关键区别在于可扩展性和可插拔的架构。vNext 将能够动态添加新服务,而不会对源代码或配置产生任何干扰。
为了支持上述功能,我们需要稍微更改我们的 API 规范。
变更
API 规范引入了多项变更
- 服务的通用端点
- 树形遍历和集合语法
最大的变化是所有服务的通用端点。 之前我们为每个服务都有像 “/environment/<env_id>/activeDirectories/*” 这样的端点,现在引入了所有服务的单个端点,例如:“/environment/<env_id>/services/*”。
为了使我们的 API 更加用户友好,并减少 API 调用量和发送的数据量,我们还引入了两个互补的功能:树形遍历和集合语法。
树形遍历允许遍历树并选择特定属性。 让我们看一些例子来研究新功能。
我们之前有这样的调用:“/environments/<env_id>/activeDirectories/<service_id>”,它返回包含服务描述的 JSON 对象
{
"id": "96365940588b479294fe8e6dc073db04",
"name": "acme.dc",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"domain": "acme.dc",
"units": [{
"id": "d08887df15b94178b244904b506fe85b",
"isMaster": true,
"location": "west-dc"
}, {
"id": "dcf0de317e7046bea555539f19b8ea84",
"isMaster": false,
"location": "west-dc"
}]
}
所有其他服务描述的操作都由用户完成,但有了新功能,用户可以使用一个调用来选择,例如,domain 字段:“/environments/<env_id>/services/<service_id>/domain”
可以以类似的方式选择单个实体:“/environments/<env_id>/services/<service_id>/units/<unit_id>”
正式规则
- 要从列表中选择单个实体,用户应在属性名称之后指定实体 ID,并将列表作为值<list>/<item_id>。 例如,可以使用上面的 JSON 中的 units 列表。
- 要选择实体上的属性,应指定属性名称<list>/<item_id>/attribute。 选择 domain 字段的示例演示了此规则。
集合语法与树形遍历相结合,允许使用 PUT 调用更改所选属性的值。 例如,我们可以使用以下调用设置 domain 字段的新值:PUT “/environments/<env_id>/services/<service_id>/domain”,并将 domain 字段值作为调用体发送。
将新项目添加到字典的语法几乎相同,但我们使用 POST 调用:POST “/environments/<env_id>/services/<service_id>/units”,并将编码为 JSON 的 unit 对象作为体发送。
过渡
我们的目标之一是尽早且逐一引入新的破坏性 API 变更,以简化 API 稳定阶段向新 API 版本的过渡。 服务通用端点是我们引入 API 的第一个也是最重要的破坏性变更之一。