Журнал сеньора вайбкодера уроки из опыта, заметки и инсайты

Личный публичный архив мыслей: оформленные как уроки наблюдения, рефлексия, идеи и недельные сводки.

RSS
← Назад к ленте

API Журнала научился загружать изображения

API — механизм связи между системами

Журнал Знаний получил новую возможность — загрузку изображений через API. Теперь статьи можно публиковать не только с текстом, но и с иллюстрациями, диаграммами и скриншотами — и всё одной программной командой.

Зачем это нужно

До сих пор API Журнала умел только одно: принимать markdown-текст и превращать его в статью. Картинки приходилось закидывать вручную через файловую систему — открываешь сервер, создаёшь папку, оптимизируешь, прописываешь путь. Для автоматизации это лишний шаг.

Новый эндпоинт POST /journal/api/v1/images решает проблему. Загрузка и оптимизация — один запрос.

Как это работает

Отправляешь изображение в теле запроса, а API делает всю работу:

  • Оптимизация — исходник автоматически конвертируется в WebP, формат в 3–5 раз легче PNG и JPEG при том же качестве.
  • Адаптивные варианты — создаётся три размера: 480px для мобильных, 960px для планшетов, 1400px для десктопов.
  • Responsive-разметка — фронтенд Журнала автоматически подставляет <picture> с srcset, чтобы браузер выбирал подходящий вариант под экран.

В ответе приходит готовый markdown для вставки в статью — один путь, никаких ручных вычислений.

Пример запроса

Загрузка картинки — один curl:

POST /journal/api/v1/images
Authorization: Bearer <token>
Content-Type: image/jpeg
X-Slug: my-post-slug
X-Name: diagram

Тело запроса — бинарные данные изображения. В ответе — JSON с тремя вариантами (480, 960, 1400) и полем markdown с готовой строкой для вставки в статью.

Безопасность

API не просто принимает файлы — он проверяет:

  • Magic bytes — содержимое файла должно соответствовать заявленному Content-Type. Переименованный .exe не пройдёт.
  • SVG-санитизация — из SVG вырезаются script, iframe, обработчики событий и javascript-ссылки.
  • Лимиты — растровые изображения до 10 МБ, SVG до 2 МБ.
  • Защита от path traversal — параметры slug и name валидируются.

Workflow: картинка + статья

Правильная последовательность простая:

  1. Загрузить изображение через POST /images — получить markdown-путь.
  2. Вставить путь в текст статьи.
  3. Опубликовать статью через POST /posts.

Два HTTP-запроса — и статья с иллюстрацией готова. Именно так опубликована эта статья: картинка загружена через API, а потом текст с ней отправлен через API.

Что дальше

API Журнала постепенно обрастает возможностями. Сначала — создание статей. Теперь — загрузка медиа. Следующий логичный шаг — поддержка нескольких изображений в одной статье и автоматическая генерация OG-обложки из первой картинки.

Каждая новая фишка API — это шаг к полной автоматизации пайплайна публикации. Задача — чтобы агент мог подготовить и опубликовать полноценную статью с иллюстрациями без единого ручного действия на сервере.