FastAPI(2)- 快速入门
安装 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 应用程序五部曲
- 导入 FastAPI
 - 创建一个 app 实例
 - 编写一个路径操作装饰器,如 @app.get("/")
 - 编写一个路径操作函数,如 def root(): ...
 - 运行开发服务器,如 uvicorn main:app --reload
 
FastAPI(2)- 快速入门的更多相关文章
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
		
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
 - SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
		
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
 - 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
		
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
 - 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
		
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
 - 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
		
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
 - Mybatis框架 的快速入门
		
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
 - grunt快速入门
		
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
 - 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
		
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
 - 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
		
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
 - Vue.js 快速入门
		
什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...
 
随机推荐
- LeetCode通关:数组十七连,真是不简单
			
分门别类刷算法,坚持,进步! 刷题路线参考:https://github.com/chefyuan/algorithm-base https://github.com/youngyangy ...
 - Python3中dict字典的相关操作函数
			
字典对象的内建函数 1. clear() 清空字典. 例: >>> a = {1:3, 2:4} >>> a.clear() >>> a {} 2 ...
 - [TensorFlow2.0]-手写神经网络实现鸢尾花分类
			
本人人工智能初学者,现在在学习TensorFlow2.0,对一些学习内容做一下笔记.笔记中,有些内容理解可能较为肤浅.有偏差等,各位在阅读时如有发现问题,请评论或者邮箱(右侧边栏有邮箱地址)提醒. 若 ...
 - 在线文本的编辑框——kindeditor富文本编辑的使用
			
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
 - String s="a"+"b"+"c",到底创建了几个对象?
			
首先看一下这道常见的面试题,下面代码中,会创建几个字符串对象? String s="a"+"b"+"c"; 如果你比较一下Java源代码和反 ...
 - 寻找写代码感觉(二)之 Spring Boot  项目属性配置
			
一.前言 写代码就和恋爱一样,有反馈就要趁热打铁,搞完了项目搭建,接下来就来搞搞项目配置. 二.IDEA设置 1.编码配置 这里所说的就是代码的编码格式,你可以不设置,但是可能要面临的是,很多未知的麻 ...
 - Blazor+Dapr+K8s微服务之服务调用
			
1.1 Dapr环境配置 1.1.1 在开发机安装Docker Desktop并启用Kubernetes 安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和 ...
 - sqli-labs lesson 38-45
			
从page3也就是less 38开始进入了堆叠注入(stacked injection) stacked injection: 简单来说就是进行SQL注入时注入了多条语句.因为之前我们都是只进行过注入 ...
 - BUUCTF刷题系列(2)5.27日记
			
CTF-Bugku-安卓篇1signin Writeup Bugku安卓部分第一题,第七届山东省大学生网络安全技能大赛的题目,属于Android逆向分析.(常用工具:安卓模拟器.JEB.Cyberch ...
 - NOIP 模拟 6 考试总结
			
T1 这道题是一道裸的暴力,考场写挂了 \(5pts\) 原因竟是忘了删注释,难受 题解 T2 这道题是一道启发式合并,没想出来,拿了个暴力分跑了 题解 T3 这道题就是一道数学期望,想出来就水得很, ...