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 之间的取舍时需要考虑一些折衷。你为项目选择什么将取决于你的需求和资源。



相关文章
|
11天前
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
12天前
|
前端开发 JavaScript API
探索GraphQL:如何构建高效的数据API
【10月更文挑战第25天】在现代Web开发中,API的效率和灵活性至关重要。本文探讨了如何利用GraphQL构建高效的数据API。GraphQL通过声明式查询方式,允许客户端精确指定所需数据,减少数据传输量,提高API效率。文章介绍了设置GraphQL服务器、设计API Schema、实现解析函数及调整前后端交互的具体步骤,展示了GraphQL的优势和应用场景。
27 2
|
17天前
|
搜索推荐 数据挖掘 API
1688 详情 API 接口的优势体现在哪些方面?
1688详情API接口提供高效自动化数据获取、高质量全面数据、助力业务决策与营销、提升客户服务体验、广泛灵活的应用场景及安全可靠的数据保护,全方位支持商家发展。
|
21天前
|
安全 API 数据安全/隐私保护
商品详情API接口的优势分析与应用价值
在数字化时代,商品详情API接口为商家和开发者提供了实时更新、高效集成、丰富功能、安全稳定、易于扩展及提升用户体验的解决方案,助力提高运营效率、降低成本并增强市场竞争力。
|
25天前
|
缓存 监控 前端开发
利用GraphQL提升API开发效率
【10月更文挑战第10天】本文介绍了GraphQL的核心概念、优势及其实现步骤,探讨了其在现代开发中的应用,包括动态数据需求、单页应用和微服务架构。通过缓存策略、批处理、安全性和监控等实战技巧,提升API开发效率和用户体验。
|
5月前
|
JavaScript API 开发者
GraphQL API开发入门:比RESTful更高效的数据查询方式
**GraphQL API开发入门摘要** GraphQL是一种更高效的数据查询方式,解决RESTful API的过度或不足获取数据问题。它允许客户端按需获取数据,减少网络传输,支持一次请求获取多资源。强类型和自描述特性方便了开发。文章通过一个简单的Node.js示例,展示如何使用`apollo-server-express`搭建GraphQL服务器,包括定义Schema、实现Resolver和创建服务器。通过测试,显示了GraphQL如何提供精确数据和优化查询效率。对于复杂数据需求,GraphQL是现代API设计的有效选择。
65 0
|
1月前
|
安全 API 数据库
掌握GraphQL:现代API开发的新选择
【10月更文挑战第1天】在传统RESTful API显现出局限性后,GraphQL作为新型API查询语言和运行时,提供更灵活的数据获取方式。客户端可精确指定所需数据结构,减少传输量并提升效率。本文探讨GraphQL核心概念、优势及实施方法。尽管存在复杂性和性能优化等挑战,GraphQL仍是构建现代API的强大工具。
|
17天前
|
API
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
25 0
|
2月前
|
安全 API PHP
ThinkPHP 资源路由的简单使用,restfull风格API
本文介绍了在ThinkPHP框架中使用资源路由来创建RESTful风格的API,包括如何通过命令行创建资源控制器,注册资源路由,以及资源控制器中各方法的默认操作和测试方法。
ThinkPHP 资源路由的简单使用,restfull风格API
|
2月前
|
API 网络架构 微服务
探索 GraphQL:现代 API 开发的新范式
GraphQL 是一种高效的 API 查询语言,允许客户端精确请求所需数据,避免了传统 RESTful API 中的数据冗余问题。它由 Facebook 开发并开源,现广泛应用于现代 Web 和移动应用。本文将介绍 GraphQL 的核心概念、优势及其在不同场景下的应用,并指导你如何构建和优化 GraphQL API。
下一篇
无影云桌面