写在前面

FastApi是python的异步Web框架,具有和Go,NodeJs相当的性能,总而言之,很快。当然还有一些相比于其他Web框架的优势,例如支持了Swagger文档,增加Python3.6+的数据类型指示功能,基于Pydantic的数据类型校验等等。个人觉得有学一学必要,所在这写下自己的学习记录。

安装

pip install fastapi
pip install uvicorn

其中uvicorn是一个ASGI(异步网关协议接口)服务器,介于网络协议和Python应用之间的标准接口,而Flask框架使用的是WSGI(Web服务器网关协议接口)。

HelloWorld

新建一个main.py,在其中创建一个最简单的应用

from fastapi import FastAPIapp = FastAPI()  # 创建应用实例,uvicorn启动时也基于这个实例@app.get("/")  # 定义了一个"/"根目录的路由,直接返回了一个字符串
def hello_world():return "Hello World"

应用的启动方式有两种,一种是通过命令行的方式启动

uvicorn main:app

另一种是在main.py内部实现应用的启动

import uvicornif __name__ == "__main__":uvicorn.run("main:app")'''或者使用uvicorn.run(app) 传入fastapi的实例,但是这种情况下不允许设置reload和workers参数'''

uvicorn启动参数(应用内启动)

参数 说明 参数类型 默认值
host 绑定的IP地址 String 127.0.0.1
port 绑定的端口 Integer 8000
reload 是否自动重启,开发阶段适用 Bool False
reload_dir 自定义重启的目录 Text None
workers 工作进程数,当设置reload时,该参数不生效 Integer 1
log_level 日志级别 Text info
access_log 是否输出访问日志 Bool True
debug debug模式,开启后会自动重启服务 Bool False
proxy_headers 允许X-Forward-* Bool True
forwarded_allow_ips 以逗号分割的IP列表,来自与这些IP的代理头被新人 Text 127.0.0.1
root_path (可选)指定应用所在的路径 Text None
limit_concurency 并发限制 Integer None不限制
limit_max_requests 到达进程前的最大连接数 Integer None不限制
backlog 积压的最大连接数 Integer 2048
timeout_keep_live 超过多长时间自动关闭Keep-Alive连接 Integer 5
headers 自定义响应头 List 形如[(a, b)]

获取API文档

访问绑定的127.0.0.1:8000/doc 获取SwaggerUI风格的API文档

访问绑定的127.0.0.1:8000/redoc 获取ReDoc庚哥的API文档

接口方法简介

@app.get("/")  # 定义了一个"/"根目录的路由,直接返回了一个字符串
def hello_world():return "Hello World"

其中app是FastApi的一个实例,在上文定义的。

get是http协议的方法,除了GET,还包括POST,PUT,DELETE等方法。一般情况下,GET用于获取数据,POST用于创建数据,PUT用于更新数据,DELETE用于删除数据。当然了,也可以根据自己的习惯,使用不同的办法。

"/"是定义的路由,当服务器进行访问时,只有匹配上该路由,才能映射到对应的接口函数。

hello_world是定义的接口函数,用于实现具体的操作。FastApi是一个异步框架,所以接口函数也可以定义成以下方式

@app.get("/")  # 定义了一个"/"根目录的路由,直接返回了一个字符串
async def hello_world():return "Hello World"

官方文档中对于选择def还是async def也做了一个简单的说明

1.如果使用的第三方库告诉你调用的时候用await somefunc()的方式,使用async def

2.如果使用的第三方库与数据库,API等有交互时,并且不支持await调用方式,就使用def

3.如果不与其他交互和等待其他的响应,使用async def

4.如果你什么都不知道,使用def

不管在那种情况下,FastApi都会以异步的方式来提高效率,但是根据不同的情况选择合适的方式有助于性能优化。

