上行链路的协议缓冲区(protobuf)支持。

uplink-protobuf的Python项目详细描述


上行链路+协议缓冲区

Build StatuscodecovMaintainabilityCode style: black

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 更多。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在创建hashmap时正确使用泛型   java java编译器和模块   从每个ArrayList对象具有多个值的ArrayList写入文本文件(java)   java日程表每日报警管理器   显示客户端屏幕的java   尝试使用jpcap读取数据包时出现网络编程异常(java.lang.InstanceionException)   java如何为API测试创建JSESSIONID   ReportServer中的电子邮件SMTP配置和java错误。没有为PKCS#12密钥库提供密码   java如何最小化UDP数据包丢失   使用自定义hibernate类型时出现java ehcache错误?   java异步servlet,我们为什么需要它   java元数据项错误   security Java安全地存储代码中使用所需的用户帐户详细信息   替换文件中包含的文件名,并使用java将文件重命名为新名称   java Lucene按国家排序   java casting Integer>Object和更高版本的Object>Integer   java如何从电子表格行项将准备好的语句循环到derby数据库   需要安卓 java中模型的值名称