消息(message)是客户端和服务器端交换的数据结构。正如图 2-1 所示,ProductInfo 用例有两个消息类型:一个是商品信息(Product),用于在系统中添加新的商品,另外当检索特定的商品时,它也会用作返回值;另一个消息类型是商品的唯一标识(ProductID),用于从系统中检索特定商品,当添加新商品时,它也会用作返回值。
ProductID
ProductID 是商品的唯一标识,可以是字符串类型的值。我们也可以自定义包含字符串字段的消息类型,抑或使用 protocol buffers 库所提供的较为流行的消息类型 google.protobuf.StringValue。本例将自定义包含字符串字段的消息类型。ProductID 消息类型的定义如代码清单 2-1 所示。
代码清单 2-1 ProductID 消息类型的 protocol buffers 定义
message ProductID {
string value = 1;
}
Product
Product 是自定义消息类型,代表在线零售应用程序中的商品应该具有的数据。它包含一组字段,这些字段代表每个商品所关联的数据。
假设 Product 消息类型有如下字段。
字段 | 含义 |
---|---|
id | 商品的唯一标识符。 |
name | 商品的名称。 |
description | 商品的描述。 |
price | 商品的价格。 |
这样就可以使用 protocol buffers 来自定义消息类型,如代码清单 2-2 所示。
代码清单 2-2 Product 消息类型的 protocol buffers 定义
message Product {
string id = 1;
string name = 2;
string description = 3;
float price = 4;
}
这里为每个消息字段所分配的数字用来在消息中标识该字段。因此,在同一个消息定义中,不能为两个字段设置相同的数字。第 4 章会进一步介绍 protocol buffers 消息定义技术,并阐述为每个字段提供唯一数字的原因。就现在来讲,可以将其视为定义 protocol buffers 消息的一个规则。
protocol buffers 库为众所周知的类型提供了 protobuf 消息类型的集合。因此,可以在服务定义中重复使用它们,而无须再次定义这样的类型。可以在 protocol buffers 文档中详细了解这些消息类型。
目前已完成了 ProductInfo 服务消息类型的定义,下面来看一下服务接口的定义。