GraphQL 、flask-graphql、Graphene| 一种配得上凡尔赛的API框架
全栈工程师开发手册 (作者:栾鹏)
数据架构师全解
当我们使用flask构建一个简单应用时,我们通常会像下面这样构建该应用:
from flask import Flask
import json
app = Flask(__name__)
@app.route("/")
def homepage():return "Welcome!"
@app.route("/get_response", methods=['GET'])
def response():return json.dumps({"name": "Siri","said":"Hello world!"})
if __name__ == '__main__':app.run(host='127.0.0.1',port='8080')
以上,我们构建了一个简单的web应用,当打开127.0.0.1/8080时,我们得到以下结果:
当我们打开网址127.0.0.1/8080/get_response时,我们得到以下结果:
那么,既然我们已经会用flask构建应用了,为什么还需要学习flask-graphql这个python库呢?在知道答案之前,我们先来了解以下graphql。
以下是graphql的官方站:https://graphql.cn/
通过官方的实例,我们可以知道,graphql的主要功能,是进行API测试,与其他的API测试工具相比,graphql有几个优势:
1、graphql可以通过图形化界面的方式,在同一个界面上交互式地进行API数据测试,所解析的数据结构清晰,避免手动解析再排版检查;
2、graphql能够没有冗余地获取数据,不会返回前端页面,避免了后台测试时获取到冗余内容;
3、典型的 REST API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据,只需要把多个URL的功能封装在一个Query内;
4、GraphQL 使用类型来保证应用只请求可能的数据,还提供了清晰的辅助性错误信息。
因此,graphql能够让我们在进行API测试时更直观,稳定,快速。那么我们如何在flask应用中使用graphql,来同时进行应用构建和API测试呢?下面给出一个使用flask-graphql的示例。使用flask构建的基础应用和前面的应用是一样的,不同之处在于,这次我们加上了graphql测试的功能,具体涉及到两个包:flask_graphql及graphene。
flask-graphql:
使用flask-graphql,最主要就是三个工作:1)定义数据格式,即schema;2)定义查询;3)添加graphql的entrypoint到flask应用。
Graphene:
Graphene是一个提供使用代码优先方法在Python中实现GraphQL API的工具的库。将Graphene的代码优先方法与Schema-first方法(如Apollo Server(JavaScript)或Ariadne(Python))构建GraphQL API进行比较。我们没有编写GraphQL架构定义语言(SDL),而是编写Python代码来描述服务器提供的数据。Graphene具有最流行的Web框架和ORM的集成功能。Graphene生成的方案完全符合GraphQL规范,并提供了用于构建符合中继标准的API的工具和模式。
也就是说,我们通过graphene定义graphql所能接受的数据结构,构建起schema和query,再将query添加到graphql视图中,将视图函数的entrypoint添加到flask应用,这样当我们打开/graphql这个url时,就能进入到接口测试页面,进行数据测试了。测试时,输入的测试数据,要按照graphene定义的数据格式来输入,如果发生了错误,graphql的测试界面会有错误提示的。
from flask import Flask
from flask_graphql import GraphQLView
import json
from graphene import ObjectType,String,Schema
app = Flask(__name__)
# flask原生使用方法
@app.route("/")
def homepage():return "Welcome!"# flask原生使用方法
@app.route("/get_response", methods=['GET'])
def response():return json.dumps({"name": "Siri","said":"Hello world!"})
# flask_graphql使用方法
class Query(ObjectType):# this defines a Field `welcome` in our Schema with a single Argument `name`# 等价于定义flask中的路由welcome = String(name=String(default_value="stranger"))goodbye = String()
# our Resolver method takes the GraphQL context (root, info) as well as# Argument (name) for the Field and returns data for the query Response# 绑定路由对应的试图函数,如果有要新增的试图函数,前缀必须是resolve_,并且必须带root,info入参def resolve_welcome(root, info, name):return 'Welcome %s!' % (name)
def resolve_goodbye(root, info):return 'See ya!'
schema = Schema(query=Query, auto_camelcase=False)
app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql',schema=schema, graphiql=True))
if __name__ == '__main__':app.run(host='127.0.0.1',port='8080')
测试一下graphql,不传入name参数,则默认传入的name是stranger
在测试时传入参数name=”siri”,结果更新了
到这里就介绍完了,enjoy~
GraphQL 、flask-graphql、Graphene| 一种配得上凡尔赛的API框架相关推荐
- GraphQL | 一种配得上凡尔赛的API框架
全栈工程师开发手册 (作者:陈玓玏) 架构系列文章 当我们使用flask构建一个简单应用时,我们通常会像下面这样构建该应用: from flask import Flask import json a ...
- 让ASP.NET Core支持GraphQL之-GraphQL的实现原理
众所周知RESTful API是目前最流行的软件架构风格之一,它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RESTful的优越性是毋庸置疑 ...
- 【GraphQL】---GraphQL的基本使用
GraphQL介绍 GraphQL是Facebook开发的一种数据查询语言,并于2015年公开发布.它是REST API的替代品. GraphQL既是一种用于API的查询语言也是一个满足你数据查询的运 ...
- 物联网智能家居需要服务器吗,智能家居设备常见的两种配网/联网方式
你是否用过智能家居?你知道智能家居是怎么连上你家WIFI热点吗?你是否好奇APP是怎么和智能家居通话的?今天的这篇文章为你揭晓智能家居配网原理. 绝大多数智能家居都要求用户安装一个APP,通过APP完 ...
- 凭自己本事单的身是一种怎样的体验?你根本配不上如此优秀的我!
全世界只有3.14 % 的人关注了 数据与算法之美 8月12号,微博网友@烂剧斗士发了这么一条微博,称"看脱口秀大会这个哥没把我给笑死". 一位从事IT(黑客)的小哥哥,是这样回忆 ...
- fastapi jinja2_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架
用官方的话来说,FastAPI 是一种现代,快速(高性能)的 Web 框架,基于标准Python 类型提示使用 Python 3.6+ 构建 API FastAPI 站在巨人的肩膀上? 很大程度上来说 ...
- python比flask更好的框架_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架...
用官方的话来说,FastAPI 是一种现代,快速(高性能)的 Web 框架,基于标准Python 类型提示使用 Python 3.6+ 构建 API FastAPI 站在巨人的肩膀上? 很大程度上来说 ...
- 中国男人配不上中国女人?
2014-7-24 来源:腾讯评论 作者:刘彦伟 责任编辑:弥尘 中国男人形象气质差成为共识? 1."马路上,女比男明显高一个档次" 前段时间,中国著名社交网站天 ...
- 高管离职、亏损百亿、合规难题,首汽约车的努力配不上野心
作者 | 柒月 来源 | 锌财经 3月份的首汽约车并不平静. 先是首汽集团对外宣布首汽约车CEO魏东离职,由首汽集团总经理.首汽租车董事长高捷接任.一直将"合规化"奉为圭臬的魏东不 ...
最新文章
- visual studio 不能创建biztalk 项目
- ORACLE TEXT LEXER PREFERENCE(四)
- 2019.7.16考试总结
- 【算法基础笔记】常用的排序算法的时间、空间复杂度,部分排序算法原理
- android studio Cmake undefine func
- 算法----(3)选择排序
- 实现multbandblend
- WPF调色盘(1):绘制三色轮
- 协同办公市场暴增背后:融云通信能力是需求重点
- java 自然对数的底数_Java求自然对数底e的值
- react native 文本只显示两行
- 算法模型---关联规则挖掘学习
- pyqt5实现一个简易音乐播放器(升级到v2版本)
- node内存溢出问题 Javascript Heap out of memory
- Vue乱搞系列之axios发起表单请求
- 异常值 识别与处理方法
- Mac pro更换大内存固态硬盘实践教程
- 数据中心网络方案设计
- 快速了解医院四项测评
- 解决org.springframework.amqp.AmqpException: No method found for class [B
热门文章
- 10个PHP常见安全问题(实例讲解)
- koa操作mongodb,封装mongdb操作方法
- 我的开源项目:JPEG分析器
- x264编码指南——码率控制
- ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
- Cache 和 Buffer 有什么区别?
- SVN更新有问题 svn The working copy at‘ ‘ is too old
- Java常用的几个Json库
- oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案
- erlang 变量存储在哪里_erlang中变量作用域