REST API 有什么问题?
首要问题就是扩展性方面,随着 API 的不断发展,会变得越来越臃肿
REST API 的方式是:server定义一系列的接口,client调用自己需要的接口,获取目标数据进行整合
例如用户接口,刚开始时,返回的信息会比较少,例如只有 id,name
后来用户的信息增加了,就在用户接口中返回更多的信息,例如 id,name,age,city,addr,email,headimage,nick
但可能很多client只是想获取其中少部分信息,如 name,headimage,却必须得到所有的用户信息,然后从中提取自己想要的
这个情况会增加网络传输量,并且不便于client处理数据
还有一个不方便的地方,例如client在某个需求中,可能需要调用多个独立的 API 才能获取到足够的数据
例如client要显示一篇文章的内容,同时要显示评论、作者信息,那么就可能需要调用文章接口、评论接口、用户接口
这种方式非常不灵活
GitHub 还遇到其他一些 REST API 不好处理的问题,例如
想要确保client提供的参数的类型安全;想要从代码生成文档;想要识别每个端点的OAuth请求范围 ……
使用 GraphQL 有什么好处?
GraphQL 简单来说就是:取哪些数据是由client来决定
REST 中,给哪些数据是server决定的,client只能从中挑选,如果A接口中的数据不够,再请求B接口,然后从他们返回的数据中挑出自己需要的
GraphQL 中,client 直接对 server说想要什么数据,server负责精确的返回目标数据