GraphQL实战:写给全栈工程师们
上QQ阅读APP看书,第一时间看更新

2.3.4 自定义复杂类型

和C++、Java等很多高级语言一样,GraphQL也允许使用复杂类型。电商网站的核心数据是商品,本节将讨论如何在GraphQL中设计一个电商网站中会用到的商品和用户等自定义复杂数据类型。

需求 商品中包括id、名字、价格、库存和是否包邮这五条信息。id和名字为字符串型,价格为浮点型,库存为整型,是否包邮为布尔型。

对于商品中的每一条具体的信息,利用上一节中的知识,很容易使用基本标量类型来表达。那么如何才能把它们表达成一个整体呢?可以把它们都放在一个字符串里,用逗号分隔一下,但这不利于读取和修改的(每次查询和修改都要把字符串拆开,其中的数字可能还需要解析,这很麻烦,也很耗时)。于是就需要把这些简单字段聚合在一起,形成一个新类型,也就是复杂数据类型(Composite Data Type)的概念。熟悉C语言的读者可能已经联想到了struct(很多语言的复杂类型都由这个struct衍生而来)。下面看看在C中如何定义一个复杂类型:

上面定义的这个struct里包含五个简短数据,id、name、price、inStock和isFreeShipping,把它们称作字段(Field)。它们中的每一个都可以独立读取和修改。这种复杂类型是GraphQL前后端实现的基础。把上面的struct翻译成GraphQL,就是下面的样子:

GraphQL的复杂类型可以看作是基本标量类型的集合。这种复杂类型的定义,可以明确地表明,每次成功请求一个商品(Product),都会在其中找到id、name、price、inStock和isFreeShipping这五个具体的数据。