内容简介:Protocol Buffers 学习(5):在 rpc 中使用 protobuf
Protocol buffers的一个重要应用就是RPC服务,下面简单介绍一下相关的使用方法
定义服务
如果要使用RPC(远程过程调用)系统的消息类型,可以在 .proto
文件中定义一个RPC服务接口,protocol buffer编译器将根据您选择的语言生成服务接口代码和存根(记录)。 例如,如果要使用一个使用 SearchRequest
并返回 SearchResponse
的方法定义RPC服务,可以在 .proto
文件中定义它,如下所示:
service SearchService {
rpc Search (SearchRequest) returns (SearchResponse);
}
目前比较典型的使用protocol buffer的RPC是google的gRPC
JSON 映射
Proto3 支持JSON的规范编码,这使得不同系统之间共享数据更容易
如果在JSON编码中数据缺少值或者值为空,protocol buffer解析时会解析成字段的默认值
| proto3 | JSON | JSON 例子 | 说明 |
|---|---|---|---|
| message | object | {"fBar": v, "g": null, …} | Generates JSON objects. Message field names are mapped to lowerCamelCase and become JSON object keys. null is accepted and treated as the default value of the corresponding field type. |
| enum | string | "FOO_BAR" | The name of the enum value as specified in proto is used. |
|
map |
object | {"k": v, …} | All keys are converted to strings. |
| repeated V | array | [v, …] | null is accepted as the empty list []. |
| bool | true, false | true, false | |
| string | string | "Hello World!" | |
| bytes | base64 string | "YWJjMTIzIT8kKiYoKSctPUB+" | |
| int32, fixed32, uint32 | number | 1, -10, 0 | JSON value will be a decimal number. Either numbers or strings are accepted. |
| int64, fixed64, uint64 | string | "1", "-10" | JSON value will be a decimal string. Either numbers or strings are accepted. |
| float, double | number | 1.1, -10.0, 0, "NaN", "Infinity" | JSON value will be a number or one of the special string values "NaN", "Infinity", and "-Infinity". Either numbers or strings are accepted. Exponent notation is also accepted. |
| Any | object | {"@type": "url", "f": v, … } | If the Any contains a value that has a special JSON mapping, it will be converted as follows: {"@type": xxx, "value": yyy}. Otherwise, the value will be converted into a JSON object, and the "@type" field will be inserted to indicate the actual data type. |
| Timestamp | string | "1972-01-01T10:00:20.021Z" | Uses RFC 3339, where generated output will always be Z-normalized and uses 0, 3, 6 or 9 fractional digits. |
| Duration | string | "1.000340012s", "1s" | Generated output always contains 0, 3, 6, or 9 fractional digits, depending on required precision. Accepted are any fractional digits (also none) as long as they fit into nano-seconds precision. |
| Struct | object | { … } | Any JSON object. See struct.proto. |
| Wrapper types | various types | 2, "2", "foo", true, "true", null, 0, … | Wrappers use the same representation in JSON as the wrapped primitive type, except that null is allowed and preserved during data conversion and transfer. |
| FieldMask | string | "f.fooBar,h" | See fieldmask.proto. |
| ListValue | array | [foo, bar, …] | |
| Value | value | Any JSON value | |
| NullValue | null | JSON null |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UML基础、案例与应用
施穆勒 / 李虎、赵龙刚 / 人民邮电出版社 / 2004-7-1 / 42.00元
本书教读者循序渐进地、系统地学习UML基础知识和应用技术。和前一版相比,本书内容根据UML 2.0进行了补充和更新,随书光盘包含了建模工具Poseidon的试用版。 全书分为三部分24章。第一部分“基础知识”包括第1章到第15章,主要是介绍UML语言的基础知识以及面向对象的概念和思想,还简单介绍了UML在开发过程的应用方法。第二部分“学习案例”包括第16章到第22章,结合实例详细分析了UML的应用......一起来看看 《UML基础、案例与应用》 这本书的介绍吧!