Read-only API с JSON данными

Когда: 29 июня 2023

Навеяно наблюдениями за парой проектов. Парой эдаких стартапов, которые хотят быть классными, современными, привлекательными для соискателей. С ИНТЕРЕСНЫМИ ЗАДАЧАМИ. Короче, вот это все, что обычно пытаются впихнуть HRы в свои презентации, когда хантят.

Кубер ради 10 HTML страниц уже не шутка, а вполне себе реальность. Надо же оправдывать шильдик DevOps в конце-то концов, верно? Но речь не об этом.

Вместо того, чтобы мокать read-only API в каком-нибудь микрофреймворке, я предпочитаю взять обычный nginx.

Способ простой как валенок. Не требует программирования и стоит три копейки. Скажем, справочные данные отдавать.

Допустим, что мы хотим иметь API раут вида: /api/v1/directories/cities, который отдает данные о городах. Для простоты, мы можем создать структуру каталогов в нашем хосте. Прям берем и делаем:

# У вас, разумеется, структура будет другая, но смысл не изменится
mkdir -p /var/www/megaservice.com/api/v1/directories/cities

Далее, мы добавляем немного магии заголовков в конфигурацию хоста в nginx.

location /api {
    add_header Content-Type application/json;
}

Перезагружаем nginx и проверяем:

# Запрос
curl -I http://megaservice.com/api/v1/directories/cities

# Ответ
HTTP/2 200
server: nginx/1.18.0 (Ubuntu)
date: Tue, 29 Jun 2023 12:36:07 GMT
content-type: application/octet-stream
content-length: 3375
last-modified: Tue, 29 Jun 2023 12:26:50 GMT
etag: "64a4100a-d2f"
content-type: application/json
accept-ranges: bytes

“И это все?” — спрашивает удивленный читатель. Да, епта. Это все, что нам нужно. Никаких ноджиэсов, никаких дополнительных сервисов и прочей хуеты.

Директории создает руками, туда складываем нужные там файлы с данными в формате json. Накидываем Content-Type в ответ и вуаля — у нас работающий статический API с данными.