什么是Graphql?
GraphQL是一种API查询语言,是一个对自定义类型系统执行查询的服务端运行环境。一个GraphQL查询是一个被发往服务端的字符串,该查询在服务端被解释和执行后返回JSON数据给客户端。GraphQL最早由Facebook开发,现在已经形成一个强大的社区。
GraphQL可以理解为平行于传统Restful接口的一套并行的查询接口,其特点是简单且强大。
简单示例
废话不多说,我们先来写一个简单的接口来演示一下Graphsql的写法。
首先创建一个传统的flask项目:
1 |
|
服务端包含一个简单的REST接口,返回一个json格式的人名。
接下来我们使用graphql的方式来重写这个接口,首先顶一个User的数据模型:
1 | class User(ObjectType): |
这个模型非常简单,只包括一个id和一个姓名name.
然后我们定义一个查询(Query):
1 | class Query(ObjectType): |
这个查询包含两个resolver,一个返回单个的用户,一个返回一组用户。
接下来,我们把这个graphql添加到flask路由中:
1 | view_func = GraphQLView.as_view( |
然后我们就可以运行这个项目了:
1 | if __name__ == '__main__': |
运行结果如下图:
结合Sqlalchemy
通常我们的项目中都会用到ORM,sqlalchemy是我们常见的ORM框架,Graphql同样支持Sqlalchemy。
首先需要安装第三方框架Graphene-SQLAlchemy:
1 | pip install "graphene-sqlalchemy>=2.0" |
然后像正常项目那样创建model、数据库对象等操作,这里我们还是以User为例:
1 |
|
创建完数据库模型,我们就开始写graphql的业务模型:
1 | from graphene_sqlalchemy import SQLAlchemyObjectType |
很简单,也非常好理解。
最后,启动项目,就可以看到跟前边图片类似的画面里,完整的代码请参考我的github