【问题标题】:REST vs Database as GraphQL API data source?REST 与数据库作为 GraphQL API 数据源?
【发布时间】:2019-02-02 13:53:08
【问题描述】:

我们正在开始一个新的全栈项目。已经决定我们将使用 React 作为前端,它应该使用 GraphQL API。

我们正在考虑开发此 API 的两种方案:

  • 第一个是使用 Apollo 构建使用 REST API 作为数据源的 GraphQL API。

  • 第二个是构建一个使用数据库作为数据源的 GraphQL API,跳过 REST API。

每种方案的优缺点是什么?一个比另一个好?

【问题讨论】:

  • 嘿,如果您想先讨论这个问题,请在 gitter.im @aaayushsingh 上找到我,如果您满意,也许我可以在这里写一个答案。我用 graphql 完成了多个项目。我觉得讨论可以更好地回答你。

标签: api orm graphql apollo


【解决方案1】:

使用 REST 为您的 GraphQL 供电就像使用 ? 为您的 Tesla 供电一样。简直傻!!使用数据库,但只选择 GraphQL 查询询问的字段和记录,而不是“选择 *”。如果您需要速度,请使用 Redis 缓存。

【讨论】:

    【解决方案2】:

    基于我们对 gitter 的讨论,

    由于您是从头开始构建平台,因此您无需在 REST API 上构建 GraphQL 层。这将是双重工作,并且不需要。我建议您设置Apollo-Server,它将直接与您的数据库交互。

    你说你可能需要使用一些遗留 API,我推荐微服务可以轻松使用 graphql。

    关于 PRISMA,它并没有给您太多的灵活性。它还不允许对字段进行符合 ACID 的更新,例如递增或递减值。 github 上的This issue 可用于跟踪此功能的更新。

    PRISMA 有助于快速设置,但我(个人意见)觉得它不够灵活。

    您的最后一个问题是如何在没有 REST API 的情况下查询数据库,我建议直接从您的服务器查询。

    GraphQL 是客户端,Apollo 将帮助您扩展它并提供更多功能。除了不需要为每个请求定义单独的端点这一事实之外,您不需要做与创建 REST API 时所做的完全不同的事情。除了您只返回/查询您需要的数据并且这可以动态完成之外,数据库交互几乎保持不变。来自graphql website

    向您的 API 发送 GraphQL 查询,并准确获取您需要的信息,不多也不少。 GraphQL 查询总是返回可预测的结果。使用 GraphQL 的应用既快速又稳定,因为它们控制的是获取的数据,而不是服务器。

    其他提及:AWS Appsync

    【讨论】:

      【解决方案3】:

      第二种情况最好

      第二个是构建一个使用数据库作为数据的 GraphQL API 跳过 REST API 的源代码。

      REST 和 GraphQL 都可以通过 HTTP 进行操作,尽管 GraphQL 与协议无关。 而 GraphQL 是这个领域的新手,它有很多很酷的特性,它解决了 REST 面临的大部分问题,例如:

      1.) 获取数据的多个端点

      In rest we have create multiple API endpoints
      

      2.) 过度/不足获取

      Some time API return extra data that we don't need or less data in response
      

      3.) 网络请求

      multiple endpoint leads to more network requests 
      

      4.) 错误处理

      REST 中的错误处理非常简单,我们只需检查 HTTP 标头即可获取响应的状态。根据我们得到的 HTTP 状态码(404、503、500 等),我们可以很容易地判断错误是什么以及如何解决它。另一方面,GraphQL 在通过 HTTP 操作时,我们总是会得到 200 OK 响应状态。当处理 GraphQL 查询时发生错误时,完整的错误消息会与响应一起发送到客户端

      5.) 版本控制

      通常在使用第三方 REST API 时,我们会看到 v1、v2、v3 等内容,它们只是指示我们正在使用的 REST API 的版本。这会导致代码冗余和可维护性较差的代码。使用 GraphQL,无需版本控制,因为我们可以轻松地向 GraphQL API 添加新字段和类型,而不会影响现有查询。此外,我们可以轻松地将字段标记为已弃用,并且这些字段将从服务器获取的响应中排除

      详细对比请访问 GraphQl vs Rest

      or this post

      Or Official GraphQL site

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-11
        • 2019-06-28
        • 1970-01-01
        • 2017-01-01
        相关资源
        最近更新 更多