【发布时间】:2017-12-21 01:41:56
【问题描述】:
让一个 REST API 调用另一个 REST API 是否正确的编程实践/软件设计?如果不是,推荐的处理这种情况的方法是什么?
【问题讨论】:
标签: rest api design-patterns
让一个 REST API 调用另一个 REST API 是否正确的编程实践/软件设计?如果不是,推荐的处理这种情况的方法是什么?
【问题讨论】:
标签: rest api design-patterns
如果我正确理解了您的问题,那么是的,这是非常常见的。
我猜你是在描述以下内容:
客户端向正在服务的 Server-1 进行 API 调用 此请求向 API Server-2 发出另一个请求,获取 来自 Server-2 的响应,进行一些重新格式化或数据提取,以及 打包起来响应客户端?
这种事情一直在发生。不利的一面是,除非 Server-1 和 Server-2 之间的连接延迟非常低(例如它们在同一个网络上),并且使用的带宽很小,否则客户端将不得不等待相当长的时间响应。显然,两个后端服务器之间可以有缓存来帮助缓解这种情况。
这与 Server-1 对数据库进行 SQL 查询以响应请求几乎相同。
您的问题的另一种解释可能是客户端要求服务器 1 将服务器 2 将获取并异步执行的操作排队。这也很常见(例如 Google 抓取您的网站的方式)。这种情况下,Server-1 会立即响应 Client,而无需等待 Server-2 执行的操作结果。在这种情况下,消息队列或数据库表通常用作服务器之间的中介。
【讨论】:
area() API 为例——它需要调用multiply() API 来执行其功能。这并不违反 SRP。
另一种方法是让您的 REST API(1) 将请求详细信息存储到队列表中。制作一个后端,每隔 100 毫秒检查一次队列表。该后端将调用另一个 REST API(2)。
在您的 REST API(1) 中,只需创建一个循环来检查队列上的事务是否已被处理。如果是,则获取流程详细信息并将其返回给客户端,如果否,则继续循环直到流程完成
【讨论】: