GraphQL

GraphQL---API查询语言

SQL是对数据库(服务端)操作的

GraphQL是对API接口(服务端)操作的

image

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中组合数据即可。

参考:https://segmentfault.com/a/1190000014131950

posted @ 2022-03-24 12:19  Leejk  阅读(394)  评论(0编辑  收藏  举报