移除 API 进程中的 d6cage 依赖¶
https://blueprints.launchpad.net/congress/+spec/dist-remove-d6cage-from-api
移除 d6cage 依赖
问题描述¶
API 服务器目前依赖 d6cage 来创建新的 API 实例。Congress 将在下一个分布式架构中移除 d6cage。因此需要移除 API 实例创建对 d6cage 的依赖。
提议的变更¶
引入一个新的字典对象来创建 API 模型实例。该字典包含对每个 API 实例的引用,这些实例之前 d6cage 作为 services[name][‘object’] 存储。然后 router.py:APIRouterV1 使用这些引用来注册 API 与实例。
更改某些实例的基类,这些实例不需要是 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>
工作项¶
创建一个新的字典来保存对 API 实例的引用
将其作为参数传递给 router.py:APIRouterV1()
使用它来注册 API 和实例
移除不需要从 d6cage 继承 deepsix 的 API 实例
将直接变量访问更改为通过方法间接访问
依赖项¶
N/A
测试¶
如果需要,更改非 deepsix 对象的单元测试
文档影响¶
N/A
参考资料¶
N/A