消息(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 服务消息类型的定义,下面来看一下服务接口的定义。

文档更新时间: 2023-09-02 03:40   作者:Minho