比来不断正在钻研一个新的 Python 言语的API,正在一名共事的倡议下,咱们决议应用 Fastapi 作为咱们的框架。
Fastapi是一个基于python的框架,该框架激励应用Pydantic以及OpenAPI(之前称为Swagger)进行文档体例,应用Docker进行疾速开发以及部署和基于Starlette框架进行的简略测试。
它提供了许多益处,例如主动OpenAPI验证以及文档体例,而无需增加不用要的收缩。我以为,正在没有提供任何内置性能与提供太多内置性能之间获得很好的均衡。
入门
装置 fastapi 以及 ASGI 效劳器(例如uvicorn):
确保您应用的是Python 3.6.7+ 假如 pip
以及python
给您python 2版本,则可能必需应用 pip3
以及 python3
。另外,请查看我对于python入门的文章。
pip install fastapi uvicorn
并正在main.py
文件中增加旧的“ hello world”:
from fastapi import FastAPI app = FastAPI() @app.get("/") def home(): return {"Hello": "World"}
运转开发
而后运转以进行开发,能够运转uvicorn main:app --reload
这就是简略效劳器要做的全副!如今您能够反省 //localhost:8000/ 以查看“主页”。并且,如您所见,JSON呼应“失常工作”!您还能够经过 //localhost:8000/docs 收费取得Swagger UI。
验证
如前所述,很容易验证数据(并为承受的数据格局天生Swagger文档)。只要从fastapi增加Query
导入,而后应用它来强迫验证:
from fastapi import FastAPI, Query @app.get('/user') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0) ): return { 'user_id': user_id }
第一个参数...
是默许值,假如用户没有提供值则提供该默许值。假如设置为None
,则不默许值,而且该参数是可选的。为了不默许值而且该参数是强迫性的,请应用Ellipsis ,或...
替代。
假如运转此代码,则会正在swagger UI上主动看到更新:
Swagger UI容许您查看新的/ user路由并应用特定的用户ID进行申请
假如您输出任何用户ID,您会看到它会主动为您执行申请,例如 //localhost:8000/user?user_id=1。正在页面中,您只能看到回显了用户ID!
假如要改成应用门路参数(以使其为 /user/1
,则只要输出并应用Path
而没有是Query
。也能够连系二者
Post 道路
假如您有POST
路由,则只要界说输出便可
@app.post('/user/update') async def update_user( *, user_id: int, really_update: int = Query(...) ): pass
正在这类状况下,您能够看到user_id
仅被界说为一个不Query
或Path
的整数;这象征着它将正在POST申请注释中。假如您承受更复杂的数据构造,例如JSON数据,则应钻研申请模子。
申请以及呼应模子
您能够应用Pydantic模子记载并申明具体的申请以及呼应模子。这不只能够让您领有一切模子的主动OpenAPI文档,并且还能够验证申请模子以及呼应模子,以确保输出的任何POST数据都是正确的,而且前往的数据也合乎该模子。
只要像这样申明模子:
from pydantic import BaseModel class User(BaseModel): id:: int name: str email: str
而后,假如您心愿将用户模子作为输出,则能够执行如下操作:
async def update_user(*, user: User): pass
或许,假如您要将其用作输入:
@app.get('/user') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0), response_model=User ): my_user = get_user(user_id) return my_user
路由以及合成更年夜的API
您能够应用APIRouter
将api合成为路由。例如,我曾经正在我的 API 中找到了这个app / routers / v1 / __ init __。py
from fastapi import APIRouter from .user import router as user_router router = APIRouter() router.include_router( user_router, prefix='/user', tags=['users'], )
而后您能够正在app / routers / v1 / user.py
中应用下面的用户代码-只要导入APIRouter
并应用@ router.get('/')< aaaa>
而没有是 @ app.get('/ user')
。它会主动路由到 / user /
,由于该路由是绝对于前缀的。
from fastapi import APIRouter router = APIRouter() @router.get('/') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0), response_model=User ): my_user = get_user(user_id) return my_user
最初,要正在使用顺序中应用一切v1
路由器,只要将main.py
编纂为:
from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router( v1.router, prefix="/api/v1" )
您能够经过这类形式随便链接路由器,从而容许您拆分年夜型使用顺序并领有版本化的API。
Dockerizing and Deploying
Fastapi 的作者使出人意料的轻松之一就是 Dockerizing!默许的Dockerfile
是2行!
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY ./app /app
能否想经过主动从新加载进行 Dockerize 开发?这是我正在撰写文件中应用的秘方:
version: "3" services: test-api: build: .. entrypoint: '/start-reload.sh' ports: - 8080:80 volumes: - ./:/app
这会将以后目次挂载为app
并将正在任何更改时主动从新加载。您可能还想将app / app
用于更年夜的使用顺序。
有用的网址
一切这些信息都来自 Fastapi网站,该文档具备超卓的文档,我激励您浏览。别的,作者正在 Gitter 上十分活泼并乐于助人!
论断
就是这样-我心愿本指南对您有所协助,而且您会像我同样喜爱应用 Fastapi。
保举教程:Python教程
以上就是Python 疾速应用 REST API的具体内容,更多请存眷资源魔其它相干文章!
标签: Python python教程 python编程 python使用问题
抱歉,评论功能暂时关闭!