如何将 REST api 微服务暴露给客户端?

How to expose REST api microservices to the client?

我们正在将其余 api 整体拆分为微服务,我们遇到了以下问题

让我们假设如下

  • project is asp.net mvc, hosted on iis
  • project is hosted on dedicated server (not a cloud)
  • monolith rest api had urls defined such as www.domain.com/orders/ www.domain.com/tickets/ etc

将整体拆分为微服务时,理想情况是我们最终得到

ms1 -> www.domain.com/orders/
ms2 -> www.domain.com/tickets/

由于微服务通常不与资源相关联,这可能会变得混乱,例如,一个微服务可以服务多个资源,或者一个资源可以由多个微服务提供服务。

fe.
www.domain.com/tickets/ (ms1)
www.domain.com/tickets/reports (ms2)

or
www.domain.com/tickets (ms1)
www.domain.com/orders (ms1)

有什么解决办法?

所以基本上主要目标是充分休息 api 看起来像

GET www.domain.com/tickets/5
GET www.domain.com/orders/5
POST www.domain.com/orders/
GET www.domain.com/invoices/100

等等

那么 iis 重写和 api 网关是这里唯一的两个选项吗? 微服务应该直接暴露给客户端,还是应该通过 API 网关。 API 网关在这种情况下是否矫枉过正?

API 网关肯定会增加价值 - 您将实现拆分为更小的单元(微服务)- 它允许您将 API 接口作为一个集中管理、监控和治理单元,与实现分开。

公开单个微服务端点可能不容易管理 - 例如,您需要分别对每个微服务端点应用访问控制策略。