什么时候不使用 REST API?

When not to use REST APIs?

REST API 始终被视为基础设施目的。我不是专家,但我发现他们应该实施的原则涉及横向扩展和性能。他们应该抑制客户和服务之间的各种亲和力(无会话等)。很少从业务角度考虑 REST API。

上周,团队中有人提议将遗留应用程序的一部分实现为 REST API。此应用程序以前作为库 (.NET) 嵌入到每个请求它的应用程序中。 REST API 很快就遇到了性能问题(客户端和服务器之间的往返次数过多)。作为一种解决方法,实现了缓存(在服务器端)。在我看来,它违反了 REST 原则。如果没有缓存,我们应该为一个客户端提供多台服务器以获得可接受的性能,并行请求或负载平衡器(或类似的......)。

当我们谈论 API 时,我想这样的 API 应该是由业务需求驱动的。 根据您的经验,是否有业务不适合 REST 的用例?

[编辑] API 是关于从来自客户端的条目模拟工作流程...

As a workaround, caching was implemented (on the server side). In my opinion, it violates the REST principles.

实际上使用缓存是您必须遵循的 REST 约束。 Fielding 论文 5.1.4 缓存:http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_4 我建议你在任何进一步的问题之前阅读整个论文(或至少 REST 部分)。

they are supposed to suppress all kinds of affinities between clients and services (no session, etc...).

无状态是指将会话移至 REST 客户端,而不是不能进行会话。如果您可以在客户端维护那么多客户端会话,那么您不想在服务器端维护它。这使缓存更容易。

REST APIs are rarely considered from a business perspective.

我想这就是为什么大多数大公司都有 REST API 的原因。例如。 facebook、google、twitter 等...这些 API 主要用于第 3 方客户端。 Ofc。如果您的 API 将被公司中的许多客户使用,那么使用 REST 可以替代使用 SOA、其他 RPC 或消息代理解决方案。

Last week, someone in the team proposed to implement a part of a legacy application as a REST API. This application was previously embedded as a library (.NET) in every application that requested it.

REST 是关于构建客户端可以使用的应用程序接口(或交付方法),而不是关于构建应用程序。它的目的类似于 SOA 的目的以及我之前提到的其他内容。 DDD 是关于构建(大型)应用程序的。

The REST API quickly suffered from performance issues (too many round trips between the client and the server). As a workaround, caching was implemented (on the server side).

在这种情况下,检查性能问题的原因可能是有益的。如果你发送一系列消息,因为REST API 缺少一个功能,那么最好在REST服务中实现该功能,或者如果它很复杂,不一定属于低级服务,然后你可以编写一个上层 REST 服务,它使用低层服务(又名。分层系统约束)。如果问题出在用户太多,那就是 ofc。缓存和 horizontal/vertical 缩放是解决方案。

When not to use REST APIs?

我认为没有这样的规定。您可以在任何需要使用 SOA 或任何基于请求-响应的消息传递解决方案的地方使用 REST。我不认为它非常适合基于事件的消息传递,因此该技术有其局限性。在这种情况下,您可以通过轮询或服务器发送的事件来解决问题,或者您可以创建一个混合接口,该接口通过 HTTP 使用 REST 来获取 req-rep pat,并使用(web)套接字来获取应用程序接口的基于事件的部分。

在您不想花钱为您的用户编写不同的客户端或者您想要一个客户端开发人员可以用来与您的系统集成的接口的情况下,REST 是一个理想的选择。例如。 public facebook api,fb 应用程序开发人员或批发商的私人 api 可以使用它,零售商的网上商店可以使用它来自动更改价格或订购产品填满库存。

通过单个 HTML 页面 Web 应用程序 REST 可以很好地防止客户端服务器端代码的重复。例如。构建请求模板(URL、表单等)被移动到服务(又名 HATEOAS 约束)。因此浏览器中的客户端 运行 可以使用一些通用代码来构建完整的 HTML 页面,例如基于 JSON-LD 响应。这个目前不常用。