Serverless GraphQL 的实现和使用优化

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

Serverless 架构以及 GraphQL 的兴起,为前端开发带来了全新的发展机遇。Serverless 架构通过将应用程序的部署和运行都交给第三方云服务提供商,大幅简化了前端工程师的部署工作;而 GraphQL 则可以帮助前端开发者在网络传输中减少冗余、提升性能以及灵活性。将二者结合起来,可以帮助前端应用极大地提升可扩展性和用户体验。本文将介绍 Serverless GraphQL 的实现和使用优化,并提供示例代码。

什么是 Serverless GraphQL

Serverless 架构是指将应用程序的构建、部署和扩展等工作都交给云服务提供商,从而大幅简化开发者的工作流程。在 Serverless 架构中,开发者只需上传代码,并指定一些触发器(比如 HTTP 请求、定时器、数据库事件等),云服务提供商会自动为开发者维护基础设施,并按照触发器的规则运行代码。因为无需自行购买和维护服务器,开发者能够专注于业务逻辑的实现,从而提升生产效率。

与此相对,传统的服务器架构存在诸多局限性,比如需要耗费大量时间和经费来购买和维护服务器,同时还需要开发者自行处理服务器的扩展、维护和缩容等工作。因此,Serverless 架构成为了前端开发者的首选。

GraphQL 是一种由 Facebook 推出的 API 查询语言和运行时。GraphQL 与 RESTful API 不同,它允许开发者在一个请求中定义需要的数据,从而减少网络传输中冗余数据的传输。GraphQL 的数据模型之间的组合也更为灵活,能够高效并发地处理多个请求,并且允许将多个数据源整合在一起。因此,GraphQL 成为了前端开发者的另一种首选。

Serverless GraphQL 将两者结合起来,能够进一步提升前端应用的性能,并提供更灵活的查询和数据模型处理方式。

实现 Serverless GraphQL

要实现 Serverless GraphQL,需要用到以下工具和技术:

  • AWS Lambda,用于运行 GraphQL 服务器;
  • AWS API Gateway,用于管理和部署 GraphQL 服务器的 HTTP 端点;
  • Apollo Server Lambda,用于创建和运行 GraphQL 服务器;
  • AWS DynamoDB,用于存储和查询数据。

下面,我们将详细介绍实现 Serverless GraphQL 的步骤。

创建 AWS Lambda 函数

首先,我们要创建一个 AWS Lambda 函数,用于运行 GraphQL 服务器的代码。在 AWS Lambda 控制台中,点击“创建函数”,然后选择“从头开始创建”。

在“基本信息”页面中,输入函数名称、描述和运行时。我们选择 Node.js 14.x 作为运行时,并创建了一个名为“graphql-server”的 Lambda 函数。

在“函数代码”页面中,选择“上传 ZIP 文件”,并上传包含 GraphQL 服务器代码的 zip 文件。接下来,我们需要为 Lambda 函数配置执行角色、VPC、环境变量等设置。

创建 AWS API Gateway API

下一步,我们需要创建一个 AWS API Gateway API,用于管理和部署 GraphQL 服务器的 HTTP 端点。在 AWS API Gateway 控制台中,选择“REST API”,然后选择“新建 API”。

在“新建 API”页面中,输入 API 名称、描述和协议。我们选择 REST 协议,并创建了一个名为“graphql-server-api”的 API。

创建 API 后,在“资源”->“任意资源”下创建一个新资源并添加方法。选择“任意”作为资源路径,并选择“POST”作为方法。然后,将此方法关联到新创建的 Lambda 函数,并设置 Lambda 函数的输入和输出格式。最后,在“方法执行”页签中,勾选“使用 Lambda 代理集成”选项,并保存 API 配置。

到此,我们已经完成了 Serverless GraphQL 的基本构建。我们还需要运行 GraphQL 服务器并连接到数据源。

运行 GraphQL 服务器

要运行 GraphQL 服务器,我们可以使用 Apollo Server Lambda。首先,需要安装它:

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

然后,在 Lambda 函数的入口文件中添加以下代码:

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

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

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

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

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

以上代码中,我们首先定义了 GraphQL schema,然后使用 Apollo Server Lambda 创建了一个 GraphQL 服务器实例,并导出了 Lambda 处理程序。

