Я работаю над новым 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”