安装 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. DL基础补全计划(五)---数值稳定性及参数初始化(梯度消失、梯度爆炸)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  2. DHCP\PXE+kickstart网络装机平台

    DHCP概述及原理: ​ DHCP地址分配的四次会话 ​ DISCOVERY -****OFFER -REQUEST -ACK 服务端基本概念: 租期:允许客户机组用IP地址的时间期限,单位为秒 作用 ...

  3. VIM正则表达式的懒惰模式

    例如有如下一段话: Another whale sighting occurred on , <2004>. AK and HI 要匹配每一个<...>,如果用<.> ...

  4. MySQL-15-主从复制

    企业高可用性标准 1 全年无故障率(非计划内故障停机) 99.9% ----> 0.001*365*24*60=525.6 min 99.99% ----> 0.0001*365*24*6 ...

  5. 通过Mssql提权的几种姿势

    本文记录针对SQL Server数据库,在拿到shell之后进行提权的5种方法. 一. xp_cmdshell提权 上面的数据库连接需要知道sa的密码,连接之后,在下面的sql命令处执行: exec ...

  6. <span> 标签与<p>标签的区别

    p标签指一个段落,是块级元素,有换行效果:span是行内元素,一般单独修饰文字: span 标签可以放在p标签里,p标签不应该放在span标签里:

  7. kubebuilder实战之一:准备工作kubebuilder实战之一:准备工作

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

  8. TaskAwaiter<TResult> 结构

    参考网址:https://docs.microsoft.com/zh-cn/dotnet/api/system.runtime.compilerservices.taskawaiter-1?view= ...

  9. DotNetCore深入了解:HTTPClientFactory类

    一.HttpClient使用 在C#中,如果我们需要向某特定的URL地址发送Http请求的时候,通常会用到HttpClient类.会将HttpClient包裹在using内部进行声明和初始化,如下面的 ...

  10. BootstrapTable插件的使用 【转】

    一.什么是Bootstrap-table? 在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这 ...