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

2.7 简单数据验证

GraphQL对客户端发送的查询请求和服务器端返回的数据结果响应都会进行验证(Validation)。

对查询请求进行验证发生在每个操作被执行之前,这可以防止有错误或者有歧义的查询被执行而产生不良的结果。从前面的讨论中可以发现,一个GraphQL查询可以包括不止一个操作,只要任何一个操作不能通过验证,所有的操作都不会被执行。

在实践中,客户端也可以提前得到服务器端的Schema,然后在客户端进行验证,也可以对查询验证结果进行缓存,这样有问题的请求不需要发往服务器端进行验证。服务器端也可以做类似的验证结果的缓存,以减少重复验证的开销。但在客户端进行验证或者缓存验证结果的时候,需要注意服务器端的Schema可能会升级,比如说当加入新的类型、新的枚举值等的时候,在服务器端新的修改要尽量保证向前兼容,以免造成客户端和服务器端验证结果不一致的情况。

GraphQL会对请求的语法和结构进行全面验证,这涵盖很多方面。比如:前面在商品比较例子里提到的两个操作不能重名;请求商品的时候不请求id和name这两个必填项也会出错。这一节将对一些比较重要且常见的验证进行讨论,有兴趣的读者可以参考GraphQL的规范。