GraphQL VS Restfull Api ,看看谁更有优势

简介: GraphQL VS Restfull Api ,看看谁更有优势

REST 并不是在 web 上发送信息的第一种协议。但十多年来,它一直主宰着 API 领域。

最近,由 Facebook 设计的新手 GraphQL 变得越来越流行。它的目的是纠正REST的一些缺点,但没有一项技术是完美的。

与 REST 相比,GraphQL 有哪些优点?为什么要在项目中使用其中一种?

REST Api 存在的问题

首先,让我们讨论一下 REST 的一些弱点以及 GraphQL 如何试图解决它们。主要有三个原因:

  • 到服务器的次数过多
  • 抓取过度/抓取不足
  • 缺乏灵活性

使用 REST Api 访问服务器的次数太多

假设我们正在创建一个社交媒体应用程序。它可能会显示所有用户最近的帖子,以及用户名和个人资料照片。

例如,在 REST 中,您需要向 /api/posts 发送 GET 请求来获取帖子,该请求可能会返回一个 JSON 对象,其中包含帖子标题、内容、标记、日期,可能还有用户 ID。

然后,您可能需要为每个帖子发送一个 GET 请求到 /api/users/:id/ ,以便获得关于用户的用户名、头像和任何其他相关信息的信息。

当您考虑到您可能会为每个用户发出GET请求时,对于一个页面来说,这是大量的来回操作!

使用 GraphQL ,你可以一次访问服务器并获得你需要的一切:

query {
    posts {
        title,
        content,
        tags,
        date,
        user {
          username,
            avatar,
            catchphrase,
            favorite_dog
        }
    }
}

在小范围内,多次访问服务器并不是什么大问题。但是,一旦要处理大量数据,将 API 调用减少到最少显然会对您有好处。 GraphQL 使得这一点很容易实现。

抓取过度/抓取不足

另一个存在的问题是过多抓取和抓取不足。在 REST API 中,当您到达一个端点时,总是会得到相同的数据,无论您是否需要它。

假设我们只需要某人的用户名和头像。如果 /user/:id 返回他们的用户名、头像、标语和最喜欢的狗的品种,你就会得到所有这些信息,不管你是否愿意。

在另一端,您可能会出现抓取不足的情况,这就需要返回到服务器以获取更多信息。

要显示单个用户的帖子,我们需要用户信息和帖子的内容。如果我从用户端点获取用户,我仍然需要点击 posts 端点,并使用 userid 检索 posts。

// 首先获取用户信息数据
GET /api/users/42
{
    "username": "Mr. T",
    "avatar": "http://example.com/users/42/pic.jpg",
    "catchphrase": "I pity the fool",
    "favorite_dog": "beagle"
}
// 接着,获取用户的帖子
GET /api/users/42/posts
{
    "posts": [{
        "title": "Hello World",
        "content": "Hi everyone!"
        "tags": "first post"
        "date": "July 1, 2020"
    }]
}

正如我们在前面的例子中看到的,GraphQL 解决了这个问题,它允许用户使用一个端点,只获取他们需要的内容。

缺乏灵活性

在前一点的基础上进一步扩展,REST 依赖于创建符合前端需求的api。如果您能够预测前端在碰到特定端点时需要什么,就可以精确地调整检索到的数据,以匹配该视图。

当视图是相对静态的时候,这种方法工作得很好。但如果你的前端经常变化,你就需要一个 API,它可以更灵活地返回数据。

类似地,如果你的 API 被具有不同需求的各种不同客户端使用,那么 REST API 的灵活性将不适合您的目的。

GraphQL 允许检索不同配置的数据,从而提供了这种灵活性。

query {
    users {
      username,
        avatar
    }
}
// 如果想要获取用户最喜欢的宠物狗
query {
    users {
        username,
        avatar,
        favorite_dog
    }
}

应该使用 REST 还是 GraphQL ?

从本文来看,GraphQL 似乎总是比 REST 好,但事实并非如此。在构建应用程序时,你所做的每一个架构决策都有其优缺点,这也不例外。

以下是一些需要考虑的事情:

如果您需要一些易于使用的工具,请选择 GraphQL 。

正确使用 REST 有一个学习曲线,如果你还不知道它,你可以使用 GraphQL 更轻松地创建一个优秀的 API。

如果使用GraphQL,请决定如何处理错误

REST Api 能够更好地利用 HTTP 的错误报告特性。如果您不想为客户端错误返回 200 OK 状态(这在 GraphQL 中很常见),则需要更多地考虑错误处理。

REST 可能更适合微服务

如果您在后端使用微服务,REST 可能更适合您的目的,因为它是为了将关注点分开。

如果您不需要使用可能用不同编程语言编写的不同的、完全不同的资源,那么GraphQL 的统一数据 “图” 是非常棒的,但如果您有一个更分布式的后端,就没有那么有用了。

缓存问题

