安装 FastAPI

pip install fastapi

# 将来需要将应用程序部署到生产环境可以安装 uvicorn 作为服务器
pip install uvicorn

最简单的代码栗子

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"message": "Hello World"}

运行 uvicorn 命令,启动服务器

进到 py 文件所属目录的命令行

uvicorn main:app --reload  
  • main:main.py 文件(一个 Python「模块」)
  • app:在 main.py 文件中通过 app = FastAPI() 创建的对象
  • --reload:让服务器在更新代码后自动重新启动,仅在开发时使用该选项

我这里截图的名字换了哈

浏览器访问

http://127.0.0.1:8000 

查看交互式 API 文档

http://127.0.0.1:8000/docs

查看可选的 API 文档

http://127.0.0.1:8000/redoc 

OpenAPI

FastAPi 使用 API 的 OpenAPI 标准为所有 API 生成 schema

schema

  • 是对事物的一种定义或描述
  • 它并非具体的实现代码,而只是抽象的描述
  • 后面会详说

API Schema

  • OpenAPI 是一种规定如何定义 API Schema 的规范
  • 定义的 OpenAPI Schema 将包括 API 路径,以及它们可能使用的参数等等
  • 比如:这个 API 的作用是什么,需要必传哪些参数,请求方法是什么

Data Schema

  • 指的是某些数据比如 JSON 的结构
  • 它可以表示 JSON 的属性及其具有的数据类型
  • 比如:某个属性的数据类型是什么,有没有默认值,是不是必填,作用是什么

JSON Schema

  • OpenAPI 会为 API 定义 API Schema,一般会包括 API 发送和接收的数据的定义,比如:发送的数据的类型、是否必填
  • 这些定义会以 JSON数据格式展示出来,所以都会称为 JSON Schema

查看 openapi.json

原始的 OpenAPI Schema,其实它只是一个自动生成的包含了所有 API 描述的 JSON 数据结构

http://127.0.0.1:8000/openapi.json 

拆分代码详解

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"message": "Hello World"}

将上面最简单的栗子代码进行拆开详解

第一步:导入 FastAPI

from fastapi import FastAPI
  • FastAPI 是一个为 API 提供了所有功能的 Python 类,必写就对了
  • FastAPI 是直接从 Starlette 继承的类,可以通过 FastAPI 使用所有的 Starlette 的功能

第二步:创建一个 FastAPI 实例

app = FastAPI()
  • app 就是 FastAPI 类的一个实例对象啦
  • 重点:app 将是创建所有 API 的主要交互对象
  • 要点:uvicorn 执行命令时也会用到 app
uvicorn main:app --reload

app 变量名换一下呢?

from fastapi import FastAPI

my_awesome_api = FastAPI()

@my_awesome_api.get("/")
async def root():
return {"message": "Hello World"}

那么用 uvicorn 运行命令时也需要换

uvicorn main:my_awesome_api --reload

第三步:创建一个路径操作

路径

  • 指的是 URL 中从第一个 / 起的后半部分,即常说的 path
  • 比如:https://example.com/items/foo 的路径就是/items/foo
  • 路径也称为:端点、路由

操作

就是 HTTP 请求方法

  • POST

  • GET

  • PUT

  • DELETE

  • OPTIONS

  • HEAD

  • PATCH

  • TRACE

在 HTTP 协议中,可以使用以上的其中一种(或多种)「方法」与每个路径进行通信

遵守 RESTFul 风格的话

通常使用:

  • POST:创建数据
  • GET:读取数据
  • PUT:更新数据
  • DELETE:删除数据

定义一个路径操作装饰器

@app.get("/")

有两点含义

  • 请求路径为 /
  • 使用 get 请求

其他请求方法的装饰器

  • @app.post()
  • @app.put()
  • @app.delete()
  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

第四步:定义路径操作函数

async def root():
  • 这就是一个普通的 Python 函数
  • 每当 FastAPI 接收一个使用 GET 方法访问路径为  / 的请求时这个函数会被调用
  • 在这个例子中,它是一个 async 函数(异步处理函数,后面会细说)
# 也可以不加 async,就是个常规函数
def root():

第五步:函数返回内容

return {"message": "Hello World"}
  • 可以返回一个 dict、list,也可以是 str、int 单个值
  • 还可以返回 Pydantic 模型(后面详解)
  • 还可以是其他会自动转换为 JSON 的对象和模型(包括 ORM 对象等)

FastAPI 入门总结

编写一个最简单的 FastAPI 应用程序五部曲

  1. 导入 FastAPI
  2. 创建一个 app 实例
  3. 编写一个路径操作装饰器,如 @app.get("/")
  4. 编写一个路径操作函数,如  def root(): ...
  5. 运行开发服务器,如  uvicorn main:app --reload

FastAPI(2)- 快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. Vue.js 快速入门

    什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...

随机推荐

  1. [解决方案]docker: Error response from daemon: OCI runtime create failed

    错误原因 在新服务器上安装好docker后,发现无法运行,经常一顿搜索后,发现是docker安装的版本过高,最新版本docker-18.06 的核心好像没有经过充分的测试就发布了. 导致一运行,就提示 ...

  2. Java工具包之-Guava

    https://blog.csdn.net/zmx729618/article/details/78540026 https://my.oschina.net/realfighter/blog/349 ...

  3. MySQL-11-存储引擎

    存储引擎简单介绍 存储引擎:相当于Linux文件系统,只不过比文件系统强大 功能 数据读写 数据安全和一致性 提高性能 热备份 自动故障恢复 高可用方面支持 存储引擎种类 InnoDB MyISAM ...

  4. SpringCloud升级之路2020.0.x版-15.UnderTow 订制

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Spri ...

  5. 004 Ethernet(以太网)详解

    一.以太网 以太网是一种计算机局域网技术.IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线.电子信号和介质访问层协议的内容. 以太网有两类:第一类是经典以太网,第 ...

  6. Kurento实战之四:应用开发指南

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Docker搭建Svn服务器

    一.下载镜像 # 搜索镜像 docker search svn # 下载镜像 docker pull garethflowers/svn-server 二.启动镜像 # 编辑配置文件 vim dock ...

  8. 软件研发中也有5S 管理?

    在精益生产中,价值流是贯穿生产全程的关键要素,标准化作业是实现生产线同步的关键工具,而生产现场的5S 管理则是管理一切生产要素的基础,所以我们将5S 称为精益的基础并不为过.5S 管理不仅可以应用到车 ...

  9. webapp网络定位

    1 <script> 2 var x=document.getElementById("demo"); 3 function getLocation() 4 { 5 i ...

  10. Javascript - Vue - webpack + vue-cil

    cnpm(node package manager)和webpack模块 npm是运行在node.js环境下的包管理工具(先安装node.js,再通过命令 npm install npm -g 安装n ...