rAPIdy
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:
🏁 Простой сервер
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
Ошибка валидации запроса
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