缓存是 REST 内置的功能,但你必须使用 GraphQL 来管理缓存。如果你没有在适当的地方构建缓存,那么你从 GraphQL 更有针对性的获取中获得的所有提高的效率都可能被抹去。

总结

和所有事情一样,在决定 REST 和 GraphQL 之间的取舍时需要考虑一些折衷。你为项目选择什么将取决于你的需求和资源。



相关文章
|
1月前
|
网络协议 JavaScript 安全
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
第十一篇 前沿趋势与展望:深入探索GraphQL、RESTful API、WebSocket、SSE及QUIC与HTTP/3
|
1月前
|
缓存 前端开发 API
构建可扩展的API:REST vs GraphQL
【5月更文挑战第14天】在API设计中,REST和GraphQL是两种主要的架构风格。REST基于HTTP协议,强调资源的无状态性和客户端-服务器模型,适合简单CRUD操作。而GraphQL提供更灵活的数据查询,允许客户端精确指定需求,减少HTTP请求和数据冗余,适合复杂场景和高性能需求。选择时要考虑项目需求、技术栈、性能和团队经验。
|
15天前
|
安全 Java API
Java一分钟之-GraphQL:查询语言与API设计
【6月更文挑战第11天】GraphQL,一种革命性的查询语言,正在改变Web开发中的API构建和使用方式。它允许客户端按需请求数据,减少冗余,提升性能。本文概述了GraphQL的核心理念,如声明式查询、强类型和统一入口,并讨论了Java开发者常遇问题:过度查询、Schema设计和安全性。解决方案包括使用Dataloader、优化Schema和实现授权机制。通过理解原理、关注性能、重视安全和持续实践,开发者能更好地利用GraphQL构建高效API。
23 2
|
2天前
|
缓存 Java API
使用GraphQL优化Java应用的API性能
使用GraphQL优化Java应用的API性能
|
1月前
|
Java 程序员 API
Java 8 Lambda 表达式和Stream API:概念、优势和实战应用
【5月更文挑战第20天】在Java 8中,Lambda 表达式和Stream API是两个非常强大的特性,它们显著改变了Java程序员处理数据和编写代码的方式。本篇技术文章将深入探讨这些特性的概念、优点,并提供实战示例,帮助理解如何有效地利用这些工具来编写更简洁、更高效的代码。
37 6
|
1月前
|
监控 Cloud Native 安全
【阿里云云原生专栏】云原生下的API管理:阿里云API Gateway的应用场景与优势
【5月更文挑战第23天】阿里云API Gateway是高性能的API托管服务,适用于微服务API聚合、安全管理及流量控制。它提供统一入口、多种认证方式和流量控制策略,确保服务稳定性。具备高度可扩展性、丰富插件生态和简化API生命周期管理等特点。通过简单步骤,如创建API、配置后端服务、设置认证和发布,即可快速上手。作为云原生时代的API管理解决方案,阿里云API Gateway助力企业高效、安全地管理API,推动业务创新和数字化转型。
43 1
|
1月前
|
安全 前端开发 API
深入理解与实践GraphQL:构建高效、灵活的API
在本文中,我们将探索GraphQL这一强大的API查询语言及其运行原理。不同于传统的RESTful API设计,GraphQL提供了一种更加高效、灵活的方式来交互数据。通过实例和比较,本文旨在揭示GraphQL如何使前端和后端开发更加紧密协作,同时减少数据传输的冗余。我们将从GraphQL的基本概念入手,深入到查询(Queries)、变更(Mutations)和订阅(Subscriptions)的实现,最后探讨如何在实际项目中部署和优化GraphQL服务。此外,本文还将简要介绍如何利用现有的GraphQL工具和库来加速开发过程。
|
1月前
|
供应链 搜索推荐 API
API在电子商务中的应用与优势:深入解析
API是电子商务成功的关键,它们不仅促进了技术创新,还提高了用户体验和运营效率。随着技术的不断进步,API将继续在电子商务领域发挥更加重要的作用。电子商务平台通过利用API,可以更加灵活地适应市场变化,提供更加丰富和个性化的购物体验,最终实现业务的增长和扩展。
|
1月前
|
缓存 前端开发 JavaScript
【专栏】GraphQL,Facebook 开发的API查询语言,正在前端开发中崭露头角
【4月更文挑战第27天】GraphQL,Facebook 开发的API查询语言,正在前端开发中崭露头角。它提供强类型系统、灵活查询和实时更新,改善数据获取效率和开发体验。掌握GraphQL涉及学习基础概念、搭建开发环境和实践应用。结合前端框架,利用缓存和批量请求优化性能,与后端协作设计高效API。尽管有挑战,但GraphQL为前端开发开辟新道路,引领未来趋势。一起探索GraphQL,解锁前端无限可能!
|
1月前
|
分布式计算 API 数据处理
Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
【2月更文挑战第15天】Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
90 1