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

2.4 定义操作

在定义好了电商网站的数据Schema之后,有经验的读者可能会发现,其实定义的只是“零件”,这些“零件”并不是服务器端最终所能提供的功能操作。比如说我们有了用户User这个类型,但是最终暴露给客户端的可能是查找用户、新建用户以及删除用户这些具体的功能操作。一般把这些具体的功能都设计成GraphQL操作。这一节,就来讨论一下如何定义GraphQL的操作。

和数据类型一样,GraphQL所有的操作也都必须事先定义在服务器端的Schema当中,而且定义操作的方式和定义数据类型的方式一样,甚至定义这些操作本身,也是一种数据类型。

在服务器端的数据类型中,为操作预设了三种特殊的数据类型——Query(只读查询)、Mutation(可写修改)和Subscription(订阅)。这三种特殊类型定义了客户端发送的请求和返回结果的形式。所有请求和结果都必须符合Query、Mutation和Subscription中的定义,客户端才能最终拿到所需要的结果数据。和RESTful API不同,所有来自客户端的请求都会发送给一个endpoint,为了区分不同具体功能的请求,例如查询用户、修改订单、订阅新消息等,需要在Query、Mutation和Subscription中定义对应的操作字段。可以把Query、Mutation以及Subscription想象成来自客户端所有操作的入口。