Перейти к содержанию

rAPIdy

rAPIdy

Загрузки пакета Версия пакета Поддерживаемые версии Python Лицензия Лицензия Pydantic V1 Pydantic V2

rAPIdy - быстрый, легковесный и современный асинхронный веб-фреймворк, построенный на основе aiohttp и pydantic.


🚀 Почему rAPIdy?

rAPIdy создан для разработчиков, которым нужен быстрый, асинхронный веб-фреймворк, сочетающий производительность aiohttp с простотой и современными возможностями таких фреймворков, как FastAPI.

Простой сервер на rAPIdy:

from rapidy import Rapidy
from rapidy.http import get

@get("/")
async def hello() -> dict[str, str]:
    return {"message": "Hello, rAPIdy!"}

app = Rapidy(http_route_handlers=[hello])


🔥 Ключевые возможности

  • Быстрый и легковесный – минимальные накладные расходы, построен на aiohttp
  • Асинхронный – полностью асинхронный по своей сути
  • Встроенная валидация – использует pydantic для валидации запросов
  • Простой и гибкий – поддерживает как rAPIdy-стиль определения обработчиков, так и традиционные маршруты aiohttp на функциях и классах
  • Поддержка middleware – легко расширяйте функциональность с помощью middleware, включая встроенную валидацию HTTP-параметров (заголовки, куки, параметры пути, параметры запроса и тело запроса).

📦 Установка и настройка

Установите rAPIdy через pip:

pip install rapidy


🏁 Простой сервер

from rapidy import Rapidy
from rapidy.http import post, PathParam, Header, Body

from pydantic import BaseModel, Field

class BodyRequestSchema(BaseModel):
    username: str = Field(min_length=3, max_length=20)
    password: str = Field(min_length=8, max_length=40)

@post('/{user_id}')
async def handler(
        user_id: str = PathParam(),
        host: str = Header(alias='Host'),
        body: BodyRequestSchema = Body(),
) -> dict[str, str]:
    return {'hello': 'rapidy'}

rapidy = Rapidy(
    http_route_handlers=[handler],
)

Успешная валидация запроса

curl -X POST \
-H "Content-Type: application/json" -d '{"username": "User", "password": "myAwesomePass"}' -v \
http://127.0.0.1:8080/111
< HTTP/1.1 200 OK ... {"data": "success"}

Ошибка валидации запроса

curl -X POST \
-H "Content-Type: application/json" -d '{"username": "U", "password": "m"}' -v \
http://127.0.0.1:8080/111
< HTTP/1.1 422 Unprocessable Entity ...
{
    "errors": [
        {
            "loc": ["body", "username"],
            "type": "string_too_short",
            "msg": "Строка должна содержать как минимум 3 символа",
            "ctx": {"min_length": 3}
        },
        {
            "type": "string_too_short",
            "loc": ["body", "password"],
            "msg": "Строка должна содержать как минимум 8 символов",
            "ctx": {"min_length": 8}
        }
    ]
}

Быстрый старт Quickstart