我们将使用的蓝图将取代参考部分中列出的先前蓝图。
https://blueprints.launchpad.net/openstack-manuals/+spec/api-site
API 参考站点需要更新,并提供更好的方法来维护和提供准确的信息,供使用不同云提供商云资源的应用程序开发者使用。
通过此蓝图,我们希望解决以下问题
此蓝图应提供我们提供上游 API 参考信息给云用户的方式的重大重构。目标受众是应用程序开发者和 SDK 开发者,他们需要关于每个服务 REST API 的精确和准确的信息。这并非内部 API 的信息,例如计算项目 (nova) 用于调度计算主机的 RPC API。这些参考用于构建具有正确请求参数的正确 API 调用,并对照您在进行调用时在屏幕上看到的结果,来双重检查您的云提供商的结果。
目前,OpenStack API Complete Reference 站点上记录了 915 个 GET/PUT/POST/DELETE/PATCH 调用,网址为 https://developer.openstack.org/api-ref.html。
目前,API 参考信息位于单独的仓库 api-site 中。在 kilo 版本(Nov14-Apr15)中,我们将所有“叙述性”信息移动到项目选择的仓库中。对于大多数项目,该位置是 <project>-spec 仓库。对于计算和对象存储,是其项目 doc/source 仓库。API 参考信息仍然在 api-site 仓库中。
随着拥有 REST API 的团队数量超过 20 个,我们需要严格执行 API 参考信息维护和构建的位置。
理想情况下,我们将使团队能够在将所有来源整合到一个易于消费、可读的各种服务 REST API 指南中时进行审查。这些应该是方便的开发者指南,提供对单独来源信息的统一视图。
现在我们已经描述了问题和简要讨论了愿景,让我们来谈谈解决方案。
对于跨多个仓库使用自动化进行参考信息的第一个开发者指南集,其范围将限制为基于最新用户指南调查使用最多的基础设施服务。
但是,在我们进行这个概念验证时,需要维护 WADL,以便我们拥有质量测试目的的基准比较点。
我们希望确保使用当前项目的源代码来创建最准确和最新的 API 参考文档。我们还希望确保审查在最好的审查人员保持警惕的仓库中进行。
因此,作为一个概念验证,编写一个 Python 库,该库使用 Python routes 库来检查源代码并输出一个标准,例如 Swagger 版本 2,该标准可用于文档输出或请求和响应的模拟测试,以便我们最终可以构建一个连续测试层,以确保即使代码发生更改,示例的向后兼容性。
以下是设想的过程概述:#. 执行 git clone 命令以获取项目仓库的副本。 #. 使用 api-paste.ini 文件中的一些配置信息运行自动化脚本以创建 Swagger。 #. 对每个项目重复并测试。
以下是 OpenStack 项目中使用的 Web 服务器网关接口 (wsgi) 框架列表
- Ironic: pecan, wsme
- Nova: routes, JSONSchema
- Cinder: routes
- Glance: routes, JSONSchema
- Neutron: routes
- Trove: routes
- Heat: routes
- Saraha: flask
- Swift: None
- Keystone: routes
- Ceilometer: pecan
- Barbican: pecan
作为参考,这些项目已经在 openstack/api-site 仓库 中记录
API 文档位于其他地方或状态未知
要求包括
编写:信息和来源必须由项目开发者维护和审查,API 工作组知情,文档团队提供支持。
编写:API 参考信息可以自动生成,字符串存储在代码中,或者可以协作编写和审查。有关更多信息,请查看下面的 标准概述。
编写:API 参考信息审查应使用 APIImpact 和 DocImpact 标志。
编写:需要一个用于编写的开源工具链。
输出:输出必须为 SDK 开发者和使用 OpenStack 云资源的应用程序开发者提供出色的体验。可选地,它将为每个调用提供一个“试用”沙箱,在 TryStack 上使用经过身份验证的凭据时。
输出:输出应指示 OpenStack 的哪个版本将支持特定的 API 版本,并在像 Compute 和 Identity 这样的可扩展 API 中,指示特定扩展与哪个版本可用。
输出:由于我们可能需要分阶段的方法来确定时间和范围,因此应与当前文档一起使用,例如使用重定向或集成显示。
构建:必须基于 Gerrit 审查和工作流程进行自动化。
范围:必须在六个月的发布周期内可行。
可选功能
构建:可选地,构建任何云提供商可以消耗并在其客户文档中重用的部分。
合同验证:可选地,提供请求和响应的验证,以验证其有效性并可以针对公共云端点工作。
更改编译:可选地,提供更改列表,以帮助审查人员发现可以修复的措辞、示例中的不一致性、参数命名、更好的人工分组的潜力等。
如上所述,理想情况下,我们使团队能够在将所有来源整合到一个易于消费、可读的指南中时编写和审查 API 信息。上个版本完成的工作,将“叙述性”信息(例如速率限制、版本控制等)放入每个项目管理的仓库中,应重新用于这些开发者指南。
作为临时步骤,我们可以开始将 RST 来源的信息发布到 https://developer.openstack.org/api-guide/compute,来自 http://git.openstack.org/cgit/openstack/nova/tree/doc/source/v2 信息。作为单独的项目发布意味着需要为具有这些类型概念文档的每个服务添加单独的 index.rst 和 conf.py 构建。
此外,在 https://developer.openstack.org/ 登录页面上添加一列,链接到每个服务的概念信息,该列位于 API 参考旁边。
以下是当前指向 API 概念信息的链接:https://docs.openstack.org/developer/nova/v2/index.html https://docs.openstack.org/developer/swift/#object-storage-v1-rest-api-documentation https://specs.openstack.org/openstack/glance-specs/#image-service-v2-api https://specs.openstack.org/openstack/glance-specs/#image-service-v1-api https://specs.openstack.org/openstack/keystone-specs/#v3-api https://specs.openstack.org/openstack/keystone-specs/#v2-0-api https://specs.openstack.org/openstack/neutron-specs/#api-specs https://specs.openstack.org/openstack/cinder-specs/#volume-v2-api
通过构建和更突出地链接,我们希望增加对应用程序和 SDK 开发者的有用信息的集合。
此文档的参考部分应遵循行业标准。REST API 文档多年来不断发展,并且最近有一些标准变得流行
使用 Python routes 方法,我们可以首先写入 Swagger 2.0 规范,然后编写另一个用于 RAML 的词法分析器(如果需要)。
JSON 模式可能需要用于我们的 API 请求验证,以查看合同是否得到遵守。JSON 模式是一种用于定义 JSON 数据结构的 JSON 媒体类型,例如来自 REST API 服务的请求。JSON 模式为给定应用程序需要什么 JSON 数据以及如何与之交互提供合同。例如,请求参数,其中许多被定义为“纯”参数,并且其中一些在请求中具有多个基于数组的需求,这些需求必须使用 JSON 模式定义。
示例:这是一个将个性添加到 Create Server POST /v2/{tenant_id}/servers 的示例请求
"personality": [
{
"path": "/etc/banner.txt",
"contents": "ICAgICAgDQo...mQgQmFjaA=="
}
]
Russell Sim 已经为 Volume API v2 进行了概念验证。他可以上传一个示例供团队其余成员开始工作。他调查了使用 httpdomain,但似乎这需要依赖生产中的 Sphinx,激怒打包者和操作员。相反,他正在制作一个用 docutils 编写的兼容解析器。这样,我们希望以后能够重用文档来使用 Sphinx 构建,但不必将 Sphinx 作为运行时依赖项。
CORS 跨项目规范 应该有助于使用 AngularJS 显示结果,因为它是一个类似的想法。
Identity v3 在核心中具有最多的调用,为 74 个,但 Compute v2 加上扩展程序具有超过 120 个调用。
目前,创建 API 参考信息的 openstack/api-site 仓库记录了最后两个稳定版本。我们当前的策略是不合并任何 API 的 master 版本的更改,因为最终用户通常无法访问具有该更改的云。
对于此规范中的新方法,示例是基于遍历源代码生成的,因此我们的工具首先必须应用于 cinder stable/juno 并输出,例如。接下来,将工具应用于 cinder stable/kilo 分支并生成输出。为了测试目的,可以将该工具应用于 cinder master 分支,并在发生向后不兼容的更改时发出标志,或者在示例发生更改时发出标志,并注意发布说明中的更改。应按调用显示版本和微版本。
可以保留我们当前在 api-site 和 WADL 中的内容。但是,这需要继续使用 clouddocs-maven-plugin 进行构建,而该插件目前没有维护者。
等待出现支持微版本、多个响应以及我们所有 API 设计所需功能的标准。当前标准(WADL、Swagger、RAML)都不支持微版本,因此我们需要开辟自己的道路以确保未来的可维护性和为 OpenStack 云编写代码的应用程序开发人员。
使用 Volume v2 服务自动生成 API 参考信息的概念验证。
概念验证,将信息聚合到各自的 doc/source 目录中的单独仓库中。
新开发者指南的 Web 设计和开发。
信息架构,确定应在 https://developer.openstack.org/ 上发布交付成果的位置。
修复 WADL 中发现的不一致之处。
编写用于修改的 Swagger (Swaggerish) 的 JSON Schema,以支持在同一 URL 上使用多种请求/响应类型,例如 Orchestration actions 资源:https://developer.openstack.org/api-ref-orchestration-v1.html#stack_action_suspend https://developer.openstack.org/api-ref-orchestration-v1.html#stack_action_resume 或者 Compute server actions 资源:https://developer.openstack.org/api-ref-compute-v2.html#compute_server-actions
定义包含在 Swagger Tag 中的文档。例如,WADL 和 DocBook 中存在大量的叙述性或概念性信息,我们需要将其集成到整体开发指南中。我们可以开发一个带有命名方案的 Tag 层次结构,例如
server server::actions server::metadata server::actions
然后使用 Tag 来设计前端。
通过将现有内容发布到 developer.openstack.org/api-guides/<servicename> 来呈现现有的概念性信息。
迁移工作项:在替换完成后删除 api-site/api-ref 中的 WADL 文件。为 api-site 创建一个特性分支。准备 developer.openstack.org 网站以进行过渡,包括 DevStack 安装、CORS 支持以及开发指南的整体信息架构。创建用于呈现信息的的前端设计。两个 POC:默认 Swagger UI http://fairy-slipper.russellsim.org/swagger-ui/ Stripe-like Swagger UI (来自 jensoleg):http://fairy-slipper.russellsim.org/swagger-ui-jensoleg/
与此规范相关的先前未实现的设计蓝图
附加信息
除非另有说明,本文档根据 知识共享署名 3.0 许可协议 授权。请参阅所有 OpenStack 法律文件。