标签: protorpc

不带参数的Protobuf RPC Service方法

我正在尝试使用Google的Protocol Buffers来描述RPC服务

service WhoamiService {
  rpc WhoAreYou() returns (Whoami) {}
}

message Whoami {
  optional bytes request_id = 1;
  optional string hostname = 2;
  optional string message = 3;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译这个定义时,我得到一个Expected type name指向该WhoAreYou()片段的错误.

它工作正常,如果我取代WhoAreYou()WhoAreYou(Whoami),但在这种情况下,该方法不需要任何参数.是有办法做到这一点还是根本不支持?

protocol-buffers protorpc

35
推荐指数
2
解决办法
1万
查看次数

Visual Studio Code pylint:无法导入'protorpc'

我在Visual Studio Code中使用pylint来开发Python中的Google App Engine(GAE)Cloud Endpoint API.我无法解决lint错误.我不知道是什么导致了错误,但是猜测,pylint找不到库?protorpc

在此输入图像描述

故障排除Linting中的建议修复是将工作空间设置配置为指向完全限定的python可执行文件.我已经这样做了,但皮棉错误仍然存​​在.

在此输入图像描述

protorpc 本身安装到:

~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0/protorpc
Run Code Online (Sandbox Code Playgroud)

...这包含remote.py无法导入的模块:

__init__.py             generate_python.py      protojson.py            transport.py
definition.py           google_imports.py       protourlencode.py       util.py
descriptor.py           message_types.py        registry.py             webapp
generate.py             messages.py             remote.py               wsgi
generate_proto.py       protobuf.py             static
Run Code Online (Sandbox Code Playgroud)

我已将此路径添加到$PYTHONPATH(与厨房水槽一起):

export GOOGLE_CLOUD_SDK=~/google-cloud-sdk
export APPENGINE_PATH=$GOOGLE_CLOUD_SDK/platform/google_appengine

export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk/api_lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib/protorpc-1.0/protorpc
Run Code Online (Sandbox Code Playgroud)

应用程序在本地运行,也在部署时运行,因此这似乎只是一个lint错误,但令人沮丧的是我无法解决它.

使用第三方库声明:

标准环境中的Python运行时包括Python标准库,App Engine库和一些捆绑的第三方软件包.

因此,我认为 "App Engine库"包括protorpc,但我不确定.此外,将Cloud Endpoints Frameworks库添加到示例API …

python google-app-engine visual-studio python-2.7 protorpc

31
推荐指数
8
解决办法
5万
查看次数

端点API - protorpc验证错误

protorpc当我使用端点时,我会收到一些奇怪的错误.在这段代码中:

class Application(EndpointsModel):

    _message_fields_schema = ('id', 'name')

    created = ndb.DateTimeProperty(auto_now_add=True)
    name = ndb.StringProperty()
    roles = ndb.IntegerProperty(repeated=True)
    updated = ndb.DateTimeProperty(auto_now=True)
    owner = ndb.KeyProperty(kind='User')

@API.api_class(resource_name="application")
class ApplicationApi(protorpc.remote.Service):

    @Application.method(http_method="GET",
                        request_fields=('id',),
                        name="get",
                        path="applications/{id}")
    def ApplicationGet(self, instance):
        if not instance.from_datastore:
            raise endpoints.NotFoundException("Application not found.")
        return instance

    @Application.query_method(http_method="GET",
                              query_fields=('limit', 'order', 'pageToken'),
                              name="list",
                              path="applications")
    def ApplicationList(self, query):
        return query
Run Code Online (Sandbox Code Playgroud)

当我调用application.get()错误时如下:( 完全跟踪):

TypeError:只能从确切类型为Application的实体进行复制.收到了一个Application实例.

并且调用application.list()错误如下:( 完全跟踪):

ValidationError:<class '.Application'>找到的字段项的预期类型<Application name: u'test'>(类型<class '.Application'>)

可能是什么导致了这个?我的其他模型具有几乎相同的代码(只是不同的属性)工作正常.

python google-app-engine protorpc google-cloud-endpoints endpoints-proto-datastore

30
推荐指数
1
解决办法
801
查看次数

将proto缓冲区转换为ProtoRPC

在Python脚本中mylibrary.py,我使用Protocol Buffers来使用以下方法对数据建模:

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

我想实现在App Engine云端点框架imports和使用上述Python脚本,但是云端点使用ProtoRPC的,不是"标准" 协议缓冲区.

我的App Engine Python模块从而不是使用'offline' 编译器main.py导入以生成序列化和反序列化代码:protorpcprotoc

from protorpc import messages
from protorpc import remote
Run Code Online (Sandbox Code Playgroud)

消息使用.proto文件定义.而是定义类,继承自protorpc.messages.Message:

class MyMessageDefinition(messages.Message)
Run Code Online (Sandbox Code Playgroud)

Proto Buffers可以转换为Proto RPC等价物吗?我真的不想改为mylibrary.py使用ProtoRPC,因为它不像Protocol Buffers那样通用.

python google-app-engine protocol-buffers protorpc

5
推荐指数
1
解决办法
418
查看次数

protorpc使用FieldList从调用者读取列表

我有一个webservice应该从调用者读取列表,做一些工作,然后返回一个响应.

  @endpoints.method(ARequestMessage, AResponseMessage,
                    name="call", path="call")
  def call(self, request):
    aList = request.in_list
    for stuff in aList:
       "do work here"
    return when I am done
Run Code Online (Sandbox Code Playgroud)

以下ARequestMessage课程会起作用吗?

class ARequestMessage(messages.Message):
  name = messages.StringField(1, required=True)
  in_list = messages.FieldList(2, required=True)
Run Code Online (Sandbox Code Playgroud)

我不确定我FieldList在结构或上下文中的用法.请包含一些代码作为回应.

google-app-engine python-2.7 protorpc google-cloud-endpoints

4
推荐指数
1
解决办法
424
查看次数

何时使用.ProtoRPC或REST

我主要在工作中处理REST json API.所以我熟悉他们.但对于我自己的项目,我正在尝试app引擎,因为我认为它非常合适.

我已经开始在python中编写我的逻辑(使用ferris),并且在阅读更多应用程序引擎时,我遇到了protorpc和云端点.但在我读过的大部分例子中,他们似乎都在做同样的事情,就像在休息api中做的那样.用json发出请求,然后获得json响应.或者是错误.

我看到的主要区别在于,在休息时,端点基于资源.并且围绕它们的HTTP动词,例如GET,POST,PUT,DELETE等.在RPC中,每个请求都有自己的端点,而不是基于资源或模型.

两者都要求,并与json回应.所以我认为我没有看到使用Google端点的好处.他们是否提供其他一些好处?我可以通过端点看到更好的分析跟踪.但是我还不需要使用post http动词来修改内容吗?

如果我使用某些框架,这会改变吗?像django.虽然我目前正在测试Ferris,它有一个处理protorpc的消息传递系统.虽然,我还没能休息.

那我错过了什么?端点有什么好处,只是让我的对象方法处理一个json请求.套接字连接是否适用于此?

api rest google-app-engine protorpc google-cloud-endpoints

3
推荐指数
1
解决办法
457
查看次数

GAE ProtoRPC是否支持请求的json数据字段

我正在开发python和GAE,

当我尝试使用ProtoRPC进行Web服务时,我找不到让我的请求在消息中包含json格式数据的方法.像这样的例子:

请求格式:

{"owner_id":"some id","jsondata":[{"name":"peter","dob":"1911-1-1","aaa":"sth str","xxx":sth int}, {"name":...}, ...]}'       
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

class some_function_name(messages.Message):
owner_id = messages.StringField(1, required=True)
jsondata = messages.StringField(2, required=True)      #is there a json field instead of StringField?
Run Code Online (Sandbox Code Playgroud)

还有其他建议吗?

google-app-engine protorpc

3
推荐指数
1
解决办法
1684
查看次数

protoRPC:返回dict

如何dict通过一个类似的对象返回protoRPC

我试过用了 FieldList无效.我只看到以下字段定义:

       'IntegerField',
       'FloatField',
       'BooleanField',
       'BytesField',
       'StringField',
       'MessageField',
       'EnumField',
Run Code Online (Sandbox Code Playgroud)

python google-app-engine protorpc

3
推荐指数
1
解决办法
2078
查看次数

ProtoRPC API是ajax内置的GAE吗?

下一步:gae/py app的ajax前端.

我的应用程序只有基本的html版本,可以与数据存储区交互并每次更新页面.没关系,但现在需要ajax.我尝试了一些解决方案:基本的javascript,jquery的ajax API和一些框架.

我想我在knockoutjs中找到了我想要的东西,但是这个框架通过json格式与服务器交互.这意味着我需要学习json库并重写所有处理程序,以便在json中获取和发布.我可以开始这个任务,但在我想了解更多关于ProtoRPC API之前.

文档说这个API对于"创建结构化的Ajax后端"也很有用,如果我理解的话,响应中的消息是json格式的.我的问题是:

ProtoRPC API消息确实使用json?

所有请求/响应都通过ProtoRPC会出现问题吗?

实现服务器端固态ProtoRPC服务并使用框架进行客户端是一个很好的策略?

ajax google-app-engine json protorpc knockout.js

2
推荐指数
1
解决办法
363
查看次数