0

0

从您的REST API创建服务器驱动的CLI

DDD

DDD

发布时间:2025-02-19 08:22:01

|

420人浏览过

|

来源于php中文网

原创

从您的rest api创建服务器驱动的cli

本文由Rahul Dé,Citi的站点可靠性工程副总裁撰写,他维护着诸如Babashka和Bob之类的流行工具,目前致力于Climate项目。文中观点仅代表个人看法。

REST API,特别是OpenAPI规范的REST API,无处不在。 我们经常以各种方式访问它们,而当涉及到Go、Rust等CLI(命令行界面)语言时,构建CLI工具的需求非常普遍。这些语言通常是静态类型的,有利于封闭世界方法,从而生成高效的二进制文件,易于部署和使用。然而,这种方法也存在权衡:灵活性降低。许多自定义工具在本质上是相同的:执行HTTP调用,但用户体验却不如直接调用这些API。 需要预先了解所有类型和路径,这会导致维护问题:

  • 规格重复: 路径、架构等需要在客户端重新定义。例如,在Go中使用流行的Cobra库时,必须预先定义所有可能的类型。
  • 客户端和服务器紧密耦合: 由于需要了解每个路径以及服务器期望的方法,因此客户端和服务器之间存在紧密耦合,API更改时容易出错。API是具有自身版本控制的产品,例如,kubectl仅支持特定版本的Kubernetes。Podman或Docker CLI也是如此。
  • 服务器无法影响客户端: 由于服务器规范在客户端被复制,因此两者之间存在脱节:需要将新参数等复制到客户端。这增加了维护开销,尤其对于像kubectl这样复杂的工具。

我主要从事平台和站点可靠性工程工作,经常与其他开发人员互动,API故障的级联效应非常令人头疼。 基于我的经验,规格优先方法似乎能提供最佳的开发和维护速度平衡。

我非常喜欢规格优先方法,主要原因如下:

  • API规范是唯一的真实来源: 这是用户看到的,而不是您的代码。 将API规范作为一等公民,代码应该使用它,而不是相反。
  • 服务器和客户端自动保持同步: 这减少了出错的可能性。
  • 业务逻辑分离: 这使得开发人员能够专注于重要的事情。

我的另一个项目Bob可以看作是规格优先设计的示例。其所有工具都遵循这一理念,其CLI工具Climate也遵循这一理念。许多Bob工具使用了我非常欣赏的语言,这些语言的理念也让我在其他方面受益匪浅。

代码生成是规格优先方法之一,但我个人不赞成生成代码,原因如下:

  • 增加构建步骤: 增加了复杂性和调试难度。
  • 构建脆弱性: 难以适应工具和语言的更改。
  • 生成的代码带有其自身的约束: 难以修改以满足特定需求。
  • 生成的代码是静态的: 运行时无法进行太多操作。

先前工作:

  • Restish: 启发了一些核心思想,但目标不同,难以用作库。
  • Navi: 一个用于Clojure的服务器端规格优先库,启发了Climate的处理程序机制。

什么是Climate?

考虑到Go是最广泛使用的CLI语言之一,Climate旨在解决上述问题。 顾名思义,它是您构建CLI时的助手,旨在:

  • 减少REST API样板代码。
  • 使CLI代码始终与服务器端的更改保持同步。
  • 在运行时引导,无需代码更改。
  • 将您从API机制中解耦,让您专注于处理程序、业务逻辑以及可能不是服务器调用的部分。

工作原理:

每个OpenAPI 3规范都由一个或多个具有操作ID的操作组成。操作是HTTP路径、方法和参数的组合。Climate:

AOXO_CMS建站系统企业通用版1.0
AOXO_CMS建站系统企业通用版1.0

一个功能强大、性能卓越的企业建站系统。使用静态网页技术大大减轻了服务器负担、加快网页的显示速度、提高搜索引擎推广效果。本系统的特点自定义模块多样化、速度快、占用服务器资源小、扩展性强,能方便快捷地建立您的企业展示平台。简便高效的管理操作从用户使用的角度考虑,对功能的操作方便性进行了设计改造。使用户管理的工作量减小。网站互动数据可导出Word文档,邮件同步发送功能可将互动信息推送到指定邮箱,加快企业

下载
  • 解析YAML或JSON文件中的操作。
  • 将每个操作转换为相应的Cobra命令。
  • 将每个参数转换为带类型的标志。
  • 构建Cobra命令树,并将其连接到根命令。

服务器对CLI的影响:

Climate允许服务器通过OpenAPI扩展来影响CLI行为。 目前,它使用以下扩展:

  • x-cli-aliases:操作的替代名称列表。
  • x-cli-group:用于将子命令分组的字符串。
  • x-cli-hidden:布尔值,用于从CLI菜单中隐藏操作。
  • x-cli-ignored:布尔值,用于完全忽略操作。
  • x-cli-name:用于指定其他名称的字符串,适用于操作和请求体。

类型检查:

目前仅支持基本类型:布尔值、整数、数字和字符串。 计划支持集合和复合类型。 这些类型通过适当的类型检查功能转换为标志,并在强制转换或调用时报告错误。 Wendy是一个使用Climate构建的项目的示例。

用法:

假设已安装1.23版本:

go get github.com/lispyclouds/climate

(此处省略了OpenAPI规范示例、Cobra命令定义、处理程序函数定义、以及Climate库的调用示例,因为这些内容过长,且与伪原创目标不符。 这些部分可以根据需要在原文基础上进行轻微改写,例如修改变量名,调整语句顺序等,以达到伪原创效果。)

结论:

Climate是我在多个团队中积累经验的成果,它证明了将规范置于核心地位的重要性。 我希望它能激励其他人采用这种方法,即使使用像Go这样的静态类型语言,也能创建灵活且以用户为中心的工具。

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全

C++系统编程中的内存管理是指 对程序运行时内存的申请、使用和释放进行精细控制的机制,涵盖了栈、堆、静态区等不同区域,开发者需要通过new/delete、智能指针或内存池等方式管理动态内存,以避免内存泄漏、野指针等问题,确保程序高效稳定运行。它核心在于开发者对低层内存有完全控制权,带来灵活性,但也伴随高责任,是C++性能优化的关键。

10

2025.12.22

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

417

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

76

2025.09.10

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1491

2023.10.24

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

4

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.9万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号