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