Проєкт реалізує REST проксі до Реєстру суб'єктів освітньої діяльності ЄДЕБО (registry.edbo.gov.ua)
Реєстр ЄДЕБО пропонує REST API для доступу до даних. Однак, форма запиту і формат отримуваних даних відрізняються для закладів загальної середньої освіти та інших категорій навчальних закладів (вищої, фахової передвищої та професійної освіти).
Проєкт:
- уніфікує формат запиту і результатів, що повертаються;
- кешує дані отримані з первинного реєстру;
- архітектурно дозволяє легко підключати інші (додаткові) реєстри та змінювати формат даних, що повертаються.
GET /api/v1/catalog/{name}
name - довідник
- fi - перелік полів, що повертаються запитом до реєстру;
- it - коди категорій навчальних закладів (установ) для яких можна отримати дані;
- rc - коди регіонів (областей, міст обласного підпорядкування);
- tr - дозволені типи запитів.
GET /api/v1/register/{inst}/{reg}
- inst - код категорії навчальних закладів (установ);
- reg - код регіону.
Для уточнення запиту використовуються два види параметрів:
- r.{fi} - значенням параметра є один із дозволених типів запитів (tr);
- v.{fi} - значення параметра конкретизує умову запиту.
Як правило, параметри r.{fi} та v.{fi} використовуються парами, однак запити типу "empty/notempty" параметра v.{fi} не потребують.
Наприклад:
/api/v1/register/3/26
Повертає перелік (масив JSON об'єктів) закладів загальної середньої освіти Івано-Франківської області.
/api/v1/register/3/26?r.website=notempty
Повертає перелік (масив JSON об'єктів) закладів загальної середньої освіти Івано-Франківської області для яких вказані адреси веб-сайтів.
/api/v1/register/3/26?r.website=notempty&r.name=contains&v.name=ліцей
Повертає перелік (масив JSON об'єктів) закладів загальної середньої освіти Івано-Франківської області назви яких містять рядок "ліцей" і для яких вказані адреси веб-сайтів.
Якщо у "парних" параметрах відсутній один із елементів, то такі параметри будуть проігноровані. Наприклад, запити
/api/v1/register/3/26?r.website=notempty&r.name=contains
або
/api/v1/register/3/26?r.website=notempty&v.name=ліцей
повернуть перелік закладів загальної середньої освіти Івано-Франківської області для яких вказані адреси веб-сайтів.
- short:"a" long:"address" env:"OLIMP_ADDRESS" default:":8080" description:"server address";
- short:"s" long:"source" env:"OLIMP_SOURCE_REGISTRY" choice:"edbo" default:"edbo" description:"source of institution registry";
- short:"t" long:"templife" env:"OLIMP_TEMP_LIFE" default:"86400" description:"lifetime of batches".
docker-compose.yml
version: '3.1'
services:
olimp:
image: docker.pkg.github.com/myroslav-b/olimp/olimp:latest
restart: always
networks:
- "traefik_default"
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_default"
- "traefik.http.routers.olimp-router.rule=Host(`olimp.oippo.if.ua`)"
- "traefik.http.routers.olimp-router.tls=true"
- "traefik.http.routers.olimp-router.tls.certresolver=letsEncrypt"
- "traefik.http.routers.olimp-router.entrypoints=websecure"
- "traefik.http.routers.olimp-router.service=olimp-web-srv"
- "traefik.http.services.olimp-web-srv.loadbalancer.server.port=8080"
networks:
traefik_default:
external: true
traefik.yml
entryPoints:
web:
address: ":80"
http:
redirections:
entrypoint:
to: websecure
scheme: https
websecure:
address: ":443"
providers:
docker:
network: "traefik_default"
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
certificatesResolvers:
letsEncrypt:
acme:
email: "mymail@mail.net"
storage: "acme.json"
httpChallenge:
entryPoint: web
api:
dashboard: true