Рубрики
Без рубрики

Введение в Fastapi Python Framework

Узнайте, как использовать fastapi. Теги с Python, Fastapi, Async, Framework.

Я работаю над новым API на основе Python в последнее время, и по предложению коллеги мы решили использовать fastapi как наши рамки.

Fastapi – это каркас на основе Python, которая поощряет документацию с использованием Pydantic и Openapi (ранее Swagger), быстрое разработка и развертывание с Docker и простыми тестами благодаря структуре Starlette, на которой она основана.

Он обеспечивает множество вкусностей, таких как автоматическое валидация и документация Openapi без добавления грузов ненужденного вкус. На мой взгляд, это хороший баланс между отсутствием каких-либо встроенных функций и обеспечивает слишком много.

Начиная

Установите Fastapi, а сервер ASGI, такой как UVICORN:

* Убедитесь, что вы используете Python 3.6.7+; Если пипс и Python Дайте вам версию Python 2, возможно, вам, возможно, придется использовать PIP3 а также Python3 Отказ В качестве альтернативы Проверьте мой пост на начало работы с Python.

pip install fastapi uvicorn

И добавьте старый добрый «Hello World» в main.py файл:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def home():
    return {"Hello": "World"}

Бег для развития

Затем запустить для разработки, вы можете запустить Увикорн Главная: App --reload

Это все, что вам нужно сделать для простого сервера! Теперь вы можете проверить //localhost: 8000/ чтобы увидеть «домашнюю страницу». Кроме того, как вы можете видеть, ответы JSON «просто работают»! Вы также получаете Ui Swagger в //localhost: 8000/Документы ‘бесплатно’.

Проверка

Как уже упоминалось, легко проверять данные (и генерировать документацию SWARGER для принятых форматов данных). Просто добавьте Запрос Импорт из Fastapi, затем используйте его, чтобы заставить проверку:

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 }

Первый параметр, ... , это значение по умолчанию, предусмотрено, если пользователь не дает значение. Если установлено на Нет , нет по умолчанию, а параметр не является необязательным. Для того, чтобы не иметь по умолчанию и для параметра быть обязательным, Эллипсис или ... используется вместо этого.

Если вы запускаете этот код, вы автоматически увидите обновление на UI SWARGARGE:

SWARGER UI позволяет вам увидеть новый/пользовательский маршрут и запросить его с конкретным пользователем i d

Если вы вводите любые идентификаторы пользователя, вы увидите, что он автоматически выполняет запрос для вас, например, //localhost: 8000/Пользователь? user_id = 1 . На странице вы можете просто увидеть идентификатор пользователя, эхом обратно!

Если вы хотите использовать параметры пути (так что это /user/1 , все, что вам нужно сделать, это импортировать и использовать Путь вместо Запрос . Вы также можете комбинировать два

Пост маршруты

Если у вас был Пост маршрут, вы просто определите такие входы, как так

@app.post('/user/update')
async def update_user(
    *,
    user_id: int,
    really_update: int = Query(...)
):
    pass

Вы можете увидеть в этом случае user_id только что определяется как int без Запрос или Путь ; Это означает, что он будет в телу запроса после запроса. Если вы принимаете более сложные структуры данных, такие как данные JSON, вы должны посмотреть Запрос моделей Отказ

Запрос и реагирование моделей

Вы можете документировать и объявить модели запроса и реагирования до деталей с пидантическими моделями. Это не только позволяет вам иметь автоматическую документацию OpenAPI для всех ваших моделей, но также проверяет как модели запроса, так и реагирования, чтобы убедиться, что любые данные поступили, соответствуют правильности, а также, что данные возвращаются в соответствии с моделью.

Просто объявите свою модель так:

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 Приложение/маршрутизаторы/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'],
)

Затем вы можете использовать код пользователя сверху в Приложение/маршрутизаторы/v1/user.py – просто импортировать APIROUTER и использовать @ Router.get ('/') вместо @ app.get ('/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"
)

Вы можете цепотать маршрутизаторы столько, сколько вы хотите таким образом, позволяя вам разбить большие приложения и версили APIS

Докереное и развертывание

Один из вещей, которые автор Фастапи сделал удивительно легко докеренование! По умолчанию Dockerfile 2 строки!

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7

COPY ./app /app

Хотите доблокировать за разработку с автоматической перезагрузкой? Это секретный рецепт, который я использовал в композированном файле:

version: "3"
services:
  test-api:
    build: ..
    entrypoint: '/start-reload.sh'
    ports:
        - 8080:80
    volumes:
        - ./:/app

Это будет монтировать текущий каталог как приложение и автоматически перезагрузится в любые изменения. Вы также можете использовать приложение/приложение вместо этого для более крупных приложений.

Полезные ссылки

Вся эта информация пришла из Сайт fastapi Имеется отличная документация, и я призываю вас читать. Кроме того, автор очень активно и полезен на Gitter Действительно

Заключение

Вот и теперь – я надеюсь, что это руководство было полезным, и вам нравится использовать fastapi столько, сколько я делаю.

Оригинал: “https://dev.to/errietta/introduction-to-the-fastapi-python-framework-2n10”