初学 GraphQL,快速上手使用

GraphQL 是一种用于 API 的查询语言,前端开发人员可以使用它来获取特定数据。使用 GraphQL,开发人员可以减少 API 请求的数量,并避免过多的网络延迟,提高应用的性能。本文将详细介绍初学 GraphQL 的操作,帮助你快速上手使用。

GraphQL 的优势

在使用基于 REST 的 API 时,当需要获取特定数据时,通常需要向多个端点发送多个请求,这将导致网络负担增大,延迟等问题也会相应增加。使用 GraphQL 可以将这些请求转变为单个查询,并且可以快速筛选和获取需要的数据。GraphQL 的优点主要体现在以下几个方面:

  • 精确控制数据的获取:GraphQL 可以精确控制需要获取的数据,避免了传统 API 中过多或不足的数据获取,减少了网络负载并提高了性能;
  • 可以使用类型系统:GraphQL 可以使用类型系统,开发人员可以明确知道数据对象的结构,而不必解释 JSON 数据;
  • 语言无关性:GraphQL 可以使用任何语言实现,包括 JavaScript、Java、Python 和 C# 等多种语言。

除此之外,GraphQL 还有很多其他的优势,例如:

  • 支持多平台开发;
  • 可以支持实时数据更新;
  • 支持自定义指令等。

GraphQL 的基本语法

GraphQL 最基本的结构是一个“查询”,我们可以通过实现 GraphQL API 来定义和执行查询。GraphQL 查询包括以下几个部分:

-- -
  ---
  ---
-

其中,查询是运行查询的名称,查询中的字段1字段2是表示需要获取的数据。例如,获取某个 User 的名字、年龄和 email 等属性的查询语句可以如下所示:

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

在 GraphQL 中,查询是可以嵌套的,例如,获取某个 User 的名字、年龄和 email 属性以及它们的父列表项的情况可以如下所示:

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

GraphQL API 的实现

下面,我们将通过一个简单的示例来介绍如何实现 GraphQL API。

1. 安装包

在 Node.js 中,我们可以使用 Express 来实现 GraphQL API。我们需要安装以下核心包:

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

2. 实现 schema

我们使用 GraphQL schema 来定义 API 的数据。Schema 可以被认为是 API 的合同,它指定了客户端可以使用的查询字段,并指定了每个查询字段可以返回的数据。

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

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

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

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

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

以上代码中,UserType 定义了一个 User 类型,userusers 是查询。其中,user 接受一个 id 参数,通过 resolve 函数返回与指定 id 匹配的用户。而 users 查询返回所有的用户。

3. 创建 Express 中间件

我们将使用 Express 提供 GraphQL API 的查询服务。以下是如何配置应用程序:

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

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

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

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

在上面的代码中,我们引用了 expressexpress-graphql 包,创建了一个 Express 实例,然后添加了一个路由到 /graphql 上,将 schemagraphiql: true 传递给 GraphQL 中间件。其中 graphiql: true 参数表示我们希望使用 GraphiQL,这将是一个可交互的控制台,可用于在浏览器中测试 API。

最后,我们调用了 listen 方法来表示应用程序将在 4000 端口上启动。

4. 测试 GraphQL API

如果一切正常,打开浏览器并访问 http://localhost:4000/graphql,你将会看到 GraphiQL 工具。在控制台的左边编辑器中输入查询语句:

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

在右边的控制台中,GraphQL API 将返回匹配的数据:

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

结论

本文介绍了 GraphQL 的优势以及 GraphQL 的基础语法和 API 的实现。使用 GraphQL,你可以轻松地从 API 中获取所需的数据,并可通过类型系统进行精确控制。在使用 GraphQL 时,你需要创建 schema,并在 JavaScript 环境中实现 GraphQL API。如果你想了解更多信息,请参阅官方文档:https://graphql.org/

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


