一致的服务方法名称¶
https://blueprints.launchpad.net/tempest/+spec/consistent-service-method-names
使服务方法名称保持一致
问题描述¶
服务客户端是 Tempest 自有的 REST 客户端,用于操作每个 OpenStack 项目的 API。我们计划将服务客户端的方法迁移到 tempest-lib。然而,这些方法名称不一致,从库用户的角度来看,使用这些方法会比较困难。因此,在迁移之前,我们需要使这些名称保持一致,并建立保持一致的方法。
提议的变更¶
基本上,所有方法名称都应为“<动词>_<资源/对象名称>”,而不是“<资源/对象名称>_<动词>”。以下是我们需要考虑 REST API 方法名称时需要遵循的模式。
POST /resources (创建资源)
PUT /resources/<id> (更新资源)
DELETE /resources/<id> (删除资源)
GET /resources (获取资源列表)
GET /resources/<id> (获取资源的详细信息)
https://etherpad.openstack.org/p/tempest-consistent-service-method-names 是当前方法名称的调查。基于调查结果,本规范提出了每种模式下一致的方法名称。此外,本规范还提出了用于保持一致方法名称的 hacking 检查。补丁 https://review.openstack.org/168762 是这些 hacking 检查的原型。详细信息如下。
POST /resources¶
命名规则:“create_<资源名称>”
所有创建方法都遵循此规则,因此我们不需要重命名创建方法。此规则的 hacking 检查是“如果一个方法调用 self.post(),则该方法名称应为 create_<资源名称>”。
PUT /resources/<id>¶
命名规则:“update_<资源名称>”
所有更新方法都遵循此规则,因此我们不需要重命名更新方法。此规则的 hacking 检查是“如果一个方法调用 self.put(),则该方法名称应为 update_<资源名称>”。
DELETE /resources/<id>¶
命名规则:“delete_<资源名称>”
删除方法有两种模式:“delete_<资源名称>”和“remove_<资源名称>”。“delete_<资源名称>”的数量为 72,另一种的数量为 11。此外,“delete_<资源名称>”是一个简单的名称,因为它与 HTTP 方法相同。此规则的 hacking 检查是“如果一个方法调用 self.delete(),则该方法名称应为 delete_<资源名称>”。
GET /resources¶
命名规则:“list_<资源名称>s”
列出资源有三种模式:“list_<资源名称>s”、“get_<资源名称>_list”和“<资源名称>_list”。第一个的数量为 115,第二个的数量为 3,第三个的数量为 2。
一些 Nova API 提供带有详细信息的资源列表,例如 ‘os-hypervisors/detail’ 和 ‘os-availability-zone/detail’。这些方法名称现在是 get_hypervisor_list_details 和 get_availability_zone_list_detail。本规范建议将这些方法合并到此命名规则中,例如
list_availability_zones(self, detail=False):
url = 'os-availability-zone'
if detail:
url += '/detail'
resp, body = self.get(url)
..
通过添加 detail 参数。“GET /resources”和“GET /resources/<id>”调用相同的方法 self.get() 来向服务器发送请求。因此,很难检查调用 self.get() 的方法应基于“GET /resources”或“GET /resources/<id>”的规则。因此,本规范建议对“GET /resources”或“GET /resources/<id>”使用相同的 hacking 检查。这意味着 hacking 检查是“如果一个方法调用 self.get(),则该方法名称应为 show_<资源名称> 或 list_<资源名称>s”。
GET /resources/<id>¶
命名规则:“show_<资源名称>”
获取资源的详细信息有两种模式:“show_<资源名称>”和“get_<资源名称>”。第一个的数量为 12,第二个的数量为 126。因此,第二个的数量更大。但是,本规范建议将所有“GET /resources/<id>”方法命名为“show_<资源名称>”,以明确与用于“GET /resources”的方法的区别。还有用于“GET /resources”的方法,并且一些资源名称在单数名词和复数名词之间是相同的,例如 “chassis”。因此,最好避免使用“get_<资源名称>”以明确方法行为。此规则的 hacking 检查在上面提到过。
为每个资源分离服务客户端模块¶
一些服务客户端在一个模块中包含多个资源的的方法。例如,server_client 模块包含“/servers”和“/server_groups”的方法。当前模块的分离是不一致的,本规范建议所有服务客户端模块都将分离为每个资源的单个模块。此外,当前服务客户端的模块名称包含“JSON”,我们需要删除它们。因为当前服务客户端仅支持 JSON,并且这些名称中的“JSON”现在没有意义。
实现¶
负责人¶
主要负责人
Ken’ichi Ohmichi <oomichi@mxs.nes.nec.co.jp>
其他贡献者
Masayuki Igawa <igawa@mxs.nes.nec.co.jp>
里程碑¶
- 完成目标里程碑
Liberty
工作项¶
根据此提案重命名服务客户端的方法。
根据此提案重命名服务客户端的类。
按资源分离服务客户端的模块。
添加基于此提案的 hacking 规则。
参考资料¶
我们在温哥华峰会上讨论了这些工作项目。日志是 https://etherpad.openstack.org/p/YVR-QA-Tempest-service-clients