当前位置:首页 > 文章列表 > Golang > Go教程 > 从您的REST API创建服务器驱动的CLI

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

2025-02-19 20:24:51 0浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《从您的REST API创建服务器驱动的CLI》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

从您的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:

  • 解析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这样的静态类型语言,也能创建灵活且以用户为中心的工具。

终于介绍完啦!小伙伴们,这篇关于《从您的REST API创建服务器驱动的CLI》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

移动端头条浏览器Textarea黑色背景问题如何解决?
移动端头条浏览器Textarea黑色背景问题如何解决?
上一篇
移动端头条浏览器Textarea黑色背景问题如何解决?
如何监控Linux Kafka的运行状态
下一篇
如何监控Linux Kafka的运行状态
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    16次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    25次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    42次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码