FASTAPI快速入门

Posted 海里的鱼2022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FASTAPI快速入门相关的知识,希望对你有一定的参考价值。

1. why?-FASTAPI的优势

对比flask, FASTAPI更新,也意味着参考项目更少,但是性能是选择它的重要原因,看官方文档的介绍: 

关键特性:

  • 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

2. 安装及环境准备

很简单:

pip install fastapi

pip install uvicorn

就完成了基本的环境安装,注意,要求是python3.7以上

3. 第一个例子helloworld

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return "Hello": "World"


@app.get("/items/item_id")
def read_item(item_id: int, q: Optional[str] = None):
    return "item_id": item_id, "q": q

运行,查看:

fastAPI-tutorial> uvicorn helloworld:app --reload
INFO:     Will watch for changes in these directories: ['D:\\\\虚拟仿真\\\\fastAPI-tutorial']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [16616] using statreload
INFO:     Started server process [17880]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

 访问网页

带参数:

 带参数传递:

reload自动重载功能很方便, 修改代码的时候,不用终止服务再重新打开。

 4. FASTAPI为API而生

通过以上代码创建了一个具有以下功能的 API:

  • 通过 路径 / 和 /items/item_id 接受 HTTP 请求。
  • 以上 路径 都接受 GET 操作(也被称为 HTTP 方法)。
  • /items/item_id 路径 有一个 路径参数 item_id 并且应该为 int 类型。
  • /items/item_id 路径 有一个可选的 str 类型的 查询参数 q

可以通过在继承的swaggerUI查看自动生成的API文档

http://127.0.0.1:8000/docs

 

 可选的文档

可选的 API 文档

访问 http://127.0.0.1:8000/redoc

 5. 增加put接口,用API测试工具进行接口测试

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
#加入标准的类型声明
class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None

@app.get("/")
def read_root():
    return "Hello": "World"


@app.get("/items/item_id")
def read_item(item_id: int, q: Optional[str] = None):
    return "item_id": item_id, "q": q

@app.put("/items/item_id")
def update_item(item_id: int, item: Item):
    return "item_name": item.name, "item_id": item_id

postman 登录账号忘了, 顺便尝试下大火的ApiPost工具

ApiPost - API 文档、调试、Mock、测试一体化协作平台

测试GET接口

测试PUT接口

 

以上是关于FASTAPI快速入门的主要内容,如果未能解决你的问题,请参考以下文章

fastapi异步web框架入门

FastApi快速构建一个web项目

FastAPI框架快速构建高性能的api服务

Fastapi Admin,快速搭建基于fastapi与tortoise-orm的管理后台

基于FastAPI和Docker的机器学习模型部署快速上手

FastAPI 快速搭建一个REST API 服务