python - 使用 python 将纯 JSON 发送到 gRPC 服务器
问题描述
我可以使用具有以下语法的 grpcurl 向我们启用 gRPC、启用反射的服务器之一发送请求:
grpcurl --plaintext -d '{"test_input": "Test 1 2 3", "config": { "max_results": 3 }}' localhost:6565 myorg.myproject.v1alpha6.MyService.MyStub
这不需要来自 grpcurl 的原型知识。它非常完美,因为我在一个测试脚本中使用它,我希望尽可能简单。
我已经能够利用它来编写一个非常简单的 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)
但我对不得不调用外部进程不太满意。
我在 Internet 上找到的所有文档都需要下载 protos 及其依赖项并使用protoc
. 我可以做到这一点,这不是问题的对象。这里的目标是使用 Python 与使用 JSON 的服务器进行交换,而无需下载 proto。就像用 grpcurl 完成的一样。
这可以只使用python来完成吗?
解决方案
我认为不是因为(优秀的)gRPCurl 似乎没有提供您希望能够从 Python 编写脚本的 API|SDK。
正如您所注意到的,这仅在支持反射的 gRPC 服务器上有效(没有原型或原型集)。
我认为您通过外壳控制 gRPCurl 的方法可能是最好的方法。可能值得提出功能请求,看看其他人是否愿意将 gRPCurl 作为测试工具;这可能很有趣。
或者,如果您不喜欢 gRPCurl,那么可能还有其他支持反射的工具可以由 Python 编写。看:
推荐阅读
- c# - Stream.Read 返回 System.IO.IOException
- fastapi - 如何从 Poetry 运行 FastAPI 应用程序?
- javascript - 如何在异步生成器函数中抛出错误
- java - 优化数据模型和存储库 SpringBoot
- android - RecyclerView OnLayout 耗时太长,性能问题
- apache-kafka - 通过 Kafka Connect for Apache Ignite 进行 DC 复制
- angular - TypeError:未定义的属性(Angular)
- mysql - 有没有办法在 MySQL 的列中索引多个值
- mongodb - MongoDB Atlas Search:自动完成,分数模糊
- android - 如何在 Android 中以编程方式更改 ListView 项?