1、安装FastAPI

  • 安装fastapiunicorn模块,unicorn可以作为服务器
pip install fastapi -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install unicorn -i https://pypi.tuna.tsinghua.edu.cn/simple

2、启动一个最简单的例子

# filename: main.py
from fastapi import FastAPI
app = FastAPI()

@app.get("/")
async def root():
	return {"message": "Hello, world!"}
  • 命令行中使用命令unicorn main:app --reload启动服务,命令讲解
  • main
  • app
  • --reload
  • 浏览器中访问:http://127.0.0.1:8000可以查看到如下内容

3、两种查看接口文档的方法

  • 查看交互式API文档:http://127.0.0.1:8000/docs
  • fastapi调用深度学习模型 fastapi 教程_JSON

  • 第二种:http://127.0.0.1:8000/redoc
  • fastapi调用深度学习模型 fastapi 教程_JSON_02

4、OpenAPI

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

schema

  • 是对事物的一种定义或描述
  • 不是具体的实现代码,只是抽象的描述
  • 大概是这样的
from pydantic import BaseModel, Schema
class Item(BaseModel):
	name: str
	description: str = Schema(None, title="the description of the item", max_length=30)
	...
	...

API Schema

  • OpenAPI是一种规范,它规定如何定义API Schema
  • 定义OpenAPI Schema将包括API路径,以及它们可能使用的参数等等
  • 比如:

Data Schema(??)

  • 指的是某些数据,比如JSON的结构
  • 它可以表示JSON的属性及其具有的数据类型
  • 比如:

JSON Schema

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

原始的OpenAPI Schema

  • 通过http://127.0.0.1:8000/openapi.json查看,原始的OpenAPI Schema只包含了所有的JSON数据结构的API描述
{
	"openapi": "3.0.2",
	"info": {
		"title": "FastAPI",
		"version": "0.1.0"
	},
	"paths": {
		"/": {
			"get": {
				"summary": "Root",
				"operationId": "root__get",
				"responses": {
					"200": {
						"description": "Successful Response",
						"content": {
							"application/json": {
								"schema": {}
							}
						}
					}
				}
			}
		}
	}
}

5、详解上面的那个例子

# FastAPI是一个为API提供所有功能的PYTHON类
# FastAPI直接从Starlette继承的类,可以通过FastAPI使用Starlette的功能
from fastapi import FastAPI

# app是FastAPI类的一个实例
# uvicorn启动时会用到这个app
app = FastAPI()

# 创建一个路径操作
@app.get("/")
async def root():  # 定义路径操作函数
	# return: 函数返回内容
    return {"message": "hello, world!"}

创建一个路径操作

  • 路径:指的是URL从第一个/起的后半部分,也就是常说的path,也称为端点 路由
  • 操作:就是请求方式,可以使用POST GET PUT DELETE OPTIONS HEAD PATCH TRACE 中的任意一种方式与每个路径进行通信
  • 遵循RESTFul风格的话,一般:
  • POST 创建数据
  • GET 获取数据
  • PUT 更新数据
  • DELETE 删除数据
  • 定义一个路径操作的装饰器:@app.get("/")

定义路径操作函数

  • 该函数其实就是一个普通Python函数
  • 每当FastAPI接收到一个使用GET方法访问路径/的请求时,就会调用root()函数
  • async表示异步处理函数