跳转到: 导航, 搜索

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 的第一个也是最重要的破坏性变更之一。