[API翻译]gRPC HTTP API介绍

683 阅读3分钟

原文地址:james.newtonking.com/archive/202…

原文作者:grpc.io/blog/grpc-o…

发布时间:2020年3月20日

gRPC是在应用程序之间进行通信的现代方式。gRPC使用HTTP/2、流媒体、Protobuf和消息合同来创建高性能的实时服务。在.NET Core 3.0中增加了对ASP.NET Core上gRPC的支持。

gRPC的问题是,不是每个平台都能使用它。浏览器并不完全支持HTTP/2,使得REST和JSON仍然是将数据送入浏览器应用的主要方式。即使有gRPC带来的好处,REST和JSON仍然在现代应用中占有重要地位。构建gRPC和REST服务会给应用开发增加不必要的开销。

如果我们能在ASP.NET Core中构建一次服务,就能获得gRPC和REST,那不是很好吗?现在你可以了 介绍一下ASP.NET Core的gRPC HTTP API。

gRPC还是REST?为什么不两者兼而有之呢?

gRPC HTTP API是ASP.NET Core的一个实验性扩展,它可以为gRPC服务创建RESTful HTTP API。一旦配置好,gRPC HTTP API允许你用熟悉的HTTP概念来调用gRPC方法。

HTTP动词 URL参数绑定 JSON请求/答复 为您的gRPC服务提供RESTful API。不重复!

image.png

演示

访问grpchttpapi.azurewebsites.net/ ,查看gRPC HTTP API的运行情况。

演示的源代码在这里

开始使用

  1. 第一步是创建一个gRPC服务(如果你还没有)。创建gRPC客户端和服务是一个很好的教程,可以在.NET Core上开始使用gRPC。
  2. 接下来,将Microsoft.AspNetCore.Grpc.HttpApi的包引用添加到服务器中。在Startup.cs中用services.AddGrpcHttpApi()注册它。
  3. 最后一步是用HTTP绑定和路由注释您的gRPC.proto文件。注释定义了gRPC服务如何映射到JSON请求和响应。你需要添加import "google/api/annotations.proto";到gRPC proto文件中,并在你的项目中拥有annotations.protohttp.proto的副本。
syntax = "proto3";

import "google/api/annotations.proto";

package greet;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {
    option (google.api.http) = {
      get: "/v1/greeter/{name}"
    };
  }
  rpc SayHelloFrom (HelloRequestFrom) returns (HelloReply) {
    option (google.api.http) = {
      post: "/v1/greeter"
      body: "*"
    };
  }
}

message HelloRequest {
  string name = 1;
}

message HelloRequestFrom {
  string name = 1;
  string from = 2;
}

message HelloReply {
  string message = 1;
}

在上面的示例中,SayHello gRPC方法现在可以作为gRPC和RESTful API调用。

  • 请求: HTTP/1.1 GET /v1/greeter/world
  • 答复: { "message": "你好,世界" }

而浏览器应用则像其他RESTful API一样调用它。

fetch('https://localhost:5001/v1/greeter/world')
    .then((response) => response.json())
    .then((result) => {
        console.log(result.message);
        // Hello world
    });

这是一个简单的例子。更多自定义选项请参见HttpRule

常见问题

问:用于 gRPC 的 RESTful API 是一个全新的概念吗?

Grpc-gateway使用相同的.proto注释为gRPC提供RESTful JSON服务。如今,grpc-gateway被大量使用。例如,GCP使用它为GCP服务提供gRPC和REST端点。这两种技术的一个关键区别是grpc-gateway需要一个反向代理,而gRPC HTTP API则是由ASP.NET与gRPC服务一起直接托管。

问:这是否取代了ASP.NET Core MVC?

答:不,gRPC HTTP API只支持JSON,而且它的意见很大。只支持HttpRule提供的自定义选项。使用gRPC HTTP API的好场景是使用gRPC和JSON构建新服务。

Q:这和gRPC-Web有什么不同?

答:gRPC-Web可以让你通过gRPC-Web客户端和Protobuf从浏览器中调用gRPC服务,gRPC HTTP API可以让你像使用JSON的RESTful API一样调用你的服务。它不会取代gRPC-Web。

问:什么时候会发布?

答:现在NuGet上就有一个预发布包!gRPC HTTP API是一个实验,是否在上面投入更多时间取决于用户的反馈。

今天就来试试吧

gRPC HTTP API是我一直在玩的一个框架想法。它是非常实验性的,但我认为它有机会让.NET开发者比现在更快地提供gRPC和REST服务。

你现在可以在NuGet上使用预发布包。是否投入更多的时间使其成为一个支持的产品,取决于用户的反馈。请在GitHub上给出反馈,或者在Twitter上联系我@JamesNK。我很期待看到这个框架的使用情况。


通过www.DeepL.com/Translator(免费版)翻译