GraphQL
GraphQL---API查询语言
SQL是对数据库(服务端)操作的
GraphQL是对API接口(服务端)操作的
SQL 分为服务端和客户端,客户端写SQL操作数据库
GraphQL也分为服务端和客户端,服务端就是提供接口的后端服务,客户端理解为前端——接口调用方
GraphQL可以理解为,客户端操作API,后端业务系统为客户端提供数据服务。
简单概括:
GraphQL主要是作用于数据接口,比如前端后端交互,是给客户端筛选自由获取服务端事先定义好的数据,提高了交互接口的灵活性。这些数据是从MySQL、NoSQL的库里面查出来的。
GraphQL本身不是数据库,不具备聚合计算数据功能,也不会直接操作数据库。
简单例子,后端使用了GraphQL之后,数据库查出来 A , B , C , D 四个字段。前端需要数据的时候,你可以随意获取这四个字段的各种组合,只要 A,C 字段还是只要 B,D 字段等等。
MySQL、NoSQL之类核心是为了储存数据,有储存就自然有取出数据的查询。这是和GraphQL最主要功能区别。
简单来说,最本质的区别,GraphQL可以理解成一个灵活的ajax接口,mysql可以理解成一个储存数据的文件。
GraphQL的优点
减少发送数据的冗余
向API发送GraphQL请求,如果请求中指定了查询字段,API就不会返回任何多余的字段。
GraphQL代码
{
queryStudent(id:4396){
name
age
}
}
对应SQL
select name, age from student where id = 4396;
用一次请求获取多个资源
GraphQL 查询不仅能够获得资源的属性,还能沿着资源间引用进一步查询。
典型的 RESTful API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据。这样一来,即使是比较慢的移动网络连接下,使用 GraphQL 的应用也能表现得足够迅速。
多个接口的调用,可以放到一个http请求中,并且可以自定义数据返回格式,包括指定变量名。
传统的Rest请求是一次http请求,只能操作一个API的内容。如一个场景下:查询用户信息,订单信息,商品信息;要么前端调用三次接口,要么后端封装一个定制接口。
GraphQL代码
获取用户信息:
query queryUserInfo{
getUserInfoById(userId:4396){
userName
userAge
mailBox
}
}
获取商品信息
query queryProducts{
getProducts(device:web){
productName
productId
price
}
}
获取订单信息
query queryOrders{
getOrdersByUserId(userId:4396){
orderId
orderNo
}
}
以上请求,只需发送一次:
query{
user:getUserInfoById(userId:4396){
userName
userAge
mail
}
products:getProducts(device:web){
productName
productId
price
}
getOrdersByUserId(userId:4396){
orderId
orderNo
}
}
1、在移动端弱网环境下,也能高效的加载数据;
2、对于后端,也会相应减少Servlet线程的使用次数,具有更高的系统吞吐量;
3、一次请求多个接口,也可以采用异步执行,提升服务端的响应效率。
代码及文档
GraphQL的schema做到了代码及文档,服务端定义好schema后,前后端可以同时开发业务;
前端在需要组合类的API业务时,只需要在这些原子性的API中组合数据即可。
你应当热爱自由!
作者:Leejk,转载请注明原文链接:https://www.cnblogs.com/leejk/p/16049194.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?