
上QQ阅读APP看书,第一时间看更新
2.3.1 强类型的查询语言
很多人都说GraphQL是个强类型的查询语言,其传入传出的数据都需要有与之对应的类型。例如,如果客户端查询的是用户user的数据,那么这个查询返回的数据就要遵照用户user的类型所定义的结构,如果数据中有不符合预先定义的数据,比如必要字段缺失,或者数据的格式不符合要求,这样的数据都会被判定为非法,而不会返回给客户端。
GraphQL的类型系统是在运行时,也就是数据传入传出的过程中动态来帮助检查数据的合法性的。所以并不一定需要使用Java,Scala、Go或者TypeScript这些静态类型的编程语言,PHP、Python和JavaScript同样可以胜任GraphQL的开发。当然有些静态类型的编程语言为GraphQL的后端实现提供了编译期的检查,让一些错误可以及早被发现,对于很多大型项目来说,这是一个值得开发者注意的特性。
Q&A 编程语言中,强类型、弱类型、静态类型以及动态类型之间的区别是什么?
强类型和弱类型其实并不是一个学术上的定义,强与弱只是相对的概念,它们体现在一个语言有多大的纪律性来保证每一个值都能遵从这个值的类型。比如C语言一般被认为是一个强类型的语言,但是仍然可以使用void*这样的指针来绕过类型系统,做一些弱类型语言才能干的事,而且这样的代码是普遍存在于现存C语言的代码库之中的。
静态类型和动态类型的定义相对来说就比较明确了。静态类型是指类型检查在程序被编译的时候由编译器检查;而动态类型是指类型检查在程序运行的时候进行。
因此,GraphQL可以说是一个强类型的动态类型查询语言。前面所说的“合同”其实也就是GraphQL的强类型,那么GraphQL的强类型是如何定义以及保障的呢?