掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

GraphQL vs REST:API实现哪家强?

在法国巴黎 API 日上,来自 AXA Banque 的 API 架构师 Arnaud Lauret 谈了 GraphQL 和 RESTful HTTP API 各自的优点和缺点。从他的总结可以看出,是使用场景决定了具体该使用哪种 API,而且这两类 API 在实际使用中会有很多的权衡考虑。

GraphQL 是一种 API 查询语言,是由 Facebook 创建并最终开源的,可以认为是 REST 的一种替代品。Lauret 给出了一些二者进行比较的切入点:

  • GraphQL 能够通过一次查询得到所有需要的数据,从而减少网络跳转的次数。

  • GraphQL 采用所见即所得模型,这样客户端代码不易出错。

  • RESTful HTTP 通过使用状态码和 HTTP verb,提高了结果的一致性和可预测性。

  • RESTful 借助超媒体(Hypermedia),用户使用 API 时可以“发现”资源间的关系,这简化了 REST 的具体实现。

  • HTTP 实现了缓存机制而 GraphQL 还没有实现。

  • GraphQL 给用户提供了 schema,这很有用,但是需要注意的是接口描述并非 API 文档。

Lauret 认为,GraphQL 的主要优势是其使用的所见即所得 (WYSIWYG) 模型。也就是说,查询结果的结构是查询结构本身的精确映射,这样的话,用户在解排(unmarshal)响应的时候不容易出错。

他也解释了为什么 GraphQL 模型可以减少网络跳转次数。对 RESTful HTTP 来说,资源和子资源可能存在于不同的节点上,所以需要多个请求才能获取到期望的数据的情况就在所难免。但是 GraphQL 却可以在单次请求中获取到所有期望数据。实际上,一次只查询系统中的一种资源是有可能的。

虽然 Lauret 认为模型非常强大,但是他也解释了单端点方案可能带来的一致性和可预测性损失。相对于 RESTful HTTP API,GraphQL 不能正确使用 HTTP verb 会带来很明显的损失。举个例子,在使用 RESTful HTTP 时,当用户向资源发送了 DELETE 请求时,用户清楚这个操作是安全和幂等的,同时也清楚这个操作是用来删除资源的。

Lauret 指出 GraphQL 缺少 HTTP 状态码会带来可预测性损失,HTTP 状态码是人机都可读的。相关的例子如当不能找到资源时返回的 404 状态码,或者用户没有权限访问时返回 403 状态码等等。

REST 充分利用了超媒体,也就是说通过遍历 API,用户就可以发现链接和相关资源。这就消除了用户用于链接构建和给客户端返回资源关系等操作的需求。Lauret 解释说因为 GraphQL 完全聚焦于数据,所以开发者会更加依赖于文档。

因为 HTTP 缓存已经是 web 架构的一部分,所以 Laure 强调 HTTP RESTful API 使用了这种标准的 HTTP 缓存,而 GraphQL 的用户则需要自己实现缓存机制, 这种额外的负担其实是可以避免的。

Lauret 列出了 GraphQL 的最后一个优势,即提供 schema,schema 可以在运行时被获取到。当客户端决定可能的查询时,这非常有用。但是 Lauret 警告说接口描述不是文档,GraphQL 不足以解决所有的 API 文档问题。

作为总结,Lauret 认为没有通用方案,只要是对当前需求有利的方案都可以使用。他也提到,由于高级 API 所具有的共性,如果用户不善于使用某种 API,那么他们其实不善于使用任何一种 API。完整视频可以通过这里在线观看:

https://www.infoq.com/presentations/api-rest-graphql

关于该演讲的总结可以参考该篇博客文章:

https://apihandyman.io/and-graphql-for-all-a-few-things-to-think-about-before-blindly-dumping-rest-for-graphql/

前端之巅.png

原文来自:前端之巅

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 全球天气预报

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

    支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等

  • 购物小票识别

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

  • 涉农贷款地址识别

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

  • 人脸四要素

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

  • 个人/企业涉诉查询

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future