Ну вот, блог постепенно запускается, уже можно писать статьи, комментарии и все такое. Поэтому, я считаю, настало время немного рассказать о том, как это все работает со стороны сервера.
Для сервера я использовал следующий стек: python flask + mongodb.
Развернут блог на heroku. Развернут как два отдельных приложения. Одно для бэкенда, второе для фронта.
Фронт использует Vue ssr (nuxt).
Но в этой статье мы поговорим о том, как работает сервер этого блога.
Начнем!
Я буду вставлять скриншоты кода, чтобы в случае, если Вы захотите повторить это, Вы писали сами и вдумывались в то, что пишете. Иначе будет тупой ctrl-c/ctrl-v. К тому же пока что нет подсветки кода 🙃.
Сначала посмотрим на импорты проекта:
Не вижу смысла что то комментировать. Поэтому двигаем дальше.
Теперь давайте посмотрим на инициализацию всего-всего:
Тут указываются переменные, нужные для корректной работы mongodb, ключ для JWT и настройки CORS.
Далее мы будем говорить о том, как происходит выдача статей и для общего понимания посмотрим на структуру статьи в базе:
_id - это поле генерируемое монгой. Остальное, я думаю, и так понятно. Картинки хранятся внутри самой статьи закодированные base64.
Теперь можно двинуться дальше.
Метод, с которого начинается работа с блогом - метод получения всех статей.
GET /articles[?sort=(new|popular)]
Тут нужно кое-что прояснить. Метод получает дополнительный параметр запроса - sort. Нетрудно догадаться, что он нужен для сортировки либо по дате создания, либо по популярности. Под популярностью статью подразумевается количество просмотров оной.
Следующий метод - это метод получения отдельной статьи
GET /article/:path
Он отдает нам статью из базы данных по ее пути. Путь в моей терминологии - транслитерированный заголовок статьи, в котором все небуквы заменяются на '-'. На английском такая операция называется slugify. Можете написать в комментариях ее название на русском, если знаете.
Собственно, мы пытаемся получить статью по ее path. Если мы ее не находим, с сервера возвращается код 404 и Вы видите ошибку:
В случае, если статья все же найдена, Вы получаете код 200 и саму статью, а ее views автоинкрементируется в базе данных.
Однако в момент, когда Вы переходите на статью Вы получаете не только ее а еще и комментарии к ней. Это возможно благодаря следующему методу:
GET /article/:path/comments
В каждом объекте комментария есть поле article_ref, оно нужно, чтобы соотносить статьи и комментарии к ним. Мы находим все комментарии к статье и сортируем по дате публикации. В случае, если ничего не найдено, нам просто вернется пустой массив.
Вы спросите: но откуда же у статей появляются комментарии? А вот откуда:
POST /article/:path/comments
Это первый POST метод, который я описываю в этой статье. Он нужен нам для создания комментария к определенной статье по ее path. После создания, мы получаем id комментария в его коллекции, который mongodb присваивает автоматически. Потом по этому id мы получаем сам объект комментария, он и возвращается нам на клиент с кодом 200.
Потом приложение просто запускается:
В целях безопасности были упущены методы получения JWT токенов и создания статьи. Простите))))
В этой статье мы рассмотрели как работает API блога, в следующей части из цикла 'Блог изнутри' мы рассмотрим деплой сервера на heroku.
Спасибо за внимание!
ps. Гуру бэкенда, не судите строго, я не из вашего лагеря)))