API 设计实践

sddtc 于 2022-02-02 发布

给系统设计一套 API 不是一件简单的事情。 原则是否能被所有人真正理解, 是否能准确通过 API 来表达对资源的正确处理都是学习的目的。

设计 API 的简单原则

一致性

在 API 中使用一致的术语。 例如, 统一使用驼峰, 或者统一使用蛇形命名

显而易见性

可组合性

自解释

可进化性

资源的命名

集合:使用复数名词, 不包含唯一标识符

单一资源:使用标识符(* 不要使用主键/递增数值)

Notes:
使用唯一标识符 - 不必是主键。 保证它们独特且可读即可

嵌套资源

具化的资源

具体化是将抽象概念具体化的行为(关注意图,而不是实体), 这有时在 RESTful 建模中很有用。
与简单的 CRUD 操作相反,具体化的资源通常代表更改的意图。 因此,他们倾向于避免使用 PUT 来支持对某些用户操作进行建模的不可变资源。

非资源的 endpoints

可能有一些考虑迫使我们设计一个非资源性的 endpoint。 例如,您可能决定支持将信用卡搜索作为 POST 而不是 GET, 因为我们希望将信用卡号从 URL 中移除。
在这种情况下,我们显然是有意打破了 REST 的统一接口架构约束。
为了清楚地表明这是有意的,我们应该在路径上放置一个动词,将其标记为 RPC 而不是 RESTful

Name Example
集合 /orders
单一资源 /orders/1
嵌套资源 /orders/1/product
具化资源 /registrationRequest
非资源型 /creditCards/search

其它

API 版本化

虽然 API 设计的最终目标是无版本化,但在日常开发中仍然要有计划的使用版本:

API 认证

API 网关

能力 一般倾向于我们是否应该使用 api 网关执行此操作 ?
截流 & 定量
跟踪记录 API 活跃度
API 生命周期管理
认证 也许
缓存 也许
公布 API 文档 也许
负载均衡 也许
服务发现 也许
service mocks 也许
API 编写
数据转化
细粒度权限

API 管理

API 文档

工具

API Mocks

其它