diff --git a/FastAPI-Integration.md b/FastAPI-Integration.md new file mode 100644 index 0000000..5b8d187 --- /dev/null +++ b/FastAPI-Integration.md @@ -0,0 +1,47 @@ +# Интеграция с FastAPI + +## Когда использовать + +Эта библиотека удобна для API-сервисов, потому что функция `download` возвращает MP4-байты в памяти, а не только путь к файлу. + +## Базовый пример + +```python +from fastapi import FastAPI, HTTPException +from fastapi.responses import Response + +from yt_shorts_downloader import download +from yt_shorts_downloader.exceptions import YtShortsDownloaderError + +app = FastAPI() + + ++@app.get('/download') ++def download_short(url: str) -> Response: ++ try: ++ video = download(url, 'cookies.txt') ++ except YtShortsDownloaderError as exc: ++ raise HTTPException(status_code=400, detail=str(exc)) from exc ++ ++ return Response( ++ content=video.content, ++ media_type=video.media_type, ++ headers={ ++ 'Content-Disposition': f'attachment; filename="{video.filename}"', ++ }, ++ ) +``` + +## Что важно учитывать + +- `download` создаёт временную директорию и сам читает итоговый MP4 в память +- для больших видео нужно учитывать объём RAM на воркере +- ошибки библиотеки лучше конвертировать в понятные HTTP-ответы +- cookie-файл должен быть недоступен извне и не должен попадать в репозиторий + +## Рекомендации для production + +- валидируйте входной URL на уровне API-контракта +- добавьте rate limiting на endpoint скачивания +- логируйте текст `str(exc)` для диагностики ошибок авторизации и yt-dlp +- храните cookie-файл вне публичных директорий и вне docker image layer history, если это возможно