如何向客户端公开 REST api 微服务?

米科

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

让我们假设以下

  • 项目是asp.net mvc,托管在iis上
  • 项目托管在专用服务器(不是云)上
  • monolith rest api 定义了 url,例如 www.domain.com/orders/ www.domain.com/tickets/ 等

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

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 重写将资源与微服务 fe 匹配。通过 iis 重写获取 www.domain.com/tickets/5 调用 -> ticketms.domain.com/tickets/5
  • 使用 API 网关将请求路由到适当的微服务端点 fe。通过API网关GET www.domain.com/tickets/5 调用-> ticketms.domain.com/tickets/5

所以基本上主要目标是让完整的 api apear 像

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 接口作为一个单独的单元集中管理、监控和治理,与实现分开。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

微服务:Rest模板与客户端Jar

JHipster Rest API仅允许微服务

服务器如何知道通过PayPal客户端REST API确实付款?

如何使用jersey 2.19 REST API管理客户端/服务器会话数据

如何使用odoo rest api服务器从客户端获取数据?

如何处理微服务中从UI到API的REST调用

如何通过REST API微服务(使用Express构建)在节点js中使用MongoDB更改流

公开jhipster微服务客户端类

微服务REST API版本控制的最佳方法是什么?

构建微服务事件总线和REST api(python / flask)

是否推荐通过微服务调用REST-API?

Jhipster微服务Java客户端api调用错误

如何使用服务器上反应在客户端和Java REST API(春季启动)的BrowserRouter?

设计瘦客户机的客户端(厚)/服务器+额外的REST API

在基于Spring REST的客户端中访问通过wsdl公开的API

如何使用Websocket客户端监听Rest API

在微服务架构中,为什么他们说共享REST客户端库不好?

REST API没有从客户端调用到Web服务

单独的REST JSON API服务器和客户端?

客户端服务器REST API验证码实现

使用Android HTTP客户端将文件上传到REST api服务器

使用服务帐户(客户端凭据授予)访问Keycloak REST Admin API

使用REST API将图像从服务器发送到客户端

微服务API网关与微服务机箱

Java REST API客户端

在服务器端的Django REST中使用API,并在Angular的客户端中提供该API

REST 是否适合微服务?

从REST Web服务向客户端发送文件的正确方法是什么?

如何使我的微服务只能通过api网关访问