点击蓝字
关注我们
始于理论,源于实践,终于实战
老付话安全,每天一点点
激情永无限,进步看得见
严正声明
本号所写文章方法和工具只用于学习和交流,严禁使用文章所述内容中的方法未经许可的情况下对生产系统进行方法验证实施,发生一切问题由相关个人承担法律责任,其与本号无关。
特此声明!!!
什么是 GraphQL
GraphQL 是一种 API 查询语言,促进客户端和服务器之间的高效通信。它使用户能够准确指定他们想要在响应中使用的数据,服务器则返回一个精确匹配的JSON响应。从而有助于避免使用 REST API 看到的大型响应对象和多个调用。
GraphQL的服务定义了一个合同,这个合同被称为模式(schema),模式定义了客户端可以请求的数据类型和字段,以及如何获取这些数据。客户端不需要知道数据的具体存储位置,只需要知道如何通过GraphQL查询语言来请求数据。然后,GraphQL服务器负责从相关位置获取数据,并将其返回给客户端。
GraphQL 的工作原理
GraphQL架构定义服务数据的结构,列出可用对象(称为类型)、字段和关系。这种架构定义被称为“模式”(Schema),模式定义了客户端可以请求的数据类型和字段,以及如何获取这些数据。
类型
在GraphQL中,类型是数据的基本构建块。它们定义了数据的结构和属性。例如,一个名为“Book”的类型可能包括“title”、“author”和“publishedDate”等字段。
字段
字段是类型中的具体属性。它们可以是基本类型(如字符串、数字、布尔值等),也可以是复杂类型(如其他对象、列表等)。字段还可以包括参数,这些参数可以用来修改或过滤返回的数据。
关系
在GraphQL中,关系通常通过字段来表示。例如,一个“Book”类型可能有一个指向“Author”类型的“author”字段,这表示一本书与其作者之间的关系。这些关系可以是单向的,也可以是双向的。
模式
模式是所有类型、字段和关系的集合。它定义了客户端可以请求的数据结构和属性。模式还定义了如何解析这些数据,即如何从底层数据源中获取数据并将其转换为客户端请求的格式。
GraphQL 架构三种类型的数据操作:查询获取数据、更改添加删除、订阅。
在GraphQL中,所有的操作(无论是查询还是更改)都使用相同的终端节点,并且通常作为POST请求发送。这与REST API的做法形成了鲜明的对比,REST API使用一系列特定于操作的端点,并且在这些端点上使用各种HTTP方法(如GET、POST、PUT、DELETE等)来执行不同的操作。
对于同一个终端节点,根据操作的类型和名称,服务器可以执行不同的操作。因为它允许客户端在一个请求中获取或修改多个资源,而不需要为每个操作创建一个新的端点。
GraphQL 架构
在GraphQL中,架构(Schema)是服务的前端和后端之间的协定。它使用一种人类可读的架构定义语言(SDL)来定义可用数据的结构。这种结构被定义为一系列类型,这些类型可以是对象类型、标量、枚举、联合、接口或自定义类型。对象类型是最常见的类型,它们定义了可用的对象以及它们具有的字段和参数。每个字段都有自己的类型,可以是另一个对象,也可以是标量、枚举、联合、接口或自定义类型。这些类型和字段定义了客户端可以请求的数据结构和属性。
GraphQL 查询
GraphQL 查询从数据存储中检索数据。它们大致相当于 REST API 中的 GET 请求。
-
查询语言:GraphQL查询使用一种专门设计的语言,这种语言允许你指定你想要的数据的结构。你可以指定你想要的对象,以及这些对象的哪些字段。
-
字段和参数:在GraphQL查询中,你可以指定你想要的对象的哪些字段。你还可以为这些字段指定参数,以进一步细化你想要的数据。
-
嵌套查询:GraphQL查询允许你嵌套查询,这意味着你可以在一个查询中获取相关的多个对象的数据。这对于获取复杂的数据结构非常有用。
-
变量:你可以在GraphQL查询中使用变量,以便在运行时动态地指定你想要的数据。这使得你的查询更加灵活和可重用。
-
片段:片段是GraphQL查询的一部分,它可以被复用。这有助于减少代码的重复,提高代码的可维护性。
-
操作名称:每个GraphQL查询都有一个操作名称,这是一个标识符,用于标识这个查询。这对于调试和监控非常有用。
-
响应格式:GraphQL查询的结果总是以特定的格式返回,这个格式与你查询的数据的结构完全匹配。这使得处理查询结果变得更加容易和直观。
GraphQL mutations
GraphQL mutations 是一种用于修改服务器端数据的操作。与查询(queries)主要用于获取数据不同,mutations 用于执行创建、更新或删除数据等操作。在 GraphQL 中,mutations 的定义和使用方式与 queries 类似,但它们通常涉及对数据的更改。
END
老付
欢迎扫码
关注我们
网络安全
原文始发于微信公众号(老付话安全):高级API查询语言GraphQL详解
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论