当前位置: 首页 > 科技观察

GraphQL,API的新工具规范_0

时间:2023-03-15 23:49:22 科技观察

【.com快译】GraphQL服务器为客户端提供预定义的模式。支持从服务器获取某个型号的数据。它的结构模式充当服务器和客户端之间的连接器,也定义了访问信息的过程。GraphQL架构的各种基本元素都记录在SDL(SchemaDefinitionLanguage,模式定义语言)中。这些记录解释了特定服务器上可以请求哪些对象,它们有哪些字段,允许请求哪些类型的数据,以及这些类型之间的关系。为了确保服务器能够响应某个查询,并且客户端能够根据建立的模式验证查询,您可以开发一个独特的GraphQL模式,并使用任何编程语言创建相应的接口。这样就可以根据匹配结果的GraphQL查询格式来预测对应的结果。此外,GraphQL模式能够避免结构错误或数据不可用等异常。可以看出,只有GraphQL的相关操作到达后端应用后,才能进行完整架构的分析,前端应用的数据也能得到准确的解析。GraphQL运行目前,GraphQL主要有以下三种运行模式:查询读取数据和写入数据变化随着时间的推移自动接收实时数据数据查询和接受。这种客户端驱动的方法受到开发人员的高度重视。至于返回的数据类型,GraphQL将此类数据的控制权交给了客户端。对于REST,由于服务器已经预先定义了所有资源的可用数据。因此,即使只需要部分数据,客户端也必须通过反复的网络请求获取资源中的全部信息。这会产生一个称为过度获取的问题。GraphQL与REST的优势GraphQL和REST都是构建和使用API所需的规范。这两种技术的共同特点是在通过发送查询请求获取资源时,都可以在请求中返回JSON数据。此外,它们都可以通过HTTP进行操作。并且因为它们都是作为调用服务器端函数的数据入口点,所以REST和GraphQL的端点字段有很多相似之处。尽管有这些共同点,但它们的概念模型却大不相同。GraphQL建立在图之上;REST建立在文件之上。这会为开发人员在构建和使用API时带来不同的体验。就运行速度而言,GraphQL更快。用户可以通过选择需要在其上运行的查询字段的数量来减少请求和实际消耗的时间。这是GraphQLAPI比RESTAPI更受欢迎的原因之一。另外:1)GraphQL是多方面系统和微服务的绝配。它可以通过在API后端集成多个系统来统一和隐藏实现的复杂性。GraphQL服务器负责从当前系统获取数据,然后将其打包成GraphQL响应格式。这对于多年来需要对第三方API进行广泛扩展的遗留架构尤为重要。同时,GraphQL也减轻了很多维护负担。通过将单体式后端应用迁移到微服务架构,我们可以将多个微服务合并到GraphQL模式中,实现它们之间的通信。此外,即使每个微服务都定义了自己的GraphQL模式并拥有自己的GraphQL端点,我们也可以通过GraphQLAPI网关将其集成到全局模式中。2)通过单个API调用获取信息由于REST分散在各个端点,开发人员通常需要组合多个端点来收集所有需要的数据。对于专注于主要任务的GraphQL,开发者只需调用一次API即可请求各种所需信息。3)正确获取数据REST方式获取响应数据有一个不稳定的因素:数据不是太少就是太多,开发者不得不执行多次查询请求。由于GraphQL可以通过单个请求获取准确的数据,因此它有效地解决了此类问题。4)根据需要调整请求通常,开发者只能通过RESTAPI文档来请求特定端点的相关功能和参数。GraphQL可以描述数据类型、字段以及它们之间的交互点。因此GraphQL开发人员可以自定义请求并访问各种必要的信息。5)开箱即用的身份验证和类型检查GraphQL的内省(introspection)特性允许用户检测类型并找到模式,从而确保应用程序只使用正确的结构来请求他们需要的东西。此外,开发者还可以使用GraphQLIDE为当前查询添加新字段,而无需额外验证数据格式。他们所需要做的就是编写一个解析器。6)自动生成API文档由于文档与代码密切相关,因此GraphQLAPI的更改可以保持同步。一旦字段、查询或类型发生变化,相应的文档将自动触发修改。7)API的迭代不会产生新的版本。作为一个不断迭代的API,REST提供了多个不同的API版本。这意味着:开发人员必须保留旧版本,直到迁移到新版本。另一方面,GraphQL可以直接从模式中删除“老化”字段,而不会影响未来对现有方法的查询。这保证了GraphQL在不断迭代的过程中仍然可以不间断地访问目标应用的新特性,同时也保持了服务端代码的整洁和易于维护。8)代码共享如果需要代码复用,多个GraphQL查询中使用的字段可以实现高层组件共享。这些代码片段允许用户访问各种类型的数据,同时维护相同的模式字段。9)详细的错误信息为了准确定位程序中的问题和相应的解决方案,REST需要通过检查HTTP头来获取响应状态。在GraphQL中,如果在处理过程中发生错误,后端将提供包含解析器的详细消息,以查明失败的查询的确切部分。10)权限相对于REST的简单视图,开发者在创建GraphQLschema时可以选择要完整展示的功能及其具体的工作方式。因此,用户可以根据具体情况细粒度地展示不同层次的视图。总结我们不能武断地认为GraphQL作为一种工具将完全取代REST作为一种架构模式。哪一种更适合你手头的项目,取决于具体的API交互方式和具体的使用场景。原标题:GraphQL:TheFutureofAPIs,作者:NoaJames