Is it possible to have an API working with both REST and gRPC?

Nez*_*Nez 5 api microservices .net-core grpc asp.net-core

我的目标是尝试将两者都作为从 REST API 到 gRPC 的增量迁移的一部分。我们将开始使用 gRPC 作为我们微服务架构中服务之间的通信方式。

问题是,每当我将 gRPC 服务放入我的中间件和/或我尝试强制 gRPC 的 http2 协议工作时,我的 REST API 就会停止工作。即使我的 Swagger 文档停止与这两种实现一起使用,但当我添加中间件时仍然可以通过 POSTMAN 访问端点,但当我添加 http2 协议时则无法访问。作为参考,我们已经在使用 .NET Core 3。

所以我的问题是,是否可以让 REST 和 gRPC 在同一个应用程序上同时工作?如果是这样,如何?

Lib*_*tad 1

是的。您只需在 appsettings.json 中配置 Kestrel 端点参数即可。使用 WebApi 和 gRPC 设置端点并使用您的自定义名称,如下所示:

  "Kestrel": {
    "Endpoints": {
      "Grpc": {
        "Protocols": "Http2",
        "Url": "https://localhost:5104"
      },
      "webApi": {
        "Protocols": "Http1",
        "Url": "https://localhost:5105"
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

现在,您可以访问 WebApi 端点并从客户端调用 gRPC 服务。