通过 HTTP 发送数据,许多开发人员已经在用 REST 了,而 GraphQL 通常被认为是一种代替遗留 REST API 的技术。本文将对比两者各自的优势、劣势以及它们之间的差异,希望能为你今后项目的技术选型提供帮忙。
REST(Representational state transfer,表述性状态转移) 是一种 API 设计架构,用于通过使用一组预定义的无状态操作(包括GET
、POST
、PUT
和DELETE
)来实现 Web 服务。
REST 的核心思想是,通过向资源的 URL 发送请求并获得响应(通常是 JSON,但这取决于 API)来检索资源。
REST 的优势
REST 的劣势
GraphQL 是一种 API 设计架构,它采用了不同的方法,在这种方法中,所有的东西都被视为一个表示其连接的图。这也意味着我们可以定制我们的请求,这样我们就可以从端点发出任何请求,并且能获得我们所请求的任何内容,仅此而已,无需更多操作。我们传递查询并得到响应。除此之外,它还允许我们将不同的实体组合到单个查询中。
GraphQL 的优势
GraphQL 的劣势
例如,我们正在显示用户的供稿,其中包含用户的帖子及其关注者的列表。在我们的例子中,我们必须显示该帖子的作者、帖子以及该用户的关注者。
如果使用 REST,我们至少要发出 2 到 3 个请求,类似于:
/user/<id>
以获得用户(作者)的详细信息,比如名称。/user/<id>/posts
获取该用户发布的帖子列表。/user/<id>/followers
以获取该用户的关注者列表。但是在所有这些情况下,我们都过度抓取数据了。例如,在第一个请求中,我们只需要名称,但是当我们使用这种方法时,我们将会获取该用户相关的所有详细信息。
此时就是 GraphQL 显示其强大功能的时候了。我们需要指定查询,然后才能获得所需的输出。要使用 GraphQL 实现相同的效果,我们可以使用类似于这样的查询:
query { User(id: '123') { name posts { title } followers { name } }}
通过使用这样的查询,我们将能获得具有以下属性的 JSON 响应。简洁明了,不是吗?
总结一下,两者主要有如下几个明显的差异:
数据抓取
REST 会导致抓取过度或抓取不足,而 GraphQL 则不会这样。在 GraphQL 中,我们得到的就是我们所要求的。
对象定义(JSON 响应)
在 REST 中,我们可以在后端定义对象,而在 GraphQL 中,我们则要在前端定义该对象。
自动缓存
REST 能自动生效缓存,而 GraphQL 则没有自动缓存系统,但是可以借助 Apollo Client、Relay 等客户端实现缓存。
错误处理
REST 中的错误处理比 GraphQL 简单得多,GraphQL 通常会给我们一个 200 OK 的状态码,即使已经出现错误了。但是,当使用 Apollo Client、Relay 等客户端时,它也能很容易处理错误。
与 REST 相比, GraphQL 当然更具优势,但它可能并不总是最佳实践。正如我前面所说的,是选择 REST 还是 GraphQL,取决于我们的应用程序。
希望本文能为大家在未来项目的技术选型中提供帮忙。如果大家想分享自己关于 GraphQL 或 REST 的经验,请在评论区留言,感谢您的阅读!
原文链接:
https://medium.com/javascript-in-plain-english/stop-using-rest-for-apis-d697727ae6dd
领取专属 10元无门槛券
私享最新 技术干货