云应用开发:命令行界面与公共 API 的实用指南
1. 多平台移动应用构建示例
Ionic 网站展示了一个使用工具包构建多平台移动应用的简单示例,该工具包可最大化复用通用代码。一个团队使用 Ionic 为 2021 年企业应用峰会(EAS)构建了一款应用,此应用具备会议软件的标准功能,如让参会者浏览演讲、制定日程以及为感兴趣的演讲设置提醒。由于采用 Ionic 构建,内容不仅能在安卓和 iPhone 设备间共享,还能与网站共享,因为大部分内容以单页应用形式实现。
2. 命令行界面(CLI)
2.1 CLI 的需求背景
当开发云应用(如云原生应用)时,用户需要客户端应用与云应用交互。若用户希望以重复或自动化方式操作,如批量加载、批量更改或按计划执行活动,传统的图形用户界面(WIMP 范式)可能存在局限性。例如,在活动报名场景中,若仅依赖移动应用或浏览器应用,在截止时间前检查报名情况并取消活动的功能可能无法实现,除非开发者添加此功能,且使用 API 也并非易事。
2.2 构建 CLI
为解决上述问题,需构建命令行界面(CLI),它能让用户在操作系统命令行调用云应用的 API。CLI 通常由对应应用主要功能的单个 CLI 命令组成。其架构包含两部分:实现命令的 CLI 客户端和被命令调用的云应用,用户需在客户端操作系统安装 CLI 客户端。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(CLI 客户端):::process -->|调用| B(云应用):::process
2.3 CLI 的调用方式与优势
CLI 可通过脚本、单元测试工具或自动化平台(如机器人流程自动化工具)调用云应用功能。良好的 CLI 关键在于组合性,有助于实现管道与过滤器架构。每个 CLI 命令是后端业务逻辑与脚本代码的连接点,也可与调度器、测试代码等交互。
| 优势 | 说明 |
|---|---|
| 简单性 | 构建简单,最简单的 CLI 只需所有语言都支持的 stdin 和 stdout 库 |
| 资源消耗 | 相比图形应用,CLI 应用消耗的计算和网络资源更少 |
| 易测试性 | 输入输出为文本,便于制定测试用例和评估响应 |
| 组合性 | 可在操作系统层面组合,利用标准操作系统功能 |
2.4 CLI 的缺点与应对
| 缺点 | 说明 | 应对方法 |
|---|---|---|
| 安装 | 需在用户设备安装 | Linux 可用 apt、yum 等包安装器,Mac 可用 homebrew |
| 用户友好性 | 不直观,需参考文档 | 提供详细文档 |
| 可发现性 | 用户日常不常使用命令行,应用不易被发现 | 提供搜索索引的文档 |
2.5 CLI 示例
- Multics 和命令行的起源 :1961 年 MIT 的 Fernando Corbato 展示的实验性分时系统(ETSS)是命令行的早期尝试,1964 年的 Multics 操作系统开发出首个成熟的 CLI,它启发了 Unix 及后续所有命令行界面。
- cURL :Daniel Stenberg 的 cURL 是 CLI 实用工具的典范,用于通过 URL 获取和发送数据,可用于测试网站、REST API、数据传输等,已内置在 macOS 和 Windows 操作系统中,还应用于 NASA 的 Ingenuity 火星直升机软件。
- 超大规模云服务提供商的 CLI :AWS、Azure、IBM Cloud 和 Google Cloud 等云服务提供商都提供 CLI,使用户能从远程系统创建和管理服务实例,但不同接口类型在实际应用中可能存在延迟、差异或覆盖不全的问题。
3. 公共 API(Public API)
3.1 公共 API 的需求背景
企业与第三方(商业伙伴、政府实体等)合作时,在公共 API 方面常出现两种极端情况:一是直接将内部微服务作为 API 公开,会使第三方受内部服务变化影响;二是 API 长期不变,导致企业内部工作繁琐且错失机会。
3.2 构建公共 API
为解决上述问题,需构建独立服务实现面向外部的公共 API,供第三方应用访问云应用功能。公共 API 有两种情况需考虑:支持企业外部应用和企业内部独立开发的应用。公共 API 又可细分为合作伙伴(封闭)API 和公共(开放)API,它们都应被视为产品,需考虑对外部用户社区的影响。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(第三方应用):::process -->|调用| B(公共 API):::process
B -->|调用| C(内部服务):::process
3.3 公共 API 与 Dispatcher 的区别
- 访问粒度 :公共 API 通常提供更粗粒度的访问,以限制第三方对系统的功能使用,如行政接口和细粒度数据访问通常不包含在公共 API 中。
- 稳定性 :公共 API 需要更稳定,因为更改可能破坏现有第三方应用,而 Dispatcher 的 API 可随客户端应用同步演进。
3.4 公共 API 的优势与问题
| 优势 | 说明 |
|---|---|
| 新商业机会 | 可能催生新应用,开拓新市场和盈利途径 |
| 创建生态系统 | 吸引外部开发者,扩展应用功能和影响力 |
| 问题 | 说明 | 解决方法 |
|---|---|---|
| 版本控制 | 需控制 API 随时间的演进,考虑维护多个版本 | 命名 API 包含版本号或在元数据中包含版本号 |
| 安全问题 | 公开 API 会带来安全风险,如注入攻击、中间人攻击和 DDoS 攻击 | 采用零信任安全方法 |
3.5 公共 API 与 API 网关的区别
公共 API 应是独立设计的实体,与 API 网关不同。API 网关虽可用于安全、管理和跟踪公共 API 使用情况及发布文档,但将公共 API 直接构建在 API 网关中存在局限性,如锁定特定供应商实现、限制适应性等。
3.6 公共 API 示例
“Bezos 指令”强调了公共 API 的重要性。2002 年左右,亚马逊 CEO Jeff Bezos 向开发者发送内部邮件,要求所有团队通过服务接口暴露数据和功能,团队间只能通过接口通信,所有服务接口必须可对外公开。这一文化推动了亚马逊早期 AWS 服务的发展。
4. 开发顺序建议
在构建复杂业务流程的用户交互时,开发顺序是一个值得考虑的因素。通常,合适的开发顺序应为 API、CLI 和 GUI。原因如下:
-
优先开发 API
:首要任务是开发构成业务逻辑的后端服务器服务,即 API。这是整个系统的基础,决定了系统的核心功能。
-
构建 CLI 进行测试
:完成 API 开发后,构建一个简单的 CLI 并嵌入最重要的命令。通过使用简单的脚本工具(如 Shell),可以尝试不同的 API 组合,从而发现并解决集成问题。这比直接使用基于 GUI 的自动化工具(如 Selenium)进行测试要容易得多,因为 GUI 测试往往面临更多复杂性。
-
最后开发 GUI
:在基本流程构建和测试完成后,再进行用户界面(GUI)的开发。但即使有了 GUI,CLI 仍然可以作为复杂交互组合的脚本替代方案。
| 开发阶段 | 说明 | 优势 |
|---|---|---|
| API 开发 | 构建后端业务逻辑服务 | 确定系统核心功能 |
| CLI 构建与测试 | 嵌入重要命令,使用脚本工具测试 API | 发现并解决集成问题,降低测试复杂性 |
| GUI 开发 | 基于已测试的流程开发用户界面 | 提供友好的用户交互,同时保留 CLI 脚本替代方案 |
5. CLI 与公共 API 的综合应用案例分析
为了更好地理解 CLI 和公共 API 在实际中的应用,我们来看一个综合案例。假设我们有一个云会议应用,它提供会议管理、参会者管理等功能。
5.1 使用 CLI 管理会议
-
创建会议
:用户可以使用 CLI 命令调用云应用的 API 来创建会议。例如,在 Linux 系统中,使用自定义的 CLI 命令
create-meeting --name "Tech Conference" --date "2024-10-01" --time "10:00:00"来创建一个名为“Tech Conference”的会议。 -
查看会议列表
:通过
list-meetings命令可以获取所有会议的列表,该命令会调用云应用的 API 并将结果以文本形式输出。 -
取消会议
:使用
cancel-meeting --id 123命令,根据会议 ID 取消指定的会议。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(用户):::process -->|执行 CLI 命令| B(CLI 客户端):::process
B -->|调用 API| C(云会议应用):::process
C -->|返回结果| B
B -->|显示结果| A
5.2 公共 API 支持第三方集成
-
合作伙伴集成
:会议应用的公共 API 可以让合作伙伴(如活动推广平台)集成会议信息。合作伙伴可以通过公共 API 获取会议列表、会议详情等信息,用于推广活动。例如,活动推广平台可以使用公共 API 中的
get-meeting-details --id 123接口获取指定会议的详细信息,并在其平台上展示。 -
政府监管接入
:政府监管部门可以通过公共 API 接入会议应用,获取会议的统计信息,如参会人数、会议时长等。例如,使用
get-meeting-stats --id 123接口获取指定会议的统计数据。
| 集成场景 | 调用的公共 API 接口 | 用途 |
|---|---|---|
| 合作伙伴集成 | get-meeting-details | 获取会议详情用于活动推广 |
| 政府监管接入 | get-meeting-stats | 获取会议统计数据进行监管 |
6. 总结
在云应用开发中,命令行界面(CLI)和公共 API 都具有重要的作用。CLI 以其简单性、低资源消耗、易测试性和可组合性等优势,为用户提供了一种便捷的方式来与云应用进行交互,尤其适用于自动化任务和测试。而公共 API 则为企业与第三方的合作提供了桥梁,能够创造新的商业机会和生态系统,但同时也需要注意版本控制和安全等问题。
在实际开发过程中,遵循 API、CLI、GUI 的开发顺序,可以更有效地构建和测试系统,降低开发成本和风险。通过合理运用 CLI 和公共 API,企业可以更好地满足用户需求,提升系统的灵活性和可扩展性。
未来,随着云计算技术的不断发展,CLI 和公共 API 的应用场景也将不断拓展。例如,在人工智能、物联网等领域,CLI 可以用于自动化部署和管理模型,公共 API 可以实现不同系统之间的数据共享和交互。我们应持续关注这些技术的发展趋势,不断探索其在更多领域的应用可能性。
超级会员免费看
2075

被折叠的 条评论
为什么被折叠?



