FASTAPI快速入门(1)

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.

 访问网页

FASTAPI快速入门(1)_第1张图片

带参数:

FASTAPI快速入门(1)_第2张图片

 带参数传递:

FASTAPI快速入门(1)_第3张图片

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

 FASTAPI快速入门(1)_第4张图片

 可选的文档

可选的 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接口

FASTAPI快速入门(1)_第5张图片

测试PUT接口

 FASTAPI快速入门(1)_第6张图片

你可能感兴趣的:(python,FastAPI)