首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将proto缓冲区转换为ProtoRPC

将proto缓冲区转换为ProtoRPC
EN

Stack Overflow用户
提问于 2017-03-25 17:56:26
回答 2查看 611关注 0票数 5

在Python mylibrary.py中,我使用协议缓冲器对数据进行建模,方法如下:

  • 在.proto文件中定义消息格式。
  • 使用协议缓冲区编译器。
  • 使用protocol缓冲器API在.py模块中写入和读取消息。

我想实现应用程序引擎上的云终结点框架那个imports并使用前面提到的imports脚本,但是Cloud使用的是ProtoRPC,而不是“标准”协议缓冲器

我的deserialization模块main.pyprotorpc导入,而不是使用“脱机”protoc编译器生成序列化和反序列化代码:

代码语言:javascript
复制
from protorpc import messages
from protorpc import remote

消息是而不是使用.proto文件定义的​。相反,定义了类,从protorpc.messages.Message继承

代码语言:javascript
复制
class MyMessageDefinition(messages.Message)

Proto缓冲区可以转换为Proto RPC等价物吗?我真的不想将mylibrary.py更改为使用ProtoRPC,因为它不像协议缓冲器那么通用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 14:19:30

经过八个月的试验和大量的试验,我会补充我的意见。我希望这能节省一些时间。

首先选择框架,

Google有不同的云终结点服务。所有这些都可以用于JSON/REST。这对我来说还不是很清楚。云端点是一个非常高级的短语,涵盖 Google后端上API的开发、部署和管理。

这里的要点是,在决定使用Cloud之后,您仍然必须决定后端技术以服务于您的API。文档感觉有点隐藏,但我强烈建议从谷歌云终结点文档开始。

您可以在以下两种情况中进行选择:

  1. OpenAPI规范
  2. 端点框架
  3. gRPC

选择您的实现第二个

在每个API框架中,都可以选择您的API (服务)可以在其上运行的云实现:

OpenAPI规范 -对于JSON/REST API,实现于:

  • Google灵活环境
  • Google计算引擎
  • Google容器引擎
  • 库伯内斯

端点框架 -对于JSON/REST API,实现于:

  • 基于Java的Google标准环境
  • 使用Python的Google标准环境

gRPC - gRPC API实现于:

  • Google计算引擎
  • Google容器引擎
  • 库伯内斯

在这里发布问题时,我使用的是运行在Google标准环境中的端点框架。然后,我在上将API (服务)迁移到gRPC。

您可能会注意到,OpenAPI规范端点框架都可以用于JSON/REST API,而gRPC只公开gRPC API。那么,我如何将REST从端点框架移植到gRPC呢?答案是将HTTP/JSON转换为gRPC (这是我一路上学到的,对我来说还不清楚)。所以,不要仅仅因为您想要REST/HTTP就排除gRPC。

答案

那么这与我最初的问题有什么关系呢?

我试图在.proto文件和gRPC注释之间进行转换,这意味着我在这条路上走错了路。

如果要使用普通.proto文件编写应用程序,请在Compute上选择gRPC。如果您需要这是一个REST,这是可以做到的,但是您需要在后端配置中添加一个特别是。它基本上是一个作为反向代理的尼克斯服务器设置。这里唯一的缺点是您需要一些Docker知识来确保ESP (代理)和您的gRPC服务器可以通信(Docker网络)。

如果您的代码已经在App上,并且希望以最小的工作量将其公开为REST,并且仍然具有良好的API管理特性,则选择端点框架警告:我离开这里是因为它太贵了(我每月收到100美元左右的账单)。

如果您想完全避免.protos,那么就使用OpenAPI规范

最后,如果您想提供编程集成、客户端库,或者想提供一个微服务,那么确实要考虑gRPC。很容易删除ESP (代理)并在几乎任何一台机器上运行gRPC服务器(只要安装了协议缓冲运行时就行)。

最后,我决定在gRPC上使用Docker的计算引擎。我还有一个ESP来提供到gRPC的HTTP转码,反之亦然。我喜欢这种做法有几个原因:

  1. 您学到了很多: Docker、Docker网络、NGINX配置、协议缓冲区、ESP (云代理)、gRPC服务器。
  2. 服务(核心业务)逻辑可以用普通的gRPC编写.这允许在没有web服务器的任何机器上运行该服务。您的业务逻辑是服务器:)
  3. 协议缓冲区/ gRPC非常适合将业务逻辑作为service...or微服务隔离开来。它们也很适合提供定义良好的接口和库。

避免这些错误

  • 实现您找到的第一个框架/体系结构。如果我能重新开始,我就不会选择端点框架。它很昂贵,而且使用注释而不是.proto文件,这使得代码很难移植。
  • 在决定框架和实现之前,先阅读始终免费使用限制端点框架使用后端应用程序引擎实例--它们几乎没有免费配额。令人困惑的是,前端应用程序引擎实例有一个非常慷慨的自由配额
  • 以地方发展为例。云端点本地开发服务器不受官方支持(至少在我提出问题时它们并不受支持)。相反,运行本地可扩展服务代理有一整页内容。
票数 4
EN

Stack Overflow用户

发布于 2017-10-11 19:37:31

我发现了一个名为pyprotobuf (http://pyprotobuf.readthedocs.io)的项目,它可以从proto文件开始生成一个带有protorpc类的模块。

根据文档(http://pyprotobuf.readthedocs.io/topics/languages/protorpc.html),您需要执行:

原型-格式python example.proto

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43019917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档