代码之家  ›  专栏  ›  技术社区  ›  SamwellTarly

如何将GraphQL用于企业应用程序

  •  0
  • SamwellTarly  · 技术社区  · 6 年前

    在我提问之前做一个简短的介绍:

    我目前正在计划开发一个企业应用程序,其中有许多服务,每个服务都有大量的业务逻辑。

    我最近被介绍到GraphQL,并被要求合并GraphQL

    • 坦白说,我不明白这有什么意义。好像是一个包裹 以整洁的JSON格式提供数据。对我来说没什么区别 正确的NoSQL查询。
    • 大量使用JavaScript的应用程序由于业务逻辑而不太安全 显示在客户端浏览器中,可以对其进行调整以更改 行为。GraphQL倾向于依赖这样的应用程序 终端直接与数据通信。其中,作为传统的NoSQL查询,可以在从客户机获取所需信息后从服务器上运行。

    问题:

    如果GraphQL直接从数据库获取数据并将其呈现,那么如何实现GraphQL来处理中间件任务、业务逻辑(如后端验证、复杂的业务检查、批处理流程等)? 如果不是,那么它只是数据库查询之上的声明性库吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   adrice727    4 年前

    如果GraphQL直接从数据库中获取数据并显示 后端验证、复杂业务检查、批处理等逻辑 过程等?

    GraphQL不直接从数据库获取数据。GraphQL实现是通过一个端点公开的,该端点与任何其他端点都没有区别,这意味着您可以使用您想要的任何中间件、身份验证堆栈、验证等。它的数据库也不可知。同样,你可以使用任何你想要的数据库,ORM等的组合。

    询问?

    不完全是。GraphQL实现有两个主要部分-模式和解析器。模式简单地定义了数据的形状,解析器完成了繁重的工作。解析器是定义如何获取和转换模式中定义的每个字段的数据的逻辑层。更多关于分解器如下。

    它与使用NoSQL数据库有何不同?

    query {
      user(userId: "some_user_id") {
        ...userData
        projects {
          ...projectData
          assets {
            ...assetData
          }
        }
      }
    }
    

    我们正在获取一个用户、该用户的项目以及每个项目的资产,我们可以精确地指定在每个级别需要哪些字段。一个用户可能有15个字段,但我们可能只需要其中的两个或三个。项目和资产也可能如此。由于GraphQL解析器是智能的,所以我们不必担心在任何给定查询中实际请求了哪些字段。只返回作为查询一部分请求的字段。如果一个字段是通过一个异步函数解析的,那么只有在请求该字段时才会执行该函数。

    最后,客户机返回与查询形状匹配的JSON,但是(我希望)我们永远不会在NoSQL数据库中存储这样的嵌套数据。还有一些工具,如 dataloader 这使得通过批处理和缓存优化查询更加容易。

    GraphQL倾向于依赖这样的应用程序,其中前端 直接与数据通信。

    从上面可以看出,情况并非如此。