在Python脚本mylibrary.py
中,我使用Protocol Buffers使用以下方法对数据建模:
我想实现imports
main.py
并使用前面提到的Python脚本,但是Cloud Endpoints使用Cloud Endpoints Framework on App Engine,而不是'标准' ProtoRPC。
我的App Engine Python模块protorpc
从protoc
导入,而不是使用' offline' from protorpc import messages
from protorpc import remote
编译器生成序列化和反序列化代码:
.proto
使用protorpc.messages.Message
文件定义 消息。而是定义了类,继承自class MyMessageDefinition(messages.Message)
:
mylibrary.py
Proto Buffers可以转换为Proto RPC等价物吗?我真的不想改变public static int CountWhoHasTwoSameSons(BinNode<int> Head)
{
if (Head == null)
return 0;
if (IsLeaf(Head))
return 1;
if ((Head.HasLeft() && Head.HasRight()) &&
(Head.GetRight() == Head.GetLeft())) // It happens with this if statement!
return 1 + CountWhoHasTwoSameSons(Head.GetLeft()) +
CountWhoHasTwoSameSons(Head.GetRight());
}
使用ProtoRPC,因为它不如Protocol Buffers那么通用。
答案 0 :(得分:4)
经过八个月的大量实验,我将加入我的观点。我希望能节省一些时间。
首先选择您的框架
Google Cloud提供不同的Cloud Endpoint产品。所有都可以用于JSON / REST API。这对我来说并不是很清楚。 Cloud Endpoints是一个非常高级的词组,涵盖多个 Google Cloud后端的API的开发,部署和管理。
这里的要点是,在决定使用Cloud Endpoints之后,您仍然必须决定后端技术来为您的API提供服务。文档有点隐藏,但我强烈建议从Google Cloud Endpoints doc开始。
您可以选择:
选择您的实施第二
在每个API框架中,您可以选择运行API(服务)的云实施:
OpenAPI Specification - 在上实施 JSON / REST API:
Endpoints Frameworks - 在上实施 JSON / REST API:
gRPC - 对于 gRPC API实施:
在此处发布问题时,我使用的是使用Python在Google App Engine标准环境中运行的Endpoints Frameworks。然后,我将我的API(服务)迁移到Google Compute Engine上的gRPC。
您之间的观察者可能会注意到OpenAPI Specification和Endpoints Frameworks都可用于JSON / REST API,而gRPC仅公开gRPC API。那么我如何将我的REST API从Endpoints Frameworks移植到gRPC?答案是Transcoding HTTP/JSON to gRPC(我在学习过程中学到了这一点,但我并不是很清楚)。所以,不要因为你想要REST / HTTP而排除gRPC。
答案
那么这与我原来的问题有何关系?
我试图在.proto
个文件和gRPC注释之间进行转换,这意味着我一路走错了。
如果要使用普通.proto
文件编写应用程序,请在计算引擎上选择gRPC。如果您需要将其作为REST API,可以这样做,但您需要在后端配置中添加ESP。作为反向代理,它几乎是NGINX服务器设置。这里唯一的缺点是你需要一些Docker知识来确保ESP(代理)和你的gRPC服务器可以通信(Docker网络)。
如果您的代码已经在App Engine上,并且您希望以最少的工作量将其公开为REST API并且仍然获得良好的API管理功能,请选择Endpoints Frameworks。 警告:我离开了这个地方,因为它过于昂贵(我每月收费100美元)。
如果您想完全避免.protos
,请使用OpenAPI Specification。
最后,如果您想提供程序化集成,客户端库,或者您想提供microservice,那么请务必考虑gRPC。只需安装Protocol Buffer Runtime,就可以轻松删除ESP(代理)并在几乎任何计算机上运行gRPC服务器。
最终,我决定使用Docker在计算引擎上使用gRPC。我还有一个ESP为gRPC提供HTTP转码,反之亦然。我喜欢这种方法有几个原因:
避免这些错误
实现您找到的第一个框架/架构。如果我可以重新开始,我不会选择Endpoints Frameworks。这是昂贵的,并使用注释而不是.proto
文件,IMO使代码更难移植。
在决定框架和实施之前阅读Always Free Usage Limits。 Endpoints Frameworks使用后端 App Engine实例 - 几乎没有免费配额。令人困惑,前端 App Engine实例非常generous free quota。
考虑本地发展。 Cloud Endpoints本地开发服务器没有得到官方支持(至少在我的问题时他们还没有)。相反,有一整页关于运行Local Extensible Service Proxy。
答案 1 :(得分:0)
我发现了一个名为pyprotobuf(http://pyprotobuf.readthedocs.io)的项目,该项目可以从原型文件开始生成带有protorpc类的模块。
根据文档(http://pyprotobuf.readthedocs.io/topics/languages/protorpc.html),您需要执行:
protopy --format python example.proto