当您运行 Serverless GraphQL API 时,基于 AWS Lambda 的 GraphQL 服务器将被运行。通过使用 Apollo Server Lambda,我们可以在足够灵活的环境下拓展 Query、Mutation 和 Subscription 类型。

与 AWS DynamoDB 集成

要与 AWS DynamoDB 集成,可以使用 AWS SDK for Node.js。首先,需要安装它:

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

然后,我们需要在 Lambda 函数中添加以下代码:

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

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

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

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

以上代码中,我们首先引用了 AWS SDK for Node.js 中的 AWS DynamoDB 客户端。随后,我们定义了一个新的 resolver,用于调用 AWS DynamoDB 来获取数据。最后,我们需要在数据库中创建“itemsTable”表,并在 Lambda 函数的环境变量中配置 AWS 访问密钥和密钥 ID。

使用优化

在实现 Serverless GraphQL 后,我们需要考虑使用优化。以下是一些有用的优化技巧。

使用 AWS Serverless Architecture 自动扩缩容

AWS Serverless Architecture 使用了自动扩缩容功能来对您的 GraphQL API 进行便捷、自动管理。这使得您无需考虑服务器的扩展或缩减。

调整 AWS Lambda 函数配置

调整 AWS Lambda 函数的内存大小和请求天花板可以使 GraphQL API 在负载中呈现出更大的性能优势。您可以使用 AWS Lambda 上定义的按需内存模式,这样,您无需在管道中保持闲置服务器。

启用缓存

在 GraphQL 应用中使用现有的缓存技术(如 Redis 或 Memcached)以及 GraphQL 应用自带的查询缓存,能大大减少将信息传递给服务器的请求量。

结论

本文介绍了如何实现和使用 Serverless GraphQL,以及一些使用优化。Serverless 架构通过将应用程序的构建、部署和扩展等工作都交给第三方云服务提供商,大幅减少了前端工程师的部署工作;而 GraphQL 则可以帮助前端开发者在网络传输中减少冗余、提升性能以及灵活性。将二者结合起来,可以帮助前端应用极大地提升可扩展性和用户体验。本文还提供了示例代码,以帮助您更好地使用 Serverless GraphQL。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/672343292e7021665e0f2153


