📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、腾讯云TDP-KOL、ACDU成员、墨天轮技术专家博主
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~
引言
互联网发展到今日,HTTP API作为前端和后端通信的桥梁,变得越来越重要。在一众API架构风格中,GraphQL因自己的优势也越来越受很多人关注。本文将从数据获取方式、通信性能、灵活性以及使用场景上,浅谈下GraphQL。
了解GraphQL
如果你需要了解更多关于GraphQL的信息,可以移步官方网站来学习和获取更多的知识,GraphQL当前最新的版本为v16,v17还是测试阶段,不过也很快同大家见面。
官网:https://graphql.org/
GraphQL中文网:https://graphql.nodejs.cn/
Github:https://github.com/graphql/graphql-js
GraphQL Editor:https://graphqleditor.com/graphql/
GraphQL有哪些优点
GraphQL 旨在处理此问题。 在发出信息请求时,您可以确定希望获得的信息。 此类结果是通过将信息定义能力移动到客户端来完成的,而在 REST 中,信息在工作人员方面具有特征。 因此,在 REST API 设计中,工作人员表示要返回哪些数据,而在 GraphQL API 中,工作人员声明可访问的信息,并且客户指示应该替换哪些数据。总结优点如下:
● 适合复杂的系统和微服务
● 它通过单个 API 调用获取数据
● 根据需求定制请求
● 验证和键入开箱即用
● 自动生成 API 文档
● 无需版本控制即可进行 API 演化
● 代码共享
顺便也说下缺点,
● 始终返回 200 的 HTTP 状态代码,即过度查询是否有效。
● 缺少隐式存储支持。
GraphQL获取数据的方式
GraphQL是一种用于API的查询语言和运行时环境,它允许客户端精确地获取需要的数据。GraphQL通过定义一个全局唯一的Schema,描述了后端所有可能的数据结构。客户端通过编写GraphQL查询语句,告诉服务器需要哪些数据,服务器根据查询语句返回精确的数据。这种方式的优点是减少了不必要的HTTP请求,降低了网络带宽消耗;缺点是需要学习和掌握GraphQL查询语句的编写,GraphQL比较年轻,相对于我们使用REST风格的方式,例如HTTP方法(GET、POST、PUT、DELETE等)对实现客户端对资源的增删改查需要更多的理解。
GraphQL通信性能
GraphQL通过减少网络传输的数据量来提升性能,因为它只返回客户端需要的数据。此外,GraphQL还支持懒加载和增量更新,这意味着客户端可以在需要时获取更多数据,而不是一次性加载所有数据。这个在下一篇将专注测试通信性能。
GraphQL与REST的差异点
REST API 是应用程序通信的架构概念。与之相对的 GraphQL 则是一种规范、一种 API 查询语言和一组工具。GraphQL 使用 HTTP 在单个端点上运行。此外,REST 开发更侧重于创建新的 API。同时,GraphQL 的重点一直是 API 的性能和灵活性。
差异性
对比项 | GraphQL API风格 | REST API风格 |
---|---|---|
定义 | GraphQL 是一种查询语言、架构样式以及一组用于创建和操作 API 的工具。 | REST 是一组规则,用于定义客户端和服务器之间的结构化数据交换 |
适用场景 | 大型、复杂和相互关联的数据来源。 | 资源定义明确的简单数据来源。 |
返回数据格式 | 客户端定义的灵活结构返回数据。 | 服务器定义的固定结构返回数据。 |
渲染容错 | 无效的请求通常会被架构结构拒绝。这会导致自动生成的错误消息。 | 客户端必须检查返回的数据是否有效。 |
相同点
● 两者都是无状态的,因此服务器不会在请求之间保存响应历史记录。
● 两者都使用客户端-服务器模型,因此来自单个客户端的请求会导致来自单个服务器的回复。
● 两者都基于 HTTP,因为 HTTP 是底层通信协议。
代码方式
例如获取本篇博文后的信息可以如下方式
REST API
[
{
"id": 1,
"title": "开发实践|API新宠GraphQL浅谈",
"content": "本文主要了解下什么是GraphQL,从数据获取方式、通信性能、灵活性以及使用场景上,浅谈下GraphQL,希望能给更多开发者以帮助。"
}
]
GraphQL API
{
"data": {
"posts": [{
"id": "1",
"title": "开发实践|API新宠GraphQL浅谈",
"content": "本文主要了解下什么是GraphQL,从数据获取方式、通信性能、灵活性以及使用场景上,浅谈下GraphQL,希望能给更多开发者以帮助。"
}]
}
}
GraphQL与SOAP异同
REST 在 API 排列设计方面是一种创新成就,它还是让工程师需要更多。 当 Facebook 人员开始搜索从工作人员那里获取信息的替代方法时,他们试图确定当前 API 约定中获取不足或过度获取的问题。 在 REST 或 SOAP 中,请求某些信息恢复与它相关的所有属性;即使是那些客户端不需要的。
使用场景
GraphQL则更适用于数据复杂、查询需求多变的场景,如社交媒体、电商等。在这些场景中,GraphQL可以帮助开发者更高效地获取和处理数据,提升用户体验。RESTful API适用于资源导向的场景,如CRUD操作、文件上传下载等。它简单易用,易于理解和实现,适用于大多数Web应用。所以如何选择API架构风格,则一目了然。
总结
本文主要了解下什么是GraphQL,从数据获取方式、通信性能、灵活性以及使用场景上,浅谈下GraphQL,希望能给更多开发者以帮助。
欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。