AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77441432
Accepted
UndercoverCoder
UndercoverCoder
Asked: 2023-11-08 04:58:18 +0800 CST2023-11-08 04:58:18 +0800 CST 2023-11-08 04:58:18 +0800 CST

GraphQL 能做什么而 REST 不能做什么?[关闭]

  • 772
关闭。这个问题是基于意见的。目前不接受答案。

想要改进这个问题吗?更新问题,以便可以通过编辑这篇文章用事实和引文来回答它。

10 小时前关闭。

改进这个问题

我发现 GraphQL 允许用户限制他们接收的数据,但这可以在 REST API 上轻松完成。

例如,您可以有一个/users端点,该端点在请求正文中采用query数组,从而限制从服务器返回的列。

还是我还缺少其他东西?

编辑:作为免责声明,我并不是询问哪个更好的意见。我要求的是 GraphQL 能做而 REST 不能做的具体事情。

rest
  • 3 3 个回答
  • 52 Views

3 个回答

  • Voted
  1. Best Answer
    Taha Ali
    2023-11-08T05:27:35+08:002023-11-08T05:27:35+08:00

    是的,你完全正确;在 REST 中,您可以设计一个接受查询参数或请求标头的端点,以控制在响应中接收的数据。但仍然存在一些关键差异,使 GraphQL 变得更好:

    1. 过度获取:在 REST 中,服务器可能仍会在响应中包含客户端不需要的额外数据,从而导致过度获取。使用 GraphQL,您可以更加精确并避免这个问题。
    2. 多个端点:在大型且复杂的 REST API 中,您可能需要创建许多自定义端点,这使得维护和记录变得困难。GraphQL 对所有查询使用单个端点,这更易于管理和探索
    3. 复杂查询:GraphQL 允许客户端表达更复杂的查询,并在单个请求中请求深度嵌套的数据,使客户端更直观地获取相关信息。
    4. 实时更新:GraphQL 内置了对实时订阅的支持,这不是 REST 中的标准功能。

    因此,虽然可以使用自定义端点和查询参数使 REST 更加灵活,但 GraphQL 是从头开始设计的,旨在以更直观的方式提供这种灵活性和效率,特别是对于复杂的数据检索场景。

    • 1
  2. Sepehr
    2023-11-08T05:04:59+08:002023-11-08T05:04:59+08:00

    您是正确的,可以通过在请求中包含查询参数来限制 REST API 返回的数据。然而,GraphQL 提供了许多优势,下面是一个用于获取用户姓名和电子邮件地址的 GraphQL 查询示例:

    query {   user(id: 1) {
    name
    email   } }
    

    以下是获取相同数据的 REST API 请求的示例:

    GET /users/1?fields=name,email
    

    正如您所看到的,GraphQL 查询更加简洁且更易于阅读。它也更加灵活,因为您可以轻松地向查询添加其他字段,而无需修改请求。

    我希望我已经正确回答了你的问题

    • 0
  3. Taha Ali
    2023-11-08T05:07:25+08:002023-11-08T05:07:25+08:00

    有一些关键的差异使得 GraphQL 在某些情况下更加灵活。让我用一个例子来解释一下:

    REST: 假设您想要从图书馆的 API 获取有关书籍的信息。在 REST API 中,您可能有如下端点:

    获取书名:GET /books/1/title 获取书的作者:GET /books/1/author 获取书的出版日期:GET /books/1/publication_date

    每个端点都对应于关于本书的一条特定信息。如果您需要所有这些信息,则需要向服务器发出三个单独的请求。这可能效率低下,尤其是当您需要更多或更少的数据或需要来自多个相关资源的数据时。

    图形语言:

    在 GraphQL 中,您向服务器发送一个查询,明确指定您想要的数据,然后您只返回该数据。它看起来是这样的:

    query {   book(id: 1) {
        title
        author
        publication_date   } }
    

    在这个单一查询中,您询问书名、作者和出版日期。然后,服务器在单个响应中使用所有请求的数据进行响应。

    • 0

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve