Skip to main content
 主页 > GMG微信 >

GMG茶楼

2024-11-05 16:14 浏览:

简介

随着 Web 和移动应用程序变得越来越成熟和复杂,软件工程师发明了巧妙的新方法来改善应用程序中客户端和服务器之间的交互在过去的几年里,在这方面最大的范式转变之一是 GraphQL,一种用于操作 API 的开源查询语言和运行时。

GraphQL 由 Facebook 于 2012 年设计(并于 2015 年公开发布),旨在通过制作一个声明式、客户端驱动和高性能的新系统来解决传统 REST 架构的各种弱点在本文中,您将了解 GraphQL 是什么,熟悉 GraphQL 的重要术语和概念,并发现 GraphQL 规范与 REST 架构风格相比如何。

GraphQL 是什么?GraphQL 代表图形查GMG询语言,但与其他查询语言(如 SQL(结构化查询语言))不同,它不是一种直接与数据库通信的语言,而是一种定义客户端与 API 服务器通信的契约的语言GraphQL 规范是一个描述语言规则和特征的开放标准。

它还提供了执行 GraphQL 查询的说明由于 GraphQL 是由开放标准定义的,因此没有正式的 GraphQL 实现GraphQL 实现可以使用任何编程语言编写,与任何类型的数据库集成,并支持任何客户端(例如移动或 Web 应用程序),只要它遵循规范中概述的规则即可。

最流行的商业 GraphQL 实现之一是 Apollo GraphQL,它吹捧了几个 GraphQL 客户端和服务器实现,但GMG没有必要使用 Apollo 来使用或理解 GraphQLGraphQL 特性GraphQL 设计有几个关键特征。

GraphQL 查询是声明性和分层的,而 GraphQL 模式是强类型和内省的Declarative 声明GraphQL 查询是声明性的,这意味着客户端将准确声明它感兴趣的字段,并且响应将仅包含这些属性.

此示例针对假设的幻想游戏 API 的 GraphQL 查询请求 ID 为“1”的向导,并请求该对象的名称和种族字段{ wizard(id: "1") { namerace } }以 JSON 格式返回的响应将返回一个数据GMG对象,其中包含找到的向导对象,其中包含查询请求的两个字段。

{ "data": { "wizard": { "name": "Merlin", "race": "HUMAN" } } }由于 GraphQL 响应只为您提供所需的确切信息,因此与始终提供完整数据集的替代方案相比,它会产生更高效、性能更高的网络请求。

Hierarchical 层次GraphQL 查询也是分层的返回的数据遵循查询的形状在此示例中,查询已扩展为包括法术,并请求每个法术的名称和攻击字段{ wizaGMGrd(id: "1") { name

spells { nameattack } } }响应现在将包括与此特定向导关联的所有拼写对象的数组尽管向导和咒语可能存储在单独的数据库表中,但它们可以通过单个 GraphQL 请求获取。

