API для публикаций
Бэкенд для блога в духе Medium. Статьи, теги, комментарии и лайки; почтовые сценарии и синхронизация счётчиков вынесены в Celery-воркер, а не в запрос.
Что в нём есть
Статьи со слагами, теги, поиск, лента и лайки от каждого пользователя. Комментарии с авторизацией, которая отличает автора комментария от автора статьи. JWT-аутентификация с access- и refresh-токенами, подтверждение почты и сброс пароля по шестизначным кодам.
На что стоит посмотреть
В запросе не происходит ничего медленного. Отправка почты уходит в Celery. Туда же — периодическая задача, которая переносит счётчики просмотров и лайков из Redis в Postgres. Пользователь, ждущий HTTP-ответа, не должен ждать SMTP-сервер.
Счётчики сначала живут в Redis. Та же логика, что и в стриминговом проекте: счётчик, который увеличивается при каждом чтении, не место в реляционной базе на горячем пути.
Ограничение частоты стоит на эндпоинтах аутентификации — то есть там, где его имеет смысл атаковать, — а не равномерно по всему API, где оно в основном мешает честным клиентам.