移除 API 进程中的 d6cage 依赖

https://blueprints.launchpad.net/congress/+spec/dist-remove-d6cage-from-api

移除 d6cage 依赖

问题描述

API 服务器目前依赖 d6cage 来创建新的 API 实例。Congress 将在下一个分布式架构中移除 d6cage。因此需要移除 API 实例创建对 d6cage 的依赖。

提议的变更

  1. 引入一个新的字典对象来创建 API 模型实例。该字典包含对每个 API 实例的引用,这些实例之前 d6cage 作为 services[name][‘object’] 存储。然后 router.py:APIRouterV1 使用这些引用来注册 API 与实例。

  2. 更改某些实例的基类,这些实例不需要是 deepsix 类。这个 BP 还将这些类型的类更改为 Python 普通对象。SchemaModel 和 DatasourceModel 在当前架构和分布式架构中都不需要是 deepSix 的子类。其他实例在新的分布式架构中也不需要是 deepSix 的子类。

如何更改为分布式版本

它用一个新的 API 实例创建方法替换了 service.py:congress_app_factory() 中调用 harness.py:create() 的方式,该方法在 harness.py:create() 中包含 API 模型的实例化步骤。并且仅用于创建包含新实例的字典。

备选方案

另一种方法是将 harness.py:create() 中的代码分散到 router.py:APIRouterV1.__init__() 中。这种更改在当前单进程解决方案中更容易跟踪。

如何更改为分布式版本

需要将 APIRouterV1.__init__() 中的所有 d6cage.createservice() 替换为新的 API 实例创建方法。为此我们需要更改很多地方。因此这种方式是这个 BP 的替代方案。

策略

N/A

策略动作

N/A

数据源

N/A

数据模型影响

N/A

REST API 影响

N/A

安全影响

N/A

通知影响

N/A

其他最终用户影响

N/A

性能影响

N/A

其他部署者影响

N/A

开发者影响

N/A

实现

负责人

主要负责人

muroi-masahito

其他贡献者

<launchpad-id 或 None>

工作项

  1. 创建一个新的字典来保存对 API 实例的引用

  2. 将其作为参数传递给 router.py:APIRouterV1()

  3. 使用它来注册 API 和实例

  4. 移除不需要从 d6cage 继承 deepsix 的 API 实例

  5. 将直接变量访问更改为通过方法间接访问

依赖项

N/A

测试

  • 如果需要,更改非 deepsix 对象的单元测试

文档影响

N/A

参考资料

N/A