Python 快速使用 REST API-Python教程

资源魔 38 0

比来不断正在钻研一个新的 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仅被界说为一个不QueryPath的整数;这象征着它将正在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使用问题

抱歉,评论功能暂时关闭!