关键词:开发环境|还会|是一个|如何搭建|镜像|服务

应用PythonFastAPI搭建Web服务Fa

  • 浏览: 19

应用 Python FastAPI 搭建 Web 服务

FastAPI 是一个应用 Python 撰写的 Web 架构,还运用了 Python asyncio 库文件全新的提升。文中可能详细介绍如何搭建根据器皿的开发环境,还会展现怎么使用 FastAPI 完成一个中小型 Web 服务。

发展

大家将应用 Fedora 做为基本镜像来构建开发环境,并应用 Dockerfile 为镜像引入 FastAPI、Uvicorn 和 aiofiles 这好多个包。

FROM fedora:32RUN dnf install -y python-pip \ && dnf clean all \ && pip install fastapi uvicorn aiofilesWORKDIR /srvCMD ["uvicorn", "main:app", "--reload"]

在工作中文件目录下储存 Dockerfile 以后,实行 podman 指令搭建器皿镜像。

$ podman build -t fastapi .$ podman imagesREPOSITORY TAG IMAGE ID CREATED SIZElocalhost/fastapi latest 01e974cabe9a 18 seconds ago 326 MB

下边我们可以刚开始建立一个简易的 FastAPI 程序运行,并根据器皿镜像运作。

from fastapi import FastAPIapp = FastAPI()@app.get("/")async def root(): return {"message": "Hello Fedora Magazine!"}

将上边的编码储存到 main.py 文档中,随后实行下列指令运行:

$ podman run --rm -v $PWD:/srv:z -p 8000:8000 --name fastapi -d fastapi$ curl http://127.0.0.1:8000{"message":"Hello Fedora Magazine!"

那样,一个根据 FastAPI 的 Web 服务就跑起来了。因为特定了 --reload 主要参数,一旦 main.py 文档发生了更改,全部运用都是全自动重新加载。你能试着将回到信息内容 "Hello Fedora Magazine!" 改动为其他內容,随后观查实际效果。

能够 应用下列指令终止程序运行:

$ podman stop fastapi

搭建一个中小型 Web 服务

接下去大家会搭建一个必须 I/O 实际操作的程序运行,根据这一程序运行,我们可以见到 FastAPI 本身的特性,及其它在特性上有哪些优点。为简易考虑,大家立即应用 dnf history 指令的輸出来做为这一程序运行应用的数据信息。

最先将 dnf history 指令的輸出储存到文档。

$ dnf history | tail --lines= 3 > history.txt

在上面的指令中,大家应用 tail 去除开 dnf history 輸出內容中没用的表头信息内容。剩下的每一条 dnf 事务管理都包含了下列信息内容:

id:事务管理序号command:事务管理中运作的 dnf 指令date:实行事务管理的日期和时间

随后改动 main.py 文档将有关的算法设计加上进来。

from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class DnfTransaction(BaseModel): id: int command: str date: str

FastAPI 内置的 pydantic 库让你能轻轻松松界定一个数据信息类,在其中的种类注解对数据信息的认证也出示了便捷。

再提升一个涵数,用以从 history.txt 文档中获取数据。

import aiofilesfrom fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class DnfTransaction(BaseModel): id: int command: str date: strasync def read_history(): transactions = [] async with aiofiles.open("history.txt") as f: async for line in f: transactions.append(DnfTransaction( id=line.split("|")[0].strip(" "), command=line.split("|")[1].strip(" "), date=line.split("|")[2].strip(" "))) return transactions

这一涵数中应用了 aiofiles 库,这一库出示了一个多线程 API 来解决 Python 中的文档,因而打开文件或读取文件的情况下不容易堵塞其他对服务器的恳求。

最终,改动 root 涵数,让它回到事务管理目录中的数据信息。

@app.get("/")async def read_root(): return await read_history()

实行下列指令就可以见到程序运行的輸出內容了。

$ curl http://127.0.0.1:8000 | python -m json.tool[{"id": 103,"command": "update","date": "2020-05-25 08:35"},{"id": 102,"command": "update","date": "2020-05-23 15:46"},{"id": 101,"command": "update","date": "2020-05-22 11:32"},....]

小结

FastAPI 出示了一种应用 asyncio 搭建 Web 服务的简易方式,因而它在 Python Web 架构的绿色生态中逐步时兴。要掌握 FastAPI 的其他信息,热烈欢迎查看 FastAPI 文本文档。

文中中的编码能够 在 GitHub 上寻找。

猜你喜欢