OFeed API
OFeed nabízí dva typy API - REST a GraphQL, které umožňují vlastní integraci. Koukni na existující příklady pro inspiraci.
REST API
Swagger s detailnějším popisem je dostupný 👉.
Autorizace
Využivá se Basic eventId:eventPassword enkódované jako Base64 řetězec, jak je vidět u PUT a POST dotazu v authorization hlavičce.
Nahrání dat
- Endpoint:
https://api.orienteerfeed.com/rest/v1/upload/iof - je možné volat pravidelně (například po 5ti minutách) a zpracovává se celé xml, což může něco málo trvat a není to optimální.
Aktualizace dat
Aktualizace dat je rozdělěná na dvě skupiny:
-
1. změna statusu
- jednoduchý endpoint pouze pro změnu statusu (Běží/Neběží)
- URL:
https://api.orienteerfeed.com/rest/v1/events/{eventId}/competitors/{competitorId}/status-change
-
2. změna údajů závodníka
- upravuje ostatní údaje o závodníkovi jako např. číslo čipu
- URL:
https://api.orienteerfeed.com/rest/v1/events/{eventId}/competitors/{competitorId}
Získání přehledu změn
Snadno lze získat přehled všech změn, které v průběhu závodu nastaly. Ideální je využít origin parametr (např. START) o omezit jen na konkrétní místo původu. Jde o autorizovaný endpoint ačkoliv je to GET požadavek.
URL: https://api.orienteerfeed.com/rest/v1/events/{eventId}/changelog?origin=START
Příklady volání
Nahrání dat
curl --location 'https://api.orienteerfeed.com/rest/v1/upload/iof' \
--header 'Authorization: ••••••' \
--form 'eventId="cmg4t3f0i0007my3m5hh50wl2"' \
--form 'file=@"/D:/ofeed/data/results-iof30.xml"'
Úprava závodníka
Seznam závodníků
curl --location 'http://localhost:3001/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors'
Přidání nového závodníka
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"classId": 2345,
"origin": "START",
"firstname": "Martin",
"lastname": "Křivda",
"card": 887640,
"registration":"CHC9403",
"organisation": "KOB Choceň",
"note":"OFeed CEO"
}'
Detail závodníka
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/4100'
Detail závodníka pomocí externího id
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/31/external-id'
Aktualizace dat závodníka
curl --location --request PUT 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/4071' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"origin":"START",
"card": 8086810,
"note": "Another card, again!"
}'
Aktualizace dat závodníka pomocí externího id
Většinou interní identifikátor pořádacího programu.
curl --location --request PUT 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/RCZ1051/external-id' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"useExternalId": true,
"origin": "START",
"note": "New note",
"card":887640
}'
Smazání závodníka
curl --location --request DELETE 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/28' \
--header 'Authorization: ••••••'
Smazání závodníka pomocí externího id
curl --location --request DELETE 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/16/external-id' \
--header 'Authorization: ••••••'
Smazat hromadně všechny závodníky
curl --location --request DELETE 'http://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors' \
--header 'Authorization: ••••••'
Změna statusu
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/competitors/1/status-change' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '{
"origin": "START",
"status": "Active"
}'
Získání změn
curl --location --globoff 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2/changelog?group=true&classId={{classId}}}&origin=START' \
--header 'Authorization: ••••••'
Akce
Detail akce
curl --location 'https://api.orienteerfeed.com/rest/v1/events/cmg4t3f0i0007my3m5hh50wl2'
GraphQL
Jsou dostupné totožné oprace jako pro REST. Výhodou je možnost specifikovat požadovaná data v odpovědi, což snižuje množství přenesených dat.
Url: GraphQL