目录
前言:
1、官网信息
2、环境安装
3、写个demo
4、关注的几个技术点
4.1 路径参数数据接收
4.2 查询参数数据接收
4.3 post 数据接收
4.4 header数据接收
5、总结
5.1 没有使用门槛
5.2 开发效率
5.3 劣势
前言:
写Java好久了,给自己定个小目标,下个项目使用Python做web开发,主要原因是我们的项目用户量不大,而且QPS低,所以可以在不同的业务方案切换,同时体验下Python的开发效率。
在之前的工作中使用过Django,也了解过Flask,不过在其他项目中看到同事使用FastAPI ,今天就体验下,下次直接用在项目中。
1、官网信息
官方文档:FastAPI
文档: https://fastapi.tiangolo.com
源码: GitHub - tiangolo/fastapi: FastAPI framework, high performance, easy to learn, fast to code, ready for production
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
关键特性:
-
快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
-
高效编码:提高功能开发速度约 200% 至 300%。*
- 更少 bug:减少约 40% 的人为(开发者)导致错误。*
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。
2、环境安装
pip install fastapi -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "uvicorn[standard]" -i https://pypi.tuna.tsinghua.edu.cn/simple
直接使用官方的命令,总是timeout,所以直接切换到国内的源,
安装其他的包 也可以用这个方式哦
3、写个demo
我使用的Python是3.8,pycharm社区版。
直接创建一个Python项目就行,然后执行上一步的安装包
拷贝下面的代码到main.py
from typing import Union
from fastapi import Header, FastAPI
from fastapi import FastAPI
import uvicorn# 类似于 app = Flask(__name__)
app = FastAPI()# 绑定路由和视图函数
@app.get("/")
async def index():return {"name": "香菜"}
# 绑定路由和视图函数
@app.get("/testcookie")
async def index(token: Union[str, None] = Header(default=None)):return {"name": token}# 在 Windows 中必须加上 if __name__ == "__main__"
# 否则会抛出 RuntimeError: This event loop is already running
if __name__ == "__main__":# 启动服务,因为我们这个文件叫做 main.py# 所以需要启动 main.py 里面的 app# 第一个参数 "main:app" 就表示这个含义# 然后是 host 和 port 表示监听的 ip 和端口uvicorn.run("main:app", host="0.0.0.0", port=5555)
运行之后
4、关注的几个技术点
4.1 路径参数数据接收
这个还是挺简单的
from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id):return {"item_id": item_id}
4.2 查询参数数据接收
声明不属于路径参数的其他函数参数时,它们将被自动解释为"查询字符串"参数
from fastapi import FastAPIapp = FastAPI()fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):return fake_items_db[skip : skip + limit]
查询字符串是键值对的集合,这些键值对位于 URL 的 ?
之后,并以 &
符号分隔。
例如,在以下 url 中:
http://127.0.0.1:8000/items/?skip=0&limit=10
...查询参数为:
skip
:对应的值为0
limit
:对应的值为10
由于它们是 URL 的一部分,因此它们的"原始值"是字符串。
4.3 post 数据接收
定义数据模型,当一个模型属性具有默认值时,它不是必需的。否则它是一个必需属性。将默认值设为 None
可使其成为可选属性。
from typing import Unionfrom fastapi import FastAPI
from pydantic import BaseModelclass Item(BaseModel):name: strdescription: Union[str, None] = Noneprice: floattax: Union[float, None] = Noneapp = FastAPI()@app.post("/items/")
async def create_item(item: Item):return item
4.4 header数据接收
from typing import Unionfrom fastapi import FastAPI, Headerapp = FastAPI()@app.get("/items/")
async def read_items(user_agent: Union[str, None] = Header(default=None)):return {"User-Agent": user_agent}
4.5 cookie数据接收
from typing import Unionfrom fastapi import Cookie, FastAPIapp = FastAPI()@app.get("/items/")
async def read_items(ads_id: Union[str, None] = Cookie(default=None)):return {"ads_id": ads_id}
5、总结
5.1 没有使用门槛
fastAPI 对于我来说并没有太多的新鲜感,大部分的使用方式也和Springboot很像,没什么新鲜感,带来的好处就是没有使用门槛。
5.2 开发效率
可能对于我来说还真没有多少提升,但是还是想试一试
5.3 劣势
看到fastAPI使用了Pydantic 模型来声明请求体,并能够获得它们所具有的所有能力和优点。
这个需要学习,也不知道会有多少学习成本,不熟。
本书内容系统、全面,案例丰富,讲解浅显易懂,既适合Python零基础入门读者学习,也适合作为广大中职、高职院校相关专业的教材用书。
京东购买链接:https://item.jd.com/13951968.html