全栈工程师开发手册 (作者:栾鹏)
数据架构师全解

​当我们使用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框架相关推荐

  1. GraphQL | 一种配得上凡尔赛的API框架

    全栈工程师开发手册 (作者:陈玓玏) 架构系列文章 当我们使用flask构建一个简单应用时,我们通常会像下面这样构建该应用: from flask import Flask import json a ...

  2. 让ASP.NET Core支持GraphQL之-GraphQL的实现原理

    众所周知RESTful API是目前最流行的软件架构风格之一,它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RESTful的优越性是毋庸置疑 ...

  3. 【GraphQL】---GraphQL的基本使用

    GraphQL介绍 GraphQL是Facebook开发的一种数据查询语言,并于2015年公开发布.它是REST API的替代品. GraphQL既是一种用于API的查询语言也是一个满足你数据查询的运 ...

  4. 物联网智能家居需要服务器吗,智能家居设备常见的两种配网/联网方式

    你是否用过智能家居?你知道智能家居是怎么连上你家WIFI热点吗?你是否好奇APP是怎么和智能家居通话的?今天的这篇文章为你揭晓智能家居配网原理. 绝大多数智能家居都要求用户安装一个APP,通过APP完 ...

  5. 凭自己本事单的身是一种怎样的体验?你根本配不上如此优秀的我!

    全世界只有3.14 % 的人关注了 数据与算法之美 8月12号,微博网友@烂剧斗士发了这么一条微博,称"看脱口秀大会这个哥没把我给笑死". 一位从事IT(黑客)的小哥哥,是这样回忆 ...

  6. fastapi jinja2_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架

    用官方的话来说,FastAPI 是一种现代,快速(高性能)的 Web 框架,基于标准Python 类型提示使用 Python 3.6+ 构建 API FastAPI 站在巨人的肩膀上? 很大程度上来说 ...

  7. python比flask更好的框架_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架...

    用官方的话来说,FastAPI 是一种现代,快速(高性能)的 Web 框架,基于标准Python 类型提示使用 Python 3.6+ 构建 API FastAPI 站在巨人的肩膀上? 很大程度上来说 ...

  8. 中国男人配不上中国女人?

    2014-7-24    来源:腾讯评论    作者:刘彦伟    责任编辑:弥尘 中国男人形象气质差成为共识? 1."马路上,女比男明显高一个档次" 前段时间,中国著名社交网站天 ...

  9. 高管离职、亏损百亿、合规难题,首汽约车的努力配不上野心

    作者 | 柒月 来源 | 锌财经 3月份的首汽约车并不平静. 先是首汽集团对外宣布首汽约车CEO魏东离职,由首汽集团总经理.首汽租车董事长高捷接任.一直将"合规化"奉为圭臬的魏东不 ...

最新文章

  1. visual studio 不能创建biztalk 项目
  2. ORACLE TEXT LEXER PREFERENCE(四)
  3. 2019.7.16考试总结
  4. 【算法基础笔记】常用的排序算法的时间、空间复杂度,部分排序算法原理
  5. android studio Cmake undefine func
  6. 算法----(3)选择排序
  7. 实现multbandblend
  8. WPF调色盘(1):绘制三色轮
  9. 协同办公市场暴增背后:融云通信能力是需求重点
  10. java 自然对数的底数_Java求自然对数底e的值
  11. react native 文本只显示两行
  12. 算法模型---关联规则挖掘学习
  13. pyqt5实现一个简易音乐播放器(升级到v2版本)
  14. node内存溢出问题 Javascript Heap out of memory
  15. Vue乱搞系列之axios发起表单请求
  16. 异常值 识别与处理方法
  17. Mac pro更换大内存固态硬盘实践教程
  18. 数据中心网络方案设计
  19. 快速了解医院四项测评
  20. 解决org.springframework.amqp.AmqpException: No method found for class [B

热门文章

  1. 10个PHP常见安全问题(实例讲解)
  2. koa操作mongodb,封装mongdb操作方法
  3. 我的开源项目:JPEG分析器
  4. x264编码指南——码率控制
  5. ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
  6. Cache 和 Buffer 有什么区别?
  7. SVN更新有问题 svn The working copy at‘ ‘ is too old
  8. Java常用的几个Json库
  9. oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案
  10. erlang 变量存储在哪里_erlang中变量作用域