【API 设计之道】01 资源导向设计 (ROD):告别 RPC 风格的“动词地狱”

大家好,我是Tony Bai。

欢迎来到我们的专栏 《API 设计之道:从设计模式到 Gin 工程化实现》的第一讲。

在开始讲解之前,我想先带你看一张“恐怖”的路由表。这是我曾在某次代码审查中看到的一个真实项目的 router.go 文件片段(为了保护隐私,我做了一些脱敏处理):

// 典型的 "面条式" 路由配置
r.POST("/getUser", GetUser)
r.POST("/createUser", CreateUser)
r.POST("/update_user_status", UpdateUserStatus)
r.POST("/deleteUser", DeleteUser)
r.POST("/user/getOrders", GetUserOrders)
r.POST("/api/query_product_list", QueryProductList)
r.POST("/cancel_order", CancelOrder)

看着这段代码,你的第一感觉是什么?

如果是“这没问题啊,挺清晰的”,那你可能已经陷入了 RPC(远程过程调用)风格 的思维陷阱。

这段代码的问题在于:它把 HTTP 仅仅当成了一个传输通道,而不是一种应用架构。 这种设计风格被称为“动词地狱”(Verb Hell)。随着业务增长,你的 API 会迅速膨胀成成百上千个无规律的 endpoint,就像一碗纠缠不清的面条,不仅难以维护,更难以在团队间形成统一的规范。

今天这一讲,我们就来谈谈现代云原生 API 设计的第一原则:资源导向设计(Resource-oriented Design,简称 ROD),并看看如何在 Gin 项目中通过工程化手段落地这一原则。

为什么我们会陷入“动词地狱”?

这种 /get_user 风格的接口之所以流行,是因为它非常符合我们写后端代码的直觉。

在 Go 语言(以及大多数编程语言)中,我们的业务逻辑是由函数(Functions)驱动的。我们定义一个函数名(动词),传入参数,返回结果。当我们把这个逻辑暴露给网络时,直觉告诉我们:URL 就是函数名,HTTP Body 就是参数。

这就是典型的 RPC 思维

然而,RESTful 架构乃至现代云原生 API 的核心哲学是:网络上的交互对象应该是“事物”(Nouns),而非“动作”(Verbs)。

如果不转变这个思维,你会遇到以下痛点:

  1. 命名爆炸getUserqueryUserfetchUserfindUser... 每个开发者都有自己的习惯,团队协作成本极高。

  2. HTTP 语义丢失:全部使用 POST一把梭,HTTP 协议中精心设计的 GET(缓存)、PUT(幂等)、DELETE(安全)等语义完全失效。

  3. 层级关系混乱/user/getOrders 和 /order/listByUser 到底该用哪个?缺乏统一的层级结构。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值