上行链路的协议缓冲区(protobuf)支持。
uplink-protobuf的Python项目详细描述
上行链路+协议缓冲区
uplink-protobuf
使通过http发送和接收protobuf消息变得容易。
这个库是一个Uplink插件。
目录
安装
$ pip install uplink-protobuf
基本用法
接收protobuf消息
对于任何需要protobuf编码响应的Consumer
方法,
只需将适当的protobuf消息类型设置为方法的return
value annotation:
fromuplinkimportConsumer,get# Import Python code generated by Google's protobuf compiler:fromaddressbook_pb2.pyimportPersonclassAddressBookClient(Consumer):@get("/persons/{person_id}")defget_person(self,person_id)->Person:pass
然后,当调用时,带注释的方法将适当地解码 对指定消息类型的响应:
>>>addressbook_client=AddressBookClient(base_url=BASE_URL)>>>addressbook_client.get_person(1234)name:"Omar Little"id:1234email:"omar.little@example.com"phones{number:"555-4321"type:HOME}
发送protobuf消息
对于需要发送protobuf编码请求的Consumer
方法,
只需用^{
fromuplinkimportConsumer,post,Body# Import Python code generated by Google's protobuf compiler:fromaddressbook_pb2.pyimportPersonclassAddressBookClient(Consumer):@post("/persons")defcreate_person(self,person:Body(type=Person)):pass
然后当调用该方法时,带注释的参数的值为 自动编码:
# Register new person:person=Person()person.name="Stringer Bell"person.id=5678person.email="stringer.bell@example.com"# Send person to API:addressbook_client=AddressBookClient(base_url=BASE_URL)addressbook_client.create_person(person)
与json api通信
此库还支持转换json响应和请求 往返于protobuf消息。
将json响应转换为protobuf消息
uplink-protobuf
可以自动将json响应转换为
如果Consumer
方法被注释为
returns.from_json
:
fromuplinkimportConsumer,get,returns# Import Python code generated by Google's protobuf compiler:fromaddressbook_pb2.pyimportPersonclassAddressBookClient(Consumer):@returns.from_json@get("/persons/{person_id}")defget_person(self,person_id)->Person:pass
将protobuf消息转换为json请求
uplink-protobuf
可以自动将protobuf消息转换为
如果Consumer
方法被注释为
uplink.json
:
fromuplinkimportConsumer,post,Body,json# Import Python code generated by Google's protobuf compiler:fromaddressbook_pb2.pyimportPersonclassAddressBookClient(Consumer):@json@post("/persons")defcreate_person(self,person:Body(type=Person)):pass
json选项
我们还提供了一些装饰器,允许您控制
json转换。这些装饰师可以通过
uplink_protobuf.json_options
子模块。
发送json请求的选项
下面是可以与@json
一起使用的选项,用于控制
protobuf消息到json对象的转换:
@json_options.include_default_value_fields
:这个装饰器 指示json输出应包含具有默认值的字段 价值观。默认情况下,如果未设置字段,则忽略默认值。@json_options.preserve_proto_field_names
:这个装饰符表示 json输出应该使用proto字段名作为json名。 默认情况下,json打印机将每个proto字段名转换为 lowercamelcase并将其用作json名称。@json_options.use_integers_for_enums
:这个修饰符表示 json输出应该使用proto enum值的数值, 而不是枚举值的名称。默认情况下, 枚举值在json输出中使用。
解析json响应的选项
接下来,这里是可以与@returns.json
一起使用的选项,用于控制
json响应到protobuf消息的转换:
@json_options.ignore_unknown_fields
:这个装饰符表示 json解析器应该忽略解析中的未知字段。 默认情况下,如果json解析器遇到 一个未知的领域。
最后,这里有一个使用这些选项的Consumer
示例:
fromuplinkimportConsumer,post,Bodyfromuplink_protobufimportjson_options# Import Python code generated by Google's protobuf compiler:fromaddressbook_pb2.pyimportPersonclassAddressBookClient(Consumer):@returns.from_json@json_options.ignore_unknown_fields@get("/persons/{person_id}")defget_person(self,person_id)->Person:pass@json@json_options.include_default_value_fields@post("/persons")defcreate_person(self,person:Body(type=Person)):pass
常见问题
什么是协议缓冲区?
查看google的官方协议缓冲区Developer Guide。
如何安装google的protobuf编译器
protoc
?签出this guide以获取Mac的安装说明 还有Linux。
如何使用
protoc
编译我的.proto
文件?参考this section 在《官方协议缓冲区开发人员指南》中。
什么是上行链路?
它是一个“声明式http客户端”。签出库的GitHub repo 更多。