使用Python将纯JSON发送到GRPC服务器

2022-04-03 00:00:00 python json grpc protocol-buffers grpcurl

问题描述

我可以使用如下语法的grpcurl将请求发送到我们的一个启用GRPC、启用反射的服务器:

grpcurl --plaintext -d '{"test_input": "Test 1 2 3", "config": { "max_results": 3 }}' localhost:6565 myorg.myproject.v1alpha6.MyService.MyStub

这不需要了解grpcurl的Protos。它非常完美,因为我正在一个测试脚本中使用它,我希望尽可能地保持简单。

我已经能够利用它来编写一个非常简单的python脚本:

import json
import subprocess

input = { "test_input": "Test 1 2 3", "config": { "max_results": 3 } }
result = subprocess.check_output(['grpcurl', '--plaintext', '-d', json.dumps(input), 'localhost:6565', 'MyStub'])
dict_result = json.loads(result)

但我不太喜欢不得不调用外部进程。

我在互联网上找到的所有文档都需要下载Protos及其依赖项,并使用protoc编译它们。我可以做到这一点,这不是问题的目的。这里的目标是使用Python通过JSON与服务器进行交换,而不需要下载原型。就像使用grpcurl一样。

只能使用python完成此操作吗?

gRPCurl

我认为不是因为gRPCurl似乎没有提供您希望能够从推荐答案编写脚本的api|sdk。

正如您注意到的,这仅在支持反射的GRPC服务器上起作用(没有Proto或Protoset)。

我认为您通过外壳控制gRPCurl的方法可能是最好的方法。这可能值得提出一个功能请求,看看其他人是否愿意将gRPCurl作为测试工具;这可能会很有趣。

或者,如果您不执着于gRPCurl,那么可能有其他支持反射的工具可以由Python编写。请参阅:

https://github.com/grpc-ecosystem/awesome-grpc#tools-test

相关文章