No-as-a-Service — API для тех, кто устал говорить «нет»
Знакомая ситуация? Пятница, пять вечера, вы уже мысленно допиваете свой смузи, а к вам подкрадывается менеджер с просьбой «посмотреть одну маааленькую задачку». Или друг в очередной раз зовет помочь с его «гениальным стартапом», который выглядит как Uber для выгула хомячков. Сказать «да» — значит подписаться на бессонные выходные. Сказать «нет» — прослыть букой и эгоистом.
Кажется, разработчик под ником hotheadhacker столкнулся с этой дилеммой столько раз, что решил автоматизировать процесс. Так на свет появился No-as-a-Service — микросервис, который делает ровно одну вещь, но делает ее с юмором и стилем: генерирует причины для отказа.
Что это такое и зачем оно нужно?
No-as-a-Service (NaaS) — это до смешного простой API, который по одному GET-запросу возвращает случайную причину для отказа. Никакой аутентификации, никаких сложных эндпоинтов. Просто, как curl, и полезно, как умение вовремя закрыть ноутбук.
Зачем это нужно разработчику? Ну, кроме очевидного развлечения, у проекта есть несколько интересных применений:
- Заглушки и моки. Вместо скучного «WIP» или «Coming soon» на нереализованной фиче можно выводить остроумный отказ от API.
- Боты для чатов. Представьте Slack-бота, который на каждое упоминание
@hereв нерабочее время отвечает фразой вроде: «Боюсь, это нарушит мой астральный баланс». - Забавные страницы ошибок. Почему бы не сделать страницу 403 Forbidden чуть более человечной и менее пугающей?
- Обучение и пет-проекты. Это идеальный пример минималистичного API. Хотите показать новичку, как работать с
fetch? Дайте ему этот эндпоинт.
Как это работает?
Вся магия сводится к одному простому запросу. Открываете терминал и пишете:
curl https://naas.isalman.dev/no
В ответ прилетает JSON с одной-единственной парой ключ-значение:
{
"reason": "This feels like something Future Me would yell at Present Me for agreeing to."
}
Перевод: «Чувствую, что Будущий Я будет кричать на Нынешнего Меня за то, что я на это согласился».
Или вот еще вариант:
{
"reason": "My cat said no."
}
Перевод: «Мой кот сказал нет».
В базе проекта более 1000 подобных перлов на английском языке — от вполне реалистичных до совершенно абсурдных. Лимит — 120 запросов в минуту с одного IP, чего более чем достаточно для любых экспериментов.
Заглянем под капот
Самое прекрасное в этом проекте — его простота. Если вы откроете репозиторий, то увидите, что вся архитектура — это:
index.js: Крошечный сервер на Express.js.reasons.json: Огромный JSON-файл, где и хранятся все сокровища — те самые 1000+ причин для отказа.package.json: Всего две зависимости —expressиexpress-rate-limit.
Никаких баз данных, фреймворков или сложной логики. Это отличный пример того, как можно сделать полезный и популярный сервис (у проекта тысячи звезд на GitHub!) с минимальными усилиями.
Хочу себе такой же!
Автор позаботился и о тех, кто захочет запустить сервис у себя. Процесс занимает меньше минуты:
- Клонируем репозиторий:
git clone https://github.com/hotheadhacker/no-as-a-service.git cd no-as-a-service - Устанавливаем зависимости:
npm install - Запускаем сервер:
npm start
Готово! Ваш личный генератор отмазок работает на http://localhost:3000/no. Можно добавить в reasons.json свои любимые фразы и использовать в локальных проектах.
Кто уже использует «Нет-как-Сервис»?
Проект оказался настолько заразительным, что у него появились последователи и форки. Например:
- no-as-a-service-rust: Реализация того же API, но на языке Rust.
- NoAsAnApp: Простое нативное Android-приложение, которое показывает случайный отказ по нажатию кнопки.
- Gerador de Frases Aleatórias: Бразильский форк на Python с фразами на португальском и веб-интерфейсом.
Это доказывает, что хорошая и забавная идея быстро находит отклик в сообществе.
No-as-a-Service — это не тот инструмент, который перевернет вашу карьеру или поможет написать код без багов. Но это блестящий пример того, каким должен быть хороший пет-проект: простой, сфокусированный, решающий одну (пусть и шуточную) проблему и приносящий удовольствие как создателю, так и пользователям.
Кому стоит обратить внимание:
- Новичкам: чтобы посмотреть на устройство простого, но законченного API.
- Опытным разработчикам: чтобы вдохновиться и, возможно, создать свой микросервис с блэкджеком и... ну, вы поняли.
- Всем остальным: чтобы просто улыбнуться и пополнить свой арсенал вежливых (и не очень) отказов.
Так что в следующий раз, когда вас попросят «быстренько поправить кнопочку», вы знаете, какой curl отправить в ответ.