(但是,GraphQL 对数据本身的存储方式并不固执己见,所以这是一个假设{ "data": { "wizard": { "name": "Merlin", "spells"

: [ { "name":GMG "Lightning Bolt", "attack": 2 }, {

"name": "Ice Storm", "attack": 2 }, { "name": "Fireball",

"attack": 3 } ] } } }Strongly-typed 强类型GraphQL 是强类型,如 GraphQL Type 系统所述类型描述了 GraphQL 服务器中值的功能。

大多数程序员都熟悉 GraphQL GMG类型,具有字符串、布尔值和数字整数等标量(基元值),以及对象等更高级的值本示例创建一个拼写对象类型,其中包含与字符串和 Int 标量类型对应的字段typeSpell {

name: String! attack: Int range: Int }GraphQL 模式是使用类型系统定义的,它允许服务器在尝试查询数据之前确定查询是否有效GraphQL 验证确保请求在语法上正确、明确且无错误。

Self-documenting 自我记录样式内省功能允许 GraphQL 客户端和工具查询 GraphQL 服务器以获取底层模式的形状和数据这允许创建诸如 GraGMGphiQL、用于处理 GraphQL 查询的浏览器内 IDE 和游乐场等工具,以及其他用于自动生成文档的工具。

例如,您可以通过__schema通过此自省功能了解有关咒语类型的更多信息{__schema{types{namekinddescription}}}响应也将像任何其他 GraphQL 响应一样是 JSON。

{ "data": { "__schema": { "types": [ { "name": "Spell", "kind"

: "OBJECT", "descriptionGMG": "A powerful spell that a wizard can read from a scroll." } ] } } }

Client-driven 客户端驱动开发 GraphQL API 的工作发生在后端,其中模式是定义和实现的但是,由于 GraphQL API 的所有功能都包含在服务器上的单个端点中,因此由客户端通过声明性查询来决定它到底需要哪些数据。

Q微:6681122

这使开发人员能够快速迭代,因为前端开发人员可以继续查询 GraphQL API 公开的数据,而无需执行任何其他后端工作ArchGMGitecture 架构GraphQL 存在于客户端和数据之间的应用层中GraphQL 服务器描述 API 中公开的功能,客户端描述请求的要求。

Server 服务端GraphQL API 由单个端点定义,通常是 /graphql 端点,可以访问 GraphQL 服务器的全部功能由于 GraphQL 是一种应用层技术并且与传输无关,因此它可以通过任何协议提供服务,但最常见的是通过 HTTP 提供。

GraphQL 服务器实现可以使用任何编程语言编写,例如 express-graphql 中间件,它允许您在 Node/Express HTTP 服务器上创建 GraphQL APIGraphQL 也是与GMG数据库无关的,应用程序的数据可以存储在 MySQL、PostgreSQL、MongoDB 或任何其他数据库中。

数据甚至可以由多个传统 REST API 端点的聚合提供重要的是数据是在 GraphQL 模式中定义的,该模式通过描述可供查询的数据来定义 APIClient 客户端向 GraphQL 服务器发出的请求称为文档,由查询(用于读取请求)和突变(用于写入请求)等操作组成。

虽然有高级的 GraphQL 客户端,如 Apollo Client 或 Facebook 的 Relay,它们提供了缓存机制以及额外的工具,但不需要特殊的客户端来向 GraphQL 服务器发出请求一个简单的 XMLHttGMGpRequest 或从 Web 浏览器获取就足以通过将 GraphQL 文档发送到 GraphQL 服务器来发出请求。

下面是一个到 /graphql 端点的获取请求示例,该端点将 GraphQL 文档作为字符串传递到 POST 请求的正文中asyncfunctionfetchWizards() { const response = 。

await fetch(/graphql, { method: POST, headers: { Content-Type: application/json, },

body: JSOGMGN.stringify({ query: `{ wizards { id name }, }`, }), })

const wizards = await response.json() return wizards } fetchWizards()这将返回请求的 JSON 响应{ "data": { 。

"wizards": [ { "id": "1", "name": GMG"Merlin" }, { "id": "2", "name": "Gandalf" } ] } }

GraphQL vs. REST GraphQL 和 REST 不是可互换的概念,但它们解决了类似的应用程序问题REST代表具象状态传输,是一种用于在不同系统之间共享数据的软件架构风格RESTful API 是遵循 REST 原则和约束的 API,包括无状态、可缓存、在客户端和服务器之间强制分离关注点,以及具有统一的接口(例如通过 URI)。

如前所述,GraphQL 是用于执行查询的查询语言和运行时的规范这两个系统都有优点和缺点,并GMG且在现代 API 开发中都有其用途然而,GraphQL 的开发是为了对抗 REST 系统的一些弱点,并创建一个更高效的、客户端驱动的 API。

Architecture 架构 - REST API 通常由服务器上的多个端点定义,但 GraphQL 通过单个端点交换数据GraphQL 端点可以返回可能需要多个 REST 查询的复杂数据图,从而减少单个视图通过网络的请求数量.。

Data fetching 获取数据- REST API 返回在服务器上确定的数据集这可能是太多的数据,例如,如果视图只需要响应中的一个属性,或者可能还不够,例如列表终结点不返回表中表所需的每个属性GraphQL 防止这种情况GMG通过声明性查询过度和不足地获取数据。

Error Handling 错误处理- 由于 GraphQL 没有必要通过 HTTP 提供,因此没有关于使用 HTTP 响应代码处理错误的规范通常,所有 GraphQL 端点都将使用 200 HTTP 代码响应进行解析,失败的结果将在响应中的数据属性旁边包含一个错误属性。

另一方面,RESTful API 使用不同的 400 级 HTTP 代码来处理客户端错误,并使用 200 级 HTTP 代码来成功响应Versioning 版本管理 - GraphQL API 努力向后兼容并避免中断性更改,这与版本控制端点的常见 REST 模式形成鲜明对比,通常在 URLGMG 本身中使用 /v1 或 /v2 来确定版本。

但是,可以使用 GraphQL 实现自己的版本控制,或者使用 REST 通过演进实现版本,只是不那么传统Caching 缓存- 可缓存性是 REST 指导约束的一个组成部分由于基于 HTTP 的 REST API 由使用不同 HTTP 方法的多个终结点组成,因此它可以利用现有的 HTTP 约定进行缓存并避免重新获取资源。

由于基本上每个 GraphQL 请求都是不同的,但使用单个端点,因此它无法利用任何内置的 HTTP 缓存机制GraphQL 客户端可以利用全局对象识别来启用简单缓存这个列表并没有涵盖 REST 和 GraphQL 之间的所有异同,但GMG总结了许多最关键的点。

此外,GraphQL 可以用作聚合多个 REST 端点或服务的网关,在这种情况下,这两种技术可以并排使用特征GraphQLREST描述GraphQL 是一种用于 API 的查询语言,也是服务器端运行时用于设计 Web 服务的体系结构样式

Data Fetching获取数据响应确定性查询的单个 HTTP 终结点一组通常返回预定数据集的 HTTP 终结点Versioning版本管理不鼓励版本控制常见版本控制HTTP状态码所有响应(包括错误)通常为 200

实现 HTTP 状态代码Validation内置元数据验证必须手动实施验证Documentation内置过孔类型系统和自省不是GMG自我记录的,像OpenAPI这样的工具可用Caching缓存无有请求方法查询、更改和订阅(通过 HTTP 的 POST )

使用的所有HTTP方法(GET,POST,PATCH,PUT,DELETE等)响应内容类型JSONAny (JSON, XML, HTML, etc.)总结GraphQL 是一种开源查询语言和 API 运行时。

GraphQL 由 Facebook 的开发人员发明,旨在通过为 API 制作客户端驱动的声明性查询语言来解决传统 REST API 遇到的各种问题,例如获取数据过多/不足和网络请求效率低下虽然 GraphQL 不是与 REST 互换的概念,但它们都描述了管理客户端和GMG服务器之间通信的不同方法。

在本文中,您了解了 GraphQL 是什么,GraphQL 和 REST 之间的主要区别和相似之处,以及 GraphQL 服务器如何向客户端公开数据

Q微:6681122

上一篇:gmg代理怎么做

下一篇:gmg俱乐部招代理