终于,Flask 迎来了真正的对手!

Posted 菜鸟学Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终于,Flask 迎来了真正的对手!相关的知识,希望对你有一定的参考价值。

超级无敌干货第一时间推给你!

Flask 是一个轻量级的可定制框架,使用 Python 语言编写,框架特点主要包括灵活、轻便、安全且容易上手。小型团队在短时间内就可以完成功能丰富的 Web 接口服务的实现。

今天它的对手 FastApi 框架来啦!FastAPI是一种现代,高性能的Web框架:

  • 支持异步编码;

  • 框架源码全部基于标准的 Python 3.6 类型声明;

  • 100%类型注释的代码库;

  • 框架也有灵活、轻便、安全的特点;


一.FastApi 如何安装


和 Flask 的安装方式一样,都是可以使用 pip 安装。直接在终端执行命令 pip install "fastapi[all]", 即可安装 FastApi 和它所需要的一些依赖。

终于,Flask 迎来了真正的对手!



二.Flask VS FastApi


01.代码风格对比

1).使用 Flask 开发一个简单的需求:

有这样的需求:编写一个API 接口,接收 POST 请求发送过来的数据,对参数进行处理,并返回,使用 Flask 开发接口的代码如下:

终于,Flask 迎来了真正的对手!


看起来似乎很简洁了,用 postman 发个请求看看效果,如图所示:

终于,Flask 迎来了真正的对手!

2).使用 FastApi 开发上述需求


终于,Flask 迎来了真正的对手!

代码风格和 Flask 很相似,都是把框架类实例化成了一个 app 对象,这个 app 作为一个装饰器使用。


02.接口健壮性对比

1).使用 postman 请求 Flask 编写的接口

请求 Flask 编写的接口时,请求参数 num 的值忘记传了,代码就会报错,例如:

终于,Flask 迎来了真正的对手!


为了保证接口的健壮性,必须为接口加上一些参数校验的代码,增加参数校验后代码变得复杂了。


虽然 Flask 可以让你用很少的代码写出一个可以正常运行的项目,但是写成一个可以正常使用的项目还需要你写更多的代码。


终于,Flask 迎来了真正的对手!


2).使用 postman 请求 FastApi 编写的接口

去掉请求参数 num ,效果是这样的,我们来看一下

终于,Flask 迎来了真正的对手!

FastApi 编写接口会智能的返回错误信息,提示 num 字段缺失,未传参,保证了接口的健壮性。参数校验由 FastApi 框架自己完成,不用我们再写额外的代码进行参数校验。



三.框架性能对比


网站性能对于普通用户来说,最直接的体现就是响应时间。从开发人员的角度看,网站性能的指标主要有并发数和响应时间。

FastApi 框架正如其名字一样,它是可用的最快的 Python web 框架之一。

终于,Flask 迎来了真正的对手!

上图的性能对比基准是基于每秒响应数,每个请求20个查询,明显看出 FastApi 接口响应速度比 Flask 快很多。

1).Flask 部署方式

由于 Flask 本身是不支持异步编码,所以它一般的部署方式和同步的框架 Django 是一样的,都是用 uwsgi 部署。

2).FastApi部署方式

FastAPI 是个异步框架,所以它是支持 async/await 异步编程语法的,比如下面这段代码:

终于,Flask 迎来了真正的对手!

本地和生产环境中,FastApi 都是通过 uvicorn 运行的,运行指令都是  uvicorn main:app —reload ,其中main 是脚本名称。uvicorn 一个性能非常高 的 ASGI 服务器,基于 uvloop 和 httptools 构建。



四.API接口文档对比


在项目开发中,Web 项目的前后端分离开发需要由前后端工程师共同定义接口。编写接口文档,之后大家都根据这个接口文档进行开发,同时也方便后期人员查看、维护。

Flask 框架本身并没有自带 API 文档,需要借助第三方插件实现,生成API接口文档的第三方插件还是蛮多,但是对选择困难症的朋友不是很友好。而 FastApi 框架本身自带生成交互式的 API 接口文档,对于选择困难症的朋友是很友好的,直接使用框架自带的Api交互式文档即可。

对于 FastApi 框架,访问http://127.0.0.1:8000/docs, 看到的是 swagger-ui类型的文档:

终于,Flask 迎来了真正的对手!

如果访问 http://127.0.0.1:8000/redoc , 看到的是redoc风格的接口文档:

终于,Flask 迎来了真正的对手!


5.框架现代化对比


众所周知,Python 的变量随时可以被赋值,且能赋值为不同的类型,由于不做任何类型检查,有些问题直到运行才显现出来,或者线上运行时才能暴露出问题。

而类型注释可以对函数的参数进行类型注解,也可以对函数的返回值进行类型注解。使用类型注释保证了更少的错误。

细心的同学会发现,小编在 FastApi 代码中写了一些基于标准的 Python 3.6+ 的类型注释声明,对一些请求参数的类型做了限定,比如:

终于,Flask 迎来了真正的对手!

1).Flask 框架的源码:

Flask 框架源码并没有使用现代化的类型注释声明。

终于,Flask 迎来了真正的对手!

2).FastApi 框架的源码:

FastApi 框架源码有 100% 类型注释的代码库,并且全部基于标准的Python 3.6+ 的类型声明。小编找了 FastApi 一段源码,每个请求参数和返回参数都做了类型注释的声明:

终于,Flask 迎来了真正的对手!


有兴趣的小伙伴,下次在做后端项目的时候,可以试试FastAPI,也许效果会让你大吃一惊哦!希望本篇的分享对大家有帮助,欢迎大家三连!


   
     
     
   
      
        
        
      
        
          
          
        

终于,Flask 迎来了真正的对手!

           
             
             
           

近期八大热门:

                         
                           
                           
                         
                             
                               
                               
                             
                               
                                 
                                 
                               
                                  
                                    
                                    
                                  
                                    
                                      
                                      
                                    






                         
                           
                           
                         
菜鸟学Python 原班人马打造的公众号: 程序员GitHub,现已正式上线!
接下来我们将会在该公众号上,为大家 分享GitHub上优质的开源神器,程序员圈的趣事 ,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!

                           
                             
                             
                           
                             
                               
                               
                             
                                  
                                    
                                    
                                  

                                        
                                          
                                          
                                        
                                             
                                               
                                               
                                             
                                                   
                                                     
                                                     
                                                   
点这里,领取新手福利

以上是关于终于,Flask 迎来了真正的对手!的主要内容,如果未能解决你的问题,请参考以下文章

Docker迎来潜在竞争对手CoreOS

Ipad迎来史上最强对手,笔记本产业或迎来第二春

VS Code 迎来新对手?JetBrains发布新一代轻量编辑器——Fleet

“后华为时代”小米正迎来“新对手”?

世纪诉讼迎来终局,Android终于“洗白”了自己

谷歌布局大数据:开源平台Apache Beam正式发布