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



相关文章
|
10月前
|
人工智能 安全 API
Agent 工程师绕不开的必修课:API 网关 vs API 管理
本文探讨了“API管理”与“API网关”的起源、发展及差异,二者分别服务于API生命周期的不同阶段。API网关从流量网关演进至AI网关,承担运行时请求控制;API管理则从接口文档化发展到商业化平台,关注全生命周期治理。两者在实际应用中协同工作,通过分层架构和策略联动实现高效运营。未来,随着大模型应用的兴起,AI网关和MCP Server管理将成为新趋势,推动API技术迈入智能化和服务化的新阶段。
Agent 工程师绕不开的必修课:API 网关 vs API 管理
|
9月前
|
人工智能 数据挖掘 API
淘宝电商 API 接口 VS 其他平台,优势究竟在哪?
在数字化电商时代,淘宝API凭借其功能完整性、数据支持和生态系统优势,成为企业提升运营效率的关键工具。相比京东、拼多多、亚马逊等平台,淘宝API覆盖商品管理、订单处理、营销工具与数据分析等全链路环节,尤其适合中国市场及全功能集成需求。
234 6
|
9月前
|
数据采集 供应链 API
淘宝 vs 京东电商 API 接口,谁才是数据王者?
在数字化电商时代,API成为企业获取数据的关键工具。本文从功能覆盖、数据质量、开发友好度及商业模型等维度,客观对比淘宝与京东API的优劣,分析两者在不同场景下的适用性,助您判断谁才是真正的“数据王者”。
400 0
|
10月前
|
缓存 安全 API
RESTful与GraphQL:电商API接口设计的技术细节与适用场景
本文对比了RESTful与GraphQL这两种主流电商API接口设计方案。RESTful通过资源与HTTP方法定义操作,简单直观但可能引发过度或欠获取数据问题;GraphQL允许客户端精确指定所需字段,提高灵活性和传输效率,但面临深度查询攻击等安全挑战。从性能、灵活性、安全性及适用场景多维度分析,RESTful适合资源导向场景,GraphQL则适用于复杂数据需求。实际开发中需根据业务特点选择合适方案,或结合两者优势,以优化用户体验与系统性能。
|
架构师 安全 物联网
Apipost vs Apifox:高效API协作的差异化功能解析
作为企业级API架构师,深度体验APIPost与Apifox后发现几大亮点功能。目录级参数配置避免全局污染;WebSocket消息分组提升长连接管理效率;Socket.IO支持解决特定协议需求;接口锁定保障团队协作安全。大型团队适合APIPost的细粒度管控,复杂物联网项目需WebSocket分组,维护遗留系统离不开Socket.IO支持,初创团队可按需灵活选择。这些特性显著优化开发协作质量。
|
10月前
|
人工智能 安全 测试技术
Apipost vs Apifox:AI 能力决定 API 开发管理工具的真正价值
2025年,AI技术深度融入企业运营,提升生产力与竞争力。在API开发工具领域,Apipost与Apifox在AI能力上有显著差异。Apipost实现AI全流程覆盖,从文档生成、测试、开发辅助到协作优化,大幅提升效率并降低维护成本;而Apifox主要聚焦文档优化,功能较基础。在团队协作、安全合规、企业适配等方面,Apipost亦表现更优,尤其适合追求高效、安全与全流程自动化的团队。
309 1
|
9月前
|
缓存 边缘计算 前端开发
从业务需求到技术栈:电商API选型RESTful还是GraphQL?这5个维度帮你决策
在数字经济时代,电商平台的竞争已延伸至用户体验与系统效能。作为连接前后端及各类服务的核心,API接口的架构设计至关重要。本文对比RESTful与GraphQL两大主流方案,从电商场景出发,分析两者的技术特性、适用场景与选型逻辑,帮助开发者根据业务需求做出最优选择。
|
9月前
|
人工智能 供应链 API
Amazon API vs. Shopify API:哪个更适合你的业务需求?
在电商快速发展中,选择合适的API至关重要。本文对比Amazon API与Shopify API,从目标用户、功能、集成难度、成本与扩展性等方面深入分析,助你根据业务需求做出明智选择,提升运营效率,推动增长。
226 0
|
12月前
|
存储 前端开发 数据可视化
Postman vs. Apifox 用于 API 测试全面对比
寻找一款可靠的 API 测试工具?这份对比分析将深入探讨 Postman 和 Apifox 的功能和特性。了解哪款工具最适合您的 API 测试需求。
下一篇
开通oss服务