RESTful API 设计:内部交互

Posted

技术标签:

【中文标题】RESTful API 设计:内部交互【英文标题】:RESTful API design: inner interaction 【发布时间】:2013-10-15 17:20:15 【问题描述】:

简单的问题。我阅读了一堆关于 API 设计的文章,但没有找到答案。

API 的端点应该如何相互交互?

例如,如果我有 2 个端点:/category/:name/messages。例如,从消息中检查类别存在的最佳方法是什么?

1) 来自/messages 处理程序的数据库查询,例如:SELECT * FROM categories WHERE name = 'test'?

2) 从/messages 处理程序到该端点的 HTTP 请求,例如:httpclient.get('/category/test') ?

3) 客户端应该获取所有类别,获取特定类别的 ID 并使用该类别 ID 向/messages 发送请求?

【问题讨论】:

【参考方案1】:

您应该以所有端点都调用内部 API 来执行任务的方式设计您的应用程序。当您想在另一个内部调用一个操作时,您应该使用相应的内部 API,而不是任何其他方法,例如调用 http 服务。

【讨论】:

【参考方案2】:

问题很简单,但没有答案。有一件事是肯定的,永远不要使用(2)解决方案。当您可以调用方法时使用 http 客户端请求一些数据会降低 API 的性能和容量。

如果需要检查特定类别的存在以在 /messages 中创建响应,则使用 (1) 但不是调用 SQL 查询,而是调用与处理对 /category/test 的请求相同的方法,只需在本地调用它,而不是通过 HTTP .

当每个端点只负责一种类型的资源时,解决方案 (3) 是 REST 方式。缺点是它可能需要从客户端到 API 的更多 HTTP 请求。

【讨论】:

以上是关于RESTful API 设计:内部交互的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot构建RESTful API

AngularJS Resource:与 RESTful API 交互

用产品思维设计API——RESTful就是个骗局

带有批处理请求的 RESTful API

RESTful API 设计指南[转]

API设计RESTful API 设计指南