FastApi学习-01相关推荐

  1. webservice学习01:wsdl文档结构

    webservice学习01:wsdl文档结构 wsdl文档结构 WSDL文档示例 <wsdl:definitions xmlns:xsd="http://www.w3.org/200 ...

  2. MyBatis学习(01)之解决mapper绑定异常

    MyBatis学习(01)之解决mapper绑定异常 参考文章: (1)MyBatis学习(01)之解决mapper绑定异常 (2)https://www.cnblogs.com/limn/p/858 ...

  3. ThinkPhp学习01

    原文:ThinkPhp学习01 一.ThinkPHP的介绍            MVC   M - Model 模型                工作:负责数据的操作   V - View  视图 ...

  4. hadoop2.x学习01

    hadoop2.x学习01 最新的发行版本已经是2.7了,我围绕2.5展开学习. hadoop2.x是在hadoop0.23之后发行的正式版2.2. 本身是来自于lucene和nutch,在ggl的论 ...

  5. 强化学习(Reinforcement Learning)入门学习--01

    强化学习(Reinforcement Learning)入门学习–01 定义 Reinforcement learning (RL) is an area of machine learning in ...

  6. 计算机编码二进制0001,二进制学习01(二进制,进制运算,数据宽度,无符号位有符号位编码规则)...

    二进制学习01 进制 一.二进制简介 1)什么是二进制? 2)二进制的简写形式 二.进制运算 1)八进制运算表 (1) 加法运算表 (2)乘法运算表 (3)八进制简单运算题 三.数据宽度 1)什么是数 ...

  7. 【FastAPI 学习十二】定时任务篇 (移步博客园或个人网站 无广告,界面清爽整洁)

    声明 目前个人放弃CSDN平台,文章只发布于个人网站和博客园 博客园地址 [FastAPI 学习十二]定时任务篇

  8. Java多线程学习——01

    Java多线程学习--01 1.核心概念 程序:是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念 进程Process:是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单 ...

  9. Android Graphics Tests 程序学习01

    转载自:http://zhoujinjian.cc/2018/12/20/Android%20Graphics%20Tests%20%E7%A8%8B%E5%BA%8F%E5%AD%A6%E4%B9% ...

  10. 《机器人学导论》学习-01空间描述与变换

    <机器人学导论>学习-01空间描述与变换 一.描述:位置.姿态与坐标系 1.位置描述 2.姿态描述 3.坐标系的描述 二.映射:坐标系到坐标系的变换 1.关于平移坐标系的映射 2.关于旋转 ...

最新文章

  1. 利用bat批量执行脚本文件
  2. mono linux c 服务,使用mono-service在Linux上包装Windows服务
  3. 《白鹿原》金句摘抄(四)
  4. 虚拟机开启mysql服务_远程操作虚拟机中的mysql服务器
  5. 10分钟搞定webpack打包
  6. 扛住100亿次请求?我们来试一试
  7. Micropython——基于PYB的霍尔编码器电机的PID控制
  8. #12304;#28404;#28404;#37329;#59257;#34701;#23458;#59257;#26381;#30005;#35805;#12305;
  9. 关于加拿大IC认证变更为ISED认证亚马逊卖家需要注意那些问题?
  10. MySQL学习笔记整理(上部)
  11. 基于Python的招聘推荐与薪资预测系统的设计与实现
  12. 扫二维码 下载app
  13. php 超过一行用省略号,php 超长用省略号代替
  14. 《追风筝的人》读书笔记
  15. t420i升级固态硬盘提升_固态硬盘优化神器,一键提升固态硬盘性能和使用寿命...
  16. 用计算机弹钢琴谱,flash用键盘弹钢琴,电脑钢琴谱-走啦网
  17. 基于新版本Gradle上传jitpack开源项目
  18. DevFest14 珠海 Wear 主题大会总结
  19. ADAS推高毫米波雷达需求,上游企业如何跟进?
  20. Java实现单点登录(SSO)方式

热门文章

  1. 防身共享-穷人救命五十秘方
  2. SAT写作至从语言基础到理论的转化
  3. 在职场我摸爬滚打了10年!在我在明白这个道理后,涨薪10万
  4. 阿里云安装CDH6.3.2并集成flink1.12
  5. 【iPhone代码片段之七】用NSUserDefaults作为缓存工具
  6. extjs 自己的小小总结
  7. 亲子服务企业“闪闪”完成A3轮千万级融资,仁爱资本投资
  8. 洪水预警系统防雷,水利防雷工程,变电站防雷设计方案
  9. 【大虾送书第十二期】MLOps快速成为机器学习生产落地中不可或缺的关键能力
  10. 万应工场入选《长沙市第二批创新创意产品目录(2021年)》