猜你喜欢

  • PWA 应用中缓存机制的具体实现方式

    随着移动设备的使用越来越普及,PWA(Progressive Web App)成为了一个热门的话题。PWA 应用的一个重要特性就是离线缓存,它可以帮助应用在离线状态下保持功能和数据的准确性。

    10 天前
  • 解决 Django REST framework 在单元测试中无法获取 URLs 的问题

    Django REST framework是一个非常流行的Web应用程序开发框架。在开发过程中,我们通常会使用Django REST framework来构建RESTful API。

    10 天前
  • 使用 Jest 进行 React Native 应用的单元测试

    React Native 是一个流行的跨平台移动开发框架,它让开发者能够使用 JavaScript 来开发 iOS 和 Android 应用程序。 单元测试是确定一个组件或函数是否正常工作的重要步骤。

    10 天前
  • ES7 中的 Object.getOwnPropertyDescriptors 方法简化对象操作

    在前端开发中,我们经常需要对 JavaScript 对象进行操作,比如在修改对象属性时需要考虑许多细节。ES7 中的 Object.getOwnPropertyDescriptors 方法提供了一种简...

    10 天前
  • Redux 如何初学者学好

    Redux 是一个前端领域非常流行的数据管理库,它可以让我们更好地管理前端应用的状态,并且使得我们的代码更加易于维护。Redux 可以与各种框架(如 React、Angular 和 Vue)一起使用,...

    10 天前
  • 解决 Angular 应用中使用第三方库遇到的问题

    问题描述 在 Angular 应用中,我们常常需要使用一些开源的第三方库来帮助我们完成一些任务,例如数据可视化、动画效果和网络请求等。但是,在使用这些第三方库时,我们可能会遇到一些问题,比如: 第三...

    10 天前
  • 基于 Enzyme 的 React Native 测试解决方案

    在 React Native 的开发过程中, 测试是不可或缺的一部分。通过测试可以确认组件和应用的行为是否达到预期的目标,并且可以快速发现和修复问题。Enzyme 是一个针对 React 应用的 Ja...

    10 天前
  • Tailwind CSS 实现工欲善其事必先利其器的款式

    随着前端技术的不断发展,捷径和框架是我们工作中的好帮手。在前端开发中,为了让样式更加美观和易于管理,我们通常倾向于使用 CSS 框架简化开发。而 Tailwind CSS 正是一个值得推荐的 CSS ...

    10 天前
  • Mongoose 禁止不在 Schema 中定义的字段的保存

    在 Node.js 的后端环境中,Mongoose 是一个常用的 MongoDB ODM 库。在使用 Mongoose 时,常常会定义一个 Schema 来描述文档的结构,然后在模型中使用这个 Sch...

    10 天前
  • 常见 Headless CMS 错误代码列表及解决方案大全

    Headless CMS 是现代 web 应用开发中的重要技术之一,它可以将内容与样式和功能分离,提高 web 应用的开发效率和灵活性。但是,在使用 Headless CMS 过程中,开发者经常会遇到...

    10 天前
  • 使用 TypeScript 开发 Electron 应用程序的技巧

    随着 Web 技术的不断发展,越来越多的应用程序开始采用 Electron 来开发桌面客户端。而 TypeScript 作为 JavaScript 的超集,提供了更为丰富的类型检查和面向对象的编程能力...

    10 天前
  • 解决 Android Material Design 应用程序的可访问性问题

    随着移动设备的普及,许多应用程序都采用了 Material Design 风格的界面设计。但是,这种风格在可访问性上存在一些问题,例如,无法正确阅读屏幕阻隔和色弱度等。

    10 天前
  • Kubernetes 中如何进行应用的持久化存储

    Kubernetes 是一款开源的容器编排引擎,提供了在云环境中部署、扩展和管理容器化应用程序的机制。在 Kubernetes 中,应用程序的持久化存储是非常重要的一环,因为它们需要在整个应用程序的生...

    10 天前
  • 利用 Serverless 实现微服务数据整合

    前言 随着互联网的发展,单一应用程序已经不能满足业务需求。为了实现不同系统之间的互相调用和数据交换,微服务架构应运而生。相比于单体式应用,微服务架构更加灵活和可伸缩,并且具备更好的拆分和统一管理能力。

    10 天前
  • Docker 容器中如何开启 MongoDB 的认证功能

    随着互联网技术和应用的不断发展,数据存储和管理需求也越来越重要。MongoDB 是一种非关系型数据库,它以 JSON 格式存储数据并提供高性能、高可用性的数据存储和管理服务。

    10 天前
  • RxJS 中操作符 switchMap、exhaustMap 与 concatMap 的区别

    前言 在 RxJS 中,操作符是非常重要的一部分。操作符被用来修改、扩展和转换 Observable 流。在这篇文章中,我们将重点关注三个常用的操作符:switchMap、exhaustMap 和 c...

    10 天前
  • 解决 ES7 中的 Object.entries 方法在 IE 浏览器中不支持的问题

    随着前端技术的不断发展,ES7 中的许多新方法都已经得到了广泛的支持,如 Object.entries 方法。但是,在老旧的 IE 浏览器中,这些方法可能无法正常工作。

    10 天前
  • Promise 中 then 方法内部返回 Promise 的使用技巧

    Promise 中 then 方法内部返回 Promise 的使用技巧 Promise 是 JavaScript 中常用的异步编程解决方案,它的链式调用非常方便,但我们需要注意的是,在 then 方法...

    10 天前
  • Hapi.js 插件的一个例子:好用的 "Blankie"

    在 Hapi.js 中,我们可以通过使用插件来扩展其功能。这里介绍的 "Blankie" 插件是一个安全相关的插件,可以帮助我们自动添加某些 HTTP 标头以加强安全性。

    10 天前
  • 使用 Fastify 构建 GraphQL API 的完整教程

    GraphQL 是一种由 Facebook 发明的数据查询语言,它可以让客户端定义需要返回哪些数据,并且不会浪费带宽和服务器资源。Fastify 是一个低开销且高度效率的 Node.js web 框架...

    10 天前

相关推荐

    暂无文章