📅 API для получения производственных календарей РФ (2023–2026) в формате JSON.
🔗 Быстрое, простое и удобное REST API для разработчиков.
После клонирования репозитория статические API файлы будут автоматически сгенерированы при первом запуске:
git clone https://github.com/iposho/holidays-calendar-ru.git
cd holidays-calendar-ru
npm install
npm run dev # Автоматически сгенерирует статические файлы и запустит dev сервер
Все API endpoints обслуживаются статическими JSON файлами в папке public/static-api/
. При изменении данных календаря:
npm run generate-api # Перегенерировать статические файлы
src/data/
- исходные данные календаря (праздники, сокращенные дни)scripts/generate-static-api.js
- генератор статических API файловpublic/static-api/
- сгенерированные статические файлы (игнорируются в Git)API поддерживает различные форматы путей для максимальной совместимости:
# Год
curl "https://calendar.kuzyak.in/api/calendar/2023"
# Месяц (поддерживаются оба формата)
curl "https://calendar.kuzyak.in/api/calendar/2023/01" # zero-padded
curl "https://calendar.kuzyak.in/api/calendar/2023/1" # non-padded
# День (поддерживаются все комбинации)
curl "https://calendar.kuzyak.in/api/calendar/2023/01/05" # zero-padded
curl "https://calendar.kuzyak.in/api/calendar/2023/1/5" # non-padded
curl "https://calendar.kuzyak.in/api/calendar/2023/01/5" # mixed
# Праздники года
curl "https://calendar.kuzyak.in/api/calendar/2023/holidays"
API возвращает структурированные JSON ошибки для невалидных запросов:
# Невалидный год
curl "https://calendar.kuzyak.in/api/calendar/1999"
# {"error":"Invalid year","status":422}
# Невалидный месяц
curl "https://calendar.kuzyak.in/api/calendar/2023/13"
# {"error":"Invalid month","status":422}
# Невалидный день
curl "https://calendar.kuzyak.in/api/calendar/2023/01/40"
# {"error":"Invalid day","status":422}
# Несуществующий день (29 февраля в невисокосном году)
curl "https://calendar.kuzyak.in/api/calendar/2023/02/29"
# {"error":"Invalid day","status":422}
Коды ошибок:
422
- Невалидные параметры (год, месяц, день)404
- Ресурс не найден400
- Неизвестная ошибкаgit clone https://github.com/iposho/holidays-calendar-ru.git
cd holidays-calendar-ru
npm install
npm run dev
cp .env.example .env
docker build . -t holidays-calendar
docker run -p 5000:5000 holidays-calendar
GET /api/calendar
GET /api/calendar/{year}
GET /api/calendar/{year}/holidays
GET /api/calendar/{year}/{month}
GET /api/calendar/{year}/{month}/{day}
Все API endpoints теперь обслуживаются статическими JSON файлами, что обеспечивает:
Статические файлы генерируются автоматически при разработке и сборке проекта:
npm run dev # Автоматически генерирует статические файлы перед запуском dev сервера
npm run build # Автоматически генерирует статические файлы перед сборкой
npm run generate-api # Ручная генерация статических файлов
Оптимизированная стратегия кеширования для API endpoints:
s-maxage=31536000
(1 год) - долгосрочное кеширование в CDN для максимальной производительностиIf-None-Match
заголовки, получая 304 Not Modified при отсутствии измененийПреимущества:
Полная документация доступна по ссылке:
Swagger UI
Вы можете использовать Swagger UI для тестирования и изучения всех доступных маршрутов и их параметров.
import requests
response = requests.get("https://calendar.kuzyak.in/api/calendar/2024")
print(response.json())
fetch("https://calendar.kuzyak.in/api/calendar/2024")
.then((res) => res.json())
.then((data) => console.log(data));
<?php
$response = file_get_contents("https://calendar.kuzyak.in/api/calendar/2024");
$data = json_decode($response, true);
print_r($data);
?>
curl -H "Content-Type:application/json" -X GET "https://calendar.kuzyak.in/api/calendar/2024"
Запуск тестов:
npm test
Покрытие кода:
npm run test:coverage
git checkout -b my-feature
git commit -m "feat: добавил новую фичу"
git push origin my-feature
develop
.Этот проект распространяется под лицензией MIT.