如何将 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)
有什么解决办法?
- 使用 IIS 重写来匹配资源与微服务
铁。 GET www.domain.com/tickets/5 通过 iis 重写调用 -> ticketsms.domain.com/tickets/5
- 使用API 网关将请求路由到适当的微服务端点
铁。
GET www.domain.com/tickets/5 通过 API 网关调用 -> ticketsms.domain.com/tickets/5
所以基本上主要目标是充分休息 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 接口作为一个集中管理、监控和治理单元,与实现分开。
公开单个微服务端点可能不容易管理 - 例如,您需要分别对每个微服务端点应用访问控制策略。
我们正在将其余 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)
有什么解决办法?
- 使用 IIS 重写来匹配资源与微服务 铁。 GET www.domain.com/tickets/5 通过 iis 重写调用 -> ticketsms.domain.com/tickets/5
- 使用API 网关将请求路由到适当的微服务端点 铁。 GET www.domain.com/tickets/5 通过 API 网关调用 -> ticketsms.domain.com/tickets/5
所以基本上主要目标是充分休息 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 接口作为一个集中管理、监控和治理单元,与实现分开。
公开单个微服务端点可能不容易管理 - 例如,您需要分别对每个微服务端点应用访问控制策略。