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

在现代应用开发中,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


猜你喜欢

  • Promise.all(), Promise.race(), Promise.allSettled() 之间的区别

    在前端开发中,我们经常会用到 Promise 对象来处理异步操作。而在 Promise 的使用中,有三个方法是比较常见且常用的,它们分别是 Promise.all()、Promise.race() 和...

    10 个月前
  • 如何使用 AR 技术改善无障碍性设计

    前言 对于普通用户来说,AR 技术可能只是一个好玩的玩具,但对于一些特殊人群,它却是一种解决无障碍性问题的有效手段。在本文中,我们将探讨如何使用 AR 技术改善无障碍性设计,以及如何使用 JavaSc...

    10 个月前
  • Sequelize 实践:使用 Ant Design 前端 UI 组件库构建界面

    前言 Sequelize 是一个基于 Node.js 的 ORM 框架,它支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 MSSQL 等。

    10 个月前
  • 解决使用 CSS Grid 布局时出现底部空白问题的方法

    问题描述 在使用 CSS Grid 布局时,经常会出现底部空白的问题。这个问题的原因是,CSS Grid 布局会自动为每一行添加一个空白的网格行,如果最后一行没有填满,那么就会出现底部空白的情况。

    10 个月前
  • Koa2 中使用 apm-agent 进行应用性能监控

    在现代 Web 应用中,性能监控是非常重要的一环。通过监控应用的性能,我们可以发现应用中存在的瓶颈,找出优化方案,提高应用的性能。在 Koa2 中,我们可以使用 apm-agent 进行应用性能监控。

    10 个月前
  • Fastify 框架和 Sequelize ORM 集成指南

    Fastify 是一个快速、低开销、可扩展的 Node.js Web 框架,而 Sequelize ORM 则是一个提供了强大的对象关系映射功能的库。这两个工具的结合可以为开发人员提供更加高效的开发体...

    10 个月前
  • 使用 Express.js 实现分布式任务调度

    在现代的分布式系统中,任务调度是一个非常重要的组成部分。通过任务调度,我们可以将一个大任务分割成多个小任务,然后分发到不同的计算节点上进行并行计算,从而提高计算效率。

    10 个月前
  • Custom Elements 的扩展性和架构设计指南

    前言 Custom Elements 是 Web Components 的一部分,它允许开发者创建自定义的 HTML 元素,并将其作为原生的 Web API 进行使用。

    10 个月前
  • 如何在 Jest 测试文件中解决 ESLint 报错问题

    在前端开发中,我们经常会使用 Jest 进行单元测试,同时也会使用 ESLint 进行代码检查。然而,在 Jest 测试文件中使用 ESLint 时,可能会出现一些报错问题。

    10 个月前
  • 性能优化:与 Java Optimizer 一起提升 Java 代码性能

    在前端开发中,性能优化是非常重要的一环。Java Optimizer 是一款非常优秀的工具,可以帮助我们提升 Java 代码的性能。在本文中,我们将会介绍 Java Optimizer 的使用方法,并...

    10 个月前
  • 使用 ES9 中新增的 Array.prototype.flatMap() 方法实现数组扁平化

    在前端开发中,经常需要处理多层嵌套的数组,进行数组扁平化是其中一个常见的操作。在 ES9 中,新增了 Array.prototype.flatMap() 方法,可以方便地实现数组扁平化。

    10 个月前
  • TypeScript 中的中间件模式

    中间件模式是一种常见的设计模式,它可以在不改变原始代码的情况下,通过添加额外的逻辑来扩展应用程序的功能。在前端开发中,中间件模式被广泛应用于处理请求、验证用户身份、记录日志等方面。

    10 个月前
  • RxJS 中的时间操作符:interval、timer 和 delay

    RxJS 是一个流式编程库,它提供了许多方便的操作符,可以帮助我们处理异步数据流。在 RxJS 中,有一些时间操作符可以帮助我们处理时间相关的任务,包括 interval、timer 和 delay。

    10 个月前
  • Mocha 测试框架初探:使用 Mockito 进行 Mock 测试

    在前端开发中,测试是非常重要的一环,可以保证代码的质量和稳定性。Mocha 是一个流行的 JavaScript 测试框架,它可以用于编写单元测试、集成测试和端到端测试。

    10 个月前
  • PM2 进程管理器:如何使用 pm2 describe 查看 Node.js 应用程序详情

    前言 在 Node.js 应用程序开发中,进程管理是一个非常重要的话题。PM2 是一个流行的进程管理器,它可以帮助我们管理 Node.js 应用程序的进程。在 PM2 中,我们可以使用 pm2 des...

    10 个月前
  • 如何在 ECMAScript 2019 中匹配 emoji 表情

    随着社交网络的流行,emoji 表情已经成为了人们表达情感的重要方式。在前端开发中,我们经常需要对输入的文本进行 emoji 表情的匹配和处理。在 ECMAScript 2019 中,我们可以使用新的...

    10 个月前
  • AngularJS 中 module 的依赖性声明与注入

    在 AngularJS 中,模块(module)是一个可以重用的代码块,它包含了组件、服务、指令等等。模块可以被其他模块依赖,这个依赖关系可以理解为一种依赖注入(dependency injectio...

    10 个月前
  • Cypress 测试如何模拟用户登录?

    在前端开发和测试中,模拟用户登录是一个常见的需求。Cypress 是一款流行的前端自动化测试工具,它提供了丰富的 API 和工具来模拟用户行为,包括模拟用户登录。本文将介绍如何使用 Cypress 测...

    10 个月前
  • Vue.js 中的 $emit 方法和 $on 方法及使用场景

    Vue.js 是一款流行的前端框架,它提供了丰富的功能来简化前端开发。其中,$emit 方法和 $on 方法是 Vue.js 中非常重要的两个方法,它们可以帮助我们实现组件之间的通信,提高应用程序的复...

    10 个月前
  • ECMAScript 2017:如何使用 ES6 模块和 ES7 的动态 import 特性

    介绍 ECMAScript 2017 是 JavaScript 的一个重要版本,它引入了许多新特性,其中包括 ES6 模块和 ES7 的动态 import 特性。这些新特性为前端开发提供了更好的开发体...

    10 个月前

相关推荐

    暂无文章