猜你喜欢

  • 如何使用 Jest 测试 Node.js 应用

    简介 在开发 Node.js 应用过程中,测试是非常重要的环节。它可以帮助我们在开发的过程中快速发现并解决问题,保证最终代码的质量。Jest 是一个流行的测试框架,它可以帮助我们轻松快速地编写自动化测...

    10 天前
  • kubectl 命令行工具教程

    kubectl 是一个命令行工具,用于与 Kubernetes 集群进行交互。它可以帮助您创建、部署和管理 Kubernetes 资源。在这篇文章中,我们将学习如何使用 kubectl 命令行工具。

    10 天前
  • PWA 应用如何处理 vibrate 导致的页面错误

    在 PWA 应用中,使用浏览器的振动 API (Vibration API)是一种常见的交互方式,可以提供更好的用户体验。但是,在某些情况下,使用该 API 可能会导致页面错误,例如在页面尚未加载完毕...

    10 天前
  • ES10 新特性之:你了解 Array.prototype.sort() 排序的冷门特性吗?

    前言 JavaScript 是一门动态语言,拥有着丰富的内建对象和方法,其中的 Array.prototype.sort() 方法在前端编程中使用场景颇多。然而,你是否听说过它的冷门特性呢?在这篇文章...

    10 天前
  • 如何使用 Chai.js 和 Mocha.js 对 Vue.js 应用程序进行单元测试

    前言 随着 Vue.js 开发使用的逐渐普及,对于 Vue.js 应用程序进行单元测试变得越来越重要。单元测试可以提高应用程序的可靠性、稳定性和可维护性。为了进行单元测试,你需要使用一些测试框架和库。

    10 天前
  • Material Design 的 4 个跨平台开发框架

    Material Design 是由 Google 推荐的一种设计风格,旨在提供一种有鲜明特色的可复用 UI 组件库,使得产品的界面设计能够统一起来,也便于用户的操作和体验。

    10 天前
  • Vue.js 3.x 中的特殊组件调用方法

    Vue.js 3.x 是目前最受欢迎的前端框架之一,其具有简单易用、轻量级、灵活性强等众多优点。在实际开发中,我们常常需要使用一些特殊的组件调用方法,以便更好地实现我们的业务逻辑。

    10 天前
  • 如何使用 Enzyme 测试 React Native 应用中的导航组件?

    React Native 是一种流行的移动应用程序开发框架,它可以帮助开发者快速构建高效的跨平台原生应用程序。React Native 应用程序中的导航组件,可以让应用程序拥有更好的用户界面和用户体验...

    10 天前
  • 如何高效地测试 RESTful API 接口?

    RESTful API 接口是前端开发中常见的一种后台数据接口,并且随着 Web 技术的不断发展,越来越多的应用程序开始采用 RESTful API 接口进行数据传输。

    10 天前
  • ECMAScript 中的函数性能优化方法

    前言 在 JavaScript 开发中,函数是非常常见的数据类型,并且扮演着非常重要的角色。优化函数的性能,有助于减少程序的开销,提高执行效率,使得应用运行更加顺畅。

    10 天前
  • 使用 Tailwind 优化 Laravel 应用

    在现代 Web 开发中,前端的实现越来越重要,因为用户越来越注重网站的外观和体验。然而,开发人员经常陷入两个相对矛盾的目标之间:快速构建前端并保持代码干净可读。在这种情况下,Tailwind 可以提供...

    10 天前
  • ES11 (2020) 中的 Promise.allSettled:如何更好地处理异步任务?

    ES11 (2020) 中的 Promise.allSettled:如何更好地处理异步任务? 随着 Web 技术的不断发展,前端开发越来越复杂,异步编程也越来越重要。

    10 天前
  • ES6 箭头函数中的 this 指针问题及解决方式

    在 JavaScript 的开发中,this 这个关键字一直都是一个比较棘手的问题。尤其是在 ES5 的时候,大家都需要使用函数的方法来绕过它。不过,ES6 中出现的箭头函数,让我们能够更加简单地理解...

    10 天前
  • 如何在 Phoenix LiveView 应用程序中使用 Headless CMS?

    在现代 Web 开发中,使用 Headless CMS 是大势所趋。Headless CMS 可以将您的内容独立于前端呈现,并有助于提高开发效率。在本文中,我们将讨论如何在 Phoenix LiveV...

    10 天前
  • Kubernetes 中高可用性部署方法

    Kubernetes 是一种流行的开源容器编排工具,可以帮助开发人员轻松地管理多个容器化的应用程序。但是,如果您要在 Kubernetes 中实现高可用性部署,则需要做一些额外的工作。

    10 天前
  • 如何处理 PWA 应用在安卓上 icon 期限过后无法更改的问题

    如何解决 PWA 应用在安卓上 icon 期限过后无法更改的问题? 在实际工作中,前端开发人员经常会遇到 PWA 应用在安卓上 icon 期限过后无法更改的问题。这个问题可能会直接导致 PWA 应用无...

    10 天前
  • Cypress 跨站点测试的实现方法与技巧

    简介 Cypress 是一个现代化的前端端对端测试框架。这个 JavaScript 工具被广泛使用,因为它易于使用、可靠性高、并且可以加快开发速度。本文将深入探讨 Cypress 在跨站点测试方面的实...

    10 天前
  • 使用 Node.js 和 Express.js 构建 Web 应用程序

    Node.js 和 Express.js 是构建现代 Web 应用程序的重要技术。他们提供了扩展性、可靠性、速度等优势,并拥有强大的生态系统。在本文中,我们将探讨如何使用 Node.js 和 Expr...

    10 天前
  • 灵活应对 CSS Grid 中的缩放问题

    CSS Grid 是一个非常强大的布局系统,可以让开发者轻松地创建灵活的网格布局。然而,当涉及到缩放问题时,Grid 可能会变得有些棘手。本文旨在介绍 CSS Grid 中的缩放问题,并提供一些实用的...

    10 天前
  • Mongoose 中使用 $size 操作符查找长度为指定值的数组

    当我们处理数据时,经常需要操作数组类型的字段。比如说,在 MongoDB 中,我们使用 Mongoose 库来操作数据,数组类型的字段可以使用 $elemMatch 操作符来查找,但是有时候我们需要查...

    10 天前

相关推荐

    暂无文章