用 PostgreSQL 和 Hasura 构建现代应用:基于 GraphQL

阅读时长 8 分钟读完

在现代应用开发中,API 是一个不可或缺的部分。传统的 RESTful API 尽管已经成为了业界 common sense,但其需要开发者自己维护路由、逻辑复杂度高等问题挑战。为了解决这些问题,Facebook 推出了 GraphQL。GraphQL 是一个强类型、灵活、高效的 API 查询语言。同时,一些新兴的 GraphQL 工具使得我们可以更加高效地开发、部署 GraphQL API。在这篇文章中,我们会介绍如何使用 PostgreSQL 和 Hasura 构建一个现代的应用,以及如何使用 GraphQL 让前后端的交互更加高效。

为什么要选择 PostgreSQL 和 Hasura

PostgreSQL 是一个强大的关系型数据库,拥有着非常强大的功能和极高的可扩展性。Hasura 是一个构建在 PostgreSQL 之上的 GraphQL 引擎,它将数据库中的表结构转化为 GraphQL schema,并自动生成对应的 GraphQL API,使得我们可以直接使用 GraphQL 查询和操作数据库,非常的方便和高效。

使用 PostgreSQL 和 Hasura 的好处在于:

  1. 非常高效:使用 GraphQL 查询语言,可以极大减少网络传输和数据库查询的次数,使得数据的处理速度更快。
  2. 极大的灵活性:GraphQL 提供了非常灵活的查询和操作方式,可以满足不同需求的 API 情景。
  3. 降低开发难度和成本:使用 Hasura 可以快速生成 GraphQL API 服务器,并且可以直接集成在现有的 PostgresQL 数据库中,降低了开发的复杂度和时间成本。
  4. 安全、可靠:Hasura 通过使用 PostgresQL 的权限系统来保证数据访问的安全性和可靠性。

如何使用 PostgreSQL 和 Hasura

安装和配置 PostgreSQL

为了使用 PostgreSQL,我们首先需要安装并配置它,可以从官方网站下载安装文件并安装。安装完成后,我们需要创建一个数据库并在其中创建对应的表结构,可以使用 PostgreSQL 的命令行工具,也可以使用各种管理工具如 pgAdmin、DBeaver 等。

安装和配置 Hasura

安装和配置 Hasura 也相当简单,可以直接通过 Docker 运行 Hasura GraphQL Engine,也可以将其部署在云服务器上。运行 Hasura 镜像之前,需要设置相应的环境变量来链接数据库,具体可以参考文档。

定义 Schema

在 Hasura 中,我们需要手动定义 GraphQL schema,来指定哪些数据库表可以暴露出来,并通过 GraphQL API 进行查询和操作。定义 schema 的方式非常简单,只需要在 Hasura 的管理界面中选择需要暴露的表,并设置相关的查询和操作方式即可。

在 schema 定义之后,我们将拥有一个自动生成的 GraphQL API,同时也可以根据需要修改定义的 schema。这样就可以非常方便地进行数据库的操作,而无需手动编写复杂的 SQL 语句了。

编写应用

有了自动生成的 GraphQL API,我们就可以开始编写应用了。在前端应用中,可以使用各种现代的 JavaScript 框架和库,如 React、Vue、Angular 等等,来进行数据的查询和操作。

在后端应用中,可以使用各种 GraphQL 工具和库,如 Apollo Server、graphql-yoga 等来构建 GraphQL API 服务器。同时,在使用 Hasura 的情况下,我们还可以直接把自动生成的 GraphQL API 集成在后端中,不需要编写复杂的逻辑代码,只需要调用相应的 API 即可。

示例代码

下面是一个简单的示例代码,展示了如何在 React 应用中使用 GraphQL 操作 PostgresQL 数据库。这里我们使用的是 React Hooks 和 Apollo Client:

-- -------------------- ---- -------
----- --------- - ----
  ----- -------- -
    ----- -
      --
      ----
      -----
      -----
    -
  -
--

----- -------- - ----
  -------- -------------- -------- ------- -------- ------- -------- -
    ------------------------ - ----- ------ ------ ------- ------ ------ -- -
      --
      ----
      -----
      -----
    -
  -
--

-------- ----- -
  ----- ------- --------- - -------------

  ----- - -------- ------ ---- - - --------------------

  ----- --------- - --------------------- -
    ------------- - ----- - ----------------- ------- - -- -
      --------------
        ------- -
          ------------------- - --- -
            ----- ----------- - ---------------------
              ----- --------
              --------- ----
                -------- ------- -- ----- -
                  --
                -
              --
            ---
            ------ ------------------ -------------
          --
        --
      ---
    --
  ---

  -------- ------------------- -
    -----------------------
    ----- ---- - -------------
    ---------
      ---------- -
        ----- -------------------------
        ------ --------------------------
        ------ --------------------------
      --
    ---
    -------------
  -

  ------------ -- -
    -- ----- -- ----------- -
      ---------------------
    -
  -- --------- -------

  -- --------- -
    ------ ------------------
  -

  -- ------- -
    ------ -------- -------
  -

  ------ -
    --
      --------------
      ----
        ----------------- -- -
          --- --------------
            ------ -------------
            -------- ---------------
            --------- ----------------
            --------- ----------------
          -----
        ---
      -----
      ----- ------------------------
        ------- ---------
        ------ ----------------------------
        ------ ----------- --------- ----------- -------- --
        --- --
        ------ ------------------------------
        ------ ------------ ---------- ------------ -------- --
        --- --
        ------ ------------------------------
        ------ ----------- ---------- ------------ -------- --
        --- --
        ------- ----------------- -------------
      -------
    ---
  --
-
展开代码

总结

在这篇文章中,我们介绍了使用 PostgreSQL 和 Hasura 构建现代应用的过程。使用 GraphQL API 不仅提高了开发效率和数据处理的能力,同时也保障了数据的安全性和可靠性。我们还提供了一个简单的示例代码来展示如何在 React 应用中使用 GraphQL 操作 PostgresQL 数据库。

总之,使用 PostgreSQL 和 Hasura 构建应用可以带来更好的开发体验、更高的效率、更好的数据安全性和可靠性,是一个现代化的选择。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/658fff10eb4cecbf2d588c48

纠错
反馈

纠错反馈