API-dokumentáció¶
OpenAPI¶
A 3.0-s API-verziótól kezdve:
https://gitlab.com/openbiomaps/api/obm-project-api/#openbiomaps-project-api
Példa Swagger UI felületre:
https://openbiomaps.org/projects/checkitout/api/v3/swagger-ui
PDS API¶
Az 1.0–2.6-os API-verziókban.
HTTP-metódusok: GET, POST
API-eszközök: hitelesítés, adatlekérés, adatfeltöltés, beállítások frissítése
Ez az első OpenBioMaps API (1.0, 2.0–2.6), amelynek kivezetése 2026 szeptemberétől várható. Helyét a 3-as API-verzió (Swagger–OpenAPI) veszi át.
API-kezelők:¶
Hitelesítéskezelő (OAUTH):
/oatuh/token.php: hitelesítés és engedélyezés
Hitelesítésen alapuló felület (PDS/Oauth):
/projects/projectname/API_VERSION/pds.php: adatlekérés, adatfeltöltés, beállítások frissítése
Nem hitelesített kérések (web):
/projects/projectname/index.php
A PDS API verziója¶
Példa: http://openbiomaps.org/projects/dead_animals/v2.1/pds.php
Ha a verziókarakterlánc hiányzik az URL-ből, az alapértelmezett verzió az 1.1, amely kompatibilis a 2.0-s verzióval, és visszafelé kompatibilis az 1.0-s verzióval.
OAUTH¶
A https://bshaffer.github.io/oauth2-server-php-docs/ megoldáson alapuló OAuth2-megvalósítás. Az OAUTH-t a webes felület és a PDS is használja.
Változók¶
grant_type: password
username: regisztrált e-mail-cím
password: jelszókarakterlánc
scope: a hitelesített munkamenetben kért hozzáférési hatókörök listája
A kliensek HTML-alapú hitelesítése szükséges.
Az elérhető kliensek: mobile, R, web.
Az OAUTH kizárólag a következő típusú kéréseket fogadja el:
application/x-www-form-urlencoded
multipart/form-data
Hatókörök:
get_form_data
get_form_list
put_data
…
PDS API¶
Az OpenBioMaps fő API-felülete. Alapvetően R- és mobilkliensekhez készült. A hitelesítéshez OAUTH-t használ.
Az OAUTH-feldolgozás miatt kizárólag application/x-www-form-urlencoded
és multipart/form-data típusú kéréseket fogad el.
PDS-változók¶
scope: adatmetódusok; lásd alább
value: a legtöbb hatókör használja
header: adatfeltöltéskor a táblaoszlopok neveinek JSON-listája
ignore_warning: adatfeltöltéskor a feltöltési figyelmeztetések figyelmen kívül hagyása
form_id: a feltöltési űrlap azonosítója a
put_datahasználatakordata: a feltöltött adatok JSON-tömbje
GET típusú hatókörök¶
get_project_vars
A projekt általános változóinak lekérdezése. Nem bejelentkezett felhasználók számára is elérhető.
További paraméterek:
project [text]: ha nincs megadva, az alapértelmezett projekt a template
Visszatérési érték:
project_url [url string]: a projekt webcíme
project_description [text string]: a projekt rövid leírása
game [on/off]: elérhető-e játék az androidos mobilalkalmazásban
public_mapserv [url string]: a nyilvánosan hozzáférhető térképszolgáltatás URL-je
rserver_port [numeric]: a projekt URL-jén elérhető R Shiny-szerver numerikus portszáma
get_project_list
A szerveren elérhető adatbázisprojektek listáját és alapinformációit adja vissza. Ha a felhasználó már bejelentkezett, azoknak a projekteknek a listáját adja vissza, amelyekben a felhasználó fiókkal rendelkezik, illetve amelyekben nyilvános lekérdezési vagy feltöltési felület érhető el. Ha a felhasználó nincs bejelentkezve, csak a nyilvános projekteket kérdezi le.
További paraméterek:
only-project [text]: csak a kiválasztott projekt paramétereinek lekérdezése; alapértelmezés szerint minden hozzáférhető projekt lekérdezése
accessible [text]: all/accessible. Ha az accessible paraméter meg van adva, és értéke „accessible” (alapértelmezett)
Visszatérési érték:
project_table [string]
creation_date [date string]
Creator [string]
email [string]
stage [string]: experimental/testing/stable
doi [string]
running_date [date string]
license [string]
rum [string]
collection_dates [date range string]
subjects [text]
get_form_list
Az elérhető feltöltési űrlapok listájának lekérdezése.
get_form_data
A kiválasztott űrlap mezőinek lekérdezése.
További paraméterek:
value [numeric]: egy űrlap numerikus azonosítója
Visszatérési érték: lásd az alábbi példában.
A változók magyarázata:
default value: minden megfigyeléshez tartozó rögzített érték. A következő beállításokkal szabályozható:
«_input»: ugyanúgy működik, mint bármely más, sticky jelzővel ellátott mező
«_list»: ugyanúgy működik, mint bármely más, sticky jelzővel ellátott listatípusú mező
«_geometry»: geometriatípusú mezőként működik
«_login_name»: ezt az értéket a bejelentkezett felhasználó neve felülírja; bejelentkezés nélkül
_inputértékként viselkedik«_email»: ezt az értéket a bejelentkezett felhasználó e-mail-címe felülírja; bejelentkezés nélkül
_inputértékként viselkedik«_autocomplete»: az input álneve
«_boolean»: normál logikai listaként jelenik meg
«_attachment»: normál csatolmánymezőként jelenik meg
«_datum»: normál dátummezőként jelenik meg
«_auto_geometry»: további beállítások nélküli geometriamező (map, set)
«_none»: nincs használatban
column: az adatbázisoszlop neve
short_name: az oszlop felhasználók számára látható neve
list: a kiválasztási menü elemeinek JSON-tömbje. Formátuma lehet
{key:value} vagy [value,value].
control: adatellenőrzési parancsok: custom_check, minmax, spatial, nocheck, NULL
count: JSON-tömb. Ha a control='minmax', ez a mező tartalmazza a
határértékeket, például 1:100.
type: az oszlop OpenBioMaps-típusa:
autocomplete (JSON-tömb)
autocomplete_list (JSON-tömb)
boolean (kételemű lista)
crings (színes gyűrűk – szöveg)
date (YYYY-MM-DD vagy más egyértelmű formátum)
datetime (YYYY-MM-DD HH:mm:ss)
file_id (a szerver által azonosítóként használt fájlnevek)
line (WKT-geometriakarakterlánc)
list (JSON-tömb)
numeric
point (WKT-geometriakarakterlánc)
polygon (WKT-geometriakarakterlánc)
text
time (HH:mm)
timetominutes (0 és 1440 közötti numerikus érték)
tinterval időintervallum (HH:mm - HH:mm)
wkt (WKT-karakterlánc)
array (JSON-tömb)
genlist: az automatikus kiegészítési menü elemeinek JSON-tömbje.
Formátuma lehet {key:value} vagy [value,value].
obl: 1, 2, 3 (kötelező, nem kötelező, enyhe hiba). Az enyhe hiba nem kötelező mezőként kezelhető.
api_params: a vezérlőértékek JSON-tömbje. A 2.0-s API-verzióig csak a
sticky szerepelhet tömbelemként.
A 2.0-s API-verzió feletti api_params:
{
"sticky":"off",
"hidden":"off",
"readonly":"off",
"list_elements_as_buttons":"off",
"once":"off",
"unfolding_list": "off"
}
spatial_limit: a térbeli korlátozás WKT-poligonkarakterlánca. Akkor
használatos, ha a vezérlő típusa spatial.
list_definition: az összetett listadefiníció JSON-tömbje
custom_function: null
custom_label:
field_description:
get_profile
A kiválasztott felhasználó profiladatainak lekérése.
get_data
Adatsorok lekérése a kiválasztott adattáblából, vagyis a megfigyelési adatokból.
get_specieslist
A projekt fajlistájának lekérése.
get_history
A kiválasztott adatsor előzményeinek lekérése.
get_report
Előre meghatározott lekérdezés végrehajtása és az eredmény lekérése.
get_tables
A projekt táblalistájának lekérése.
get_trainings
A 2.6-os API-verziótól nem érhető el.
Az elérhető képzések és űrlapok listájának lekérése.
Visszatérési érték:
a képzések címeinek, azonosítóinak és leírásainak halmaza stb.
get_training_questions
A kiválasztott képzés kérdéslistájának lekérése.
A 2.6-os API-verziótól nem érhető el.
További paraméterek:
value [numeric]: egy képzés numerikus azonosítója
Visszatérési érték:
a kérdések, válaszok és beállítások halmaza
training_results
A felhasználók képzési állapotának listája minden űrlaphoz. Az állapot értéke -1 (nincs elküldve), 0 (még nincs validálva) vagy 1 (kész, megfelelő) lehet.
A 2.6-os API-verziótól nem érhető el.
training_toplist
A képzések toplistája. Átlag-, maximum- és darabszámértékek minden űrlaphoz.
A 2.6-os API-verziótól nem érhető el.
További paraméterek:
value [text]: nevek nélküli összefoglaló (nonames)
get_mydata_rows
A feltöltött adatok JSON-tömbje.
További paraméterek:
Value [numeric]: a tömb hosszkorlátja. Ha 0, nincs korlát; alapértelmezés szerint nincs korlát.
POST típusú hatókörök¶
put_data
Adatok küldése vagy feltöltése egy kiválasztott űrlap használatával.
A következők egyike lehet:
tracklog
form_id
A form_id kötelező paraméterei:
header
data
A form_id opcionális paraméterei:
metadata
api_warnings
srid
description
upload_table_post
default_values
Fájlfeltöltés.
PATCH típusú hatókörök¶
set_rules
Meghatározott beállítások frissítése.
PDS-példák¶
Hitelesítési példák¶
CURL használata:
curl -u mobile:123 https://openbiomaps.org/oauth/token.php -d "grant_type=password&username=foo@foobar.hu&password=mysecretpassword&scope=get_form_data+get_form_list+put_data" | jq
Konkrét hibaüzenetek:
{
"error": "invalid_grant",
"error_description": "Invalid username and password combination"
}
Sikeres válasz:
{
"access_token": "2cf59c094cc83498355ee9f520848efab6f71fe02",
"expires_in": 3600,
"token_type": "Bearer",
"scope": "get_form_data get_form_list put_data apiprofile",
"refresh_token": "e14dd3e0f13dffb17d36b2acfe9d161fd4ec1d4fb"
}
Frissítési token használata:
curl -F 'grant_type=refresh_token' -F 'refresh_token=e14dd3e0f13dffb17d36b2acfe9d161fd4ec1d4f3' -F 'client_id=R' https://openbiomaps.org/oauth/token.php | jq
Visszatérési érték:
{
"access_token":"ccc1d3e0f13dffb17d36b2acfe9d161fd4ec1d4de",
"expires_in":3600,
"token_type":"Bearer",
"scope":"get_form_data get_form_list",
"refresh_token":"a1e1d3e0f13dffb17d36b2acfe9d161fd4ec1d27c"
}
get_form_data példák¶
CURL használata:
curl -F 'access_token=c53c9ec690fede4c3' -F 'scope=get_form_data' -F 'value=246' -F 'project=dead_animals' https://openbiomaps.org/projects/dead_animals/v2.3/pds.php | jq
Konkrét hibaüzenetek:
{
"status": "error",
"message": "Form access denied.",
"data": ""
}
Sikeres válasz:
{
"status": "success",
"message": "",
"data": {
"form_header": {
"login_name": "Gipsz Jakab",
"login_email": "jakab.gipsz@openbiomaps.jupyter.ga",
"boldyellow": [
"species"
],
"num_ind": "quantity",
"tracklog_mode": "",
"observationlist_mode": "false",
"observationlist_time_length": "0",
"periodic_notification_time": null
},
"form_data": [
{
"description": "...",
"default_value": "...",
"column": "species",
"short_name": "Scientific species name",
"list": ["..."],
"control": "nocheck",
"count": "{}",
"type": "list",
"genlist": null,
"obl": "1",
"api_params": {
"sticky": "on",
"hidden": "off",
"readonly": "off",
"list_elements_as_buttons": "on",
"once": "off",
"unfolding_list": "off"
},
"spatial_limit": null,
"list_definition": {
"multiselect": false,
"selected": null,
"triggerTargetColumn": [],
"Function": ""
},
"custom_function": null,
"column_label": null,
"field_description": "..."
}
]
}
}
get_form_list példák¶
CURL használata:
curl https://openbiomaps.org/projects/checkitout/pds.php -d "access_token=d4fba6585303bba8da3e6afc1eb9d2399499ef3eb&scope=get_form_list"
{
"status": "success",
"message": "",
"data": [
{
"id": "1017",
"visibility": "Observation list - obligatory / tracklog no",
"form_id": "1017",
"published_form_id": "1016",
"form_name": "Observation list - obligatory / tracklog no",
"last_mod": "1674809097"
},
{
"id": "938",
"visibility": "relational columns test",
"form_id": "938",
"published_form_id": "937",
"form_name": "relational columns test",
"last_mod": "1660679646"
}]
}
Adatfeltöltési példák¶
CURL használata:
curl -i -X POST \
-H „Content-Type:application/x-www-form-urlencoded” \
-H „Authorization:Bearer …” \
-d „scope=put_data” \
-d „form_id=128” \
-d „header=["obm_geometry","datum","comment","observer"]” \
-d „data=[{"obm_geometry":"point(48.071187 19.293714)","datum":"2018-04-03","comment":"asdad","observer":"sdsaada"}]” \
-d „ignore_warning=1” \
«https://openbiomaps.org/projects/checkitout/v2.5/pds.php»
JavaScript használata:
const xhr = new XMLHttpRequest();
xhr.open("POST", "https://openbiomaps.org/projects/checkitout/v2.5/pds.php");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
const encodedData = Object.keys(data)
.map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))
.join('&');
xhr.onload = () => {
if (xhr.readyState == 4 && xhr.status == 201) {
console.log(JSON.parse(xhr.responseText));
} else {
console.log(`Error: ${xhr.status}`);
}
};
xhr.send(encodedData);
Adatfeltöltés több csatolmánnyal, vagyis fájllal:
curl \
-F „access_token=…” \
-F «scope=put_data» \
-F «form_id=58» \
-F «header=[„species”,”obm_geometry”,”obm_files_id”]» \
-F «batch=[\
{„data”:[{„species”:”Sylvia curruca”,”obm_geometry”:”POINT(22.0 46.3)”}],”attached_files”:”file1,file2”},\
{„data”:[{„species”:”Lanius Collurio”,”obm_geometry”:”POINT(21.5 47.1)”}],”attached_files”:”file3”}]» \
-F «file1=@file1» \
-F «file2=@file2» \
-F «file3=@file3» \
http://localhost/biomaps/projects/template/pds.php
Csomagolt adatfeltöltés. Adatsor ZIP-archívumban. Ez a régi
mobilalkalmazás exportformátuma. A ZIP-fájl a következő fájlokat tartalmazza:
geometry.wkt
PICT01.JPG
PICT02.JPG
note.txt
A ZIP-fájl neve Sun May 13 08:52:51 CEST 2018.zip, amely a megfigyelés
dátum-idő karakterláncából készült. A note.txt a megfigyeléshez tartozó
megjegyzést tartalmazza, amely az űrlap egyik oszlopához rendelhető. Ebben a
példában ez a species. A másik három oszlopot nem szabad lecserélni vagy
figyelmen kívül hagyni. Ha az űrlap kötelező oszlopokat tartalmaz, azok a
default_value paraméterrel tölthetők ki. Ebben a példában az
egyedszam kötelező mező, amely az 1 értéket kapja. A csomagolt sorok
tovább csomagolhatók. Ebben az esetben a packed_line paramétert
multipacked_lines értékre kell cserélni, a ZIP-archívumnak pedig a fent
ismertetett ZIP-fájlokat kell tartalmaznia.
curl \
-F «scope=put_data» \
-F «table=dinpi» \
-F «form_id=58» \
-F «header=[„obm_geometry”,”obm_files_id”,”faj”,”dt_to”]» \
-F «default_values={„egyedszam”:”1”}» \
-F «packed_line=@Sun May 13 08:52:51 CEST 2018.zip» \
http://localhost/biomaps/pds.php
get_project_list példa¶
CURL használata:
Ez egy nem hitelesített PDS-kérés:
curl https://openbiomaps.org/projects/checkitout/v2.5/pds.php -d "scope=get_project_list&value=" | jq
Sikeres válasz:
{
"status": "success",
"data": [
{
"project_table": "checkitout",
"creation_date": "2016-03-09",
"Creator": "",
"email": "",
"stage": "sandbox",
"doi": null,
"running_date": null,
"licence": "ODbL",
"rum": "+++",
"collection_dates": null,
"subjects": null,
"project_hash": "28gmst44rm8g",
"project_url": "https://openbiomaps.org/projects/checkitout/",
"project_description": "Checkitout! Sandbox.",
"public_mapserv": "-",
"training": "f",
"rserver": "f",
"language": "hu",
"game": "off",
"rserver_port": 0
}
]
}
Képzések magyarázatai és példái¶
A 2.6-os API-verziótól nincs kliens.
Curl használata:
curl -F 'scope=get_trainings' -F 'access_token=9d45...' -F 'project=dinpi' http://localhost/biomaps/pds.php
Sikeres hívás eredménye:
{"status":"success",
"data":[
{"id":"1","form_id":"95","html":"<div>...",,"task_description":"<div>...","enabled":"t","title":"Gyakorlás I.","qorder":"1","project_table":"dinpi"}]}
curl -F 'scope=get_training_questions' -F 'access_token=9d45...' -F 'project=dinpi' http://localhost/biomaps/pds.php
Sikeres hívás eredménye:
{"status":"success",
"data":[
{"qid":"1", "training_id":"1", "caption":"...?", "answers":[{"Answer": "...","isRight": "false" } ],"qtype":"multiselect"}]}
A qtype értéke multi-select vagy single select lehet.
curl -F 'scope=training_results' -F 'access_token=9bb4...' -F 'project=dinpi' http://localhost/biomaps/pds.php
Sikeres hívás eredménye:
{"status":"success","data":"{"95":1,"96":0,"97":-1,"98":-1}"}
Az értékek jelentése: a 95-ös űrlap elkészült; a 96-os űrlap elkészült, de még nincs validálva; a 97-es és 98-as űrlap még nincs befejezve.
curl -F 'scope=training_toplist' -F 'value=nonames' -F 'access_token=5ac3...' -F 'project=dinpi' http://localhost/biomaps/pds.php
Sikeres hívás eredménye:
{"status":"success",
"data":{
"95":{"mean":"0.50000000000000000000","count":"2","max":"0.7"},
"96":{"mean":"0.70000000000000000000","count":"1","max":"0.7"},
"97":{"mean":"0.70000000000000000000","count":"1","max":"0.7"},
"98":{"mean":null,"count":"1","max":null}}}
curl -F 'scope=training_toplist' -F 'access_token=5ac3...' -F 'project=dinpi' http://localhost/biomaps/pds.php
{"status":"success","data":{
"95":{"Gipsz Jakab":{"mean":"0.30000000000000000000","count":"1","max":"0.3"},
"Foo Aladár":{"mean":"0.70000000000000000000","count":"1","max":"0.7"}},
"96":{"Foo Aladár":{"mean":"0.70000000000000000000","count":"1","max":"0.7"}},
"97":{"Foo Aladár":{"mean":"0.70000000000000000000","count":"1","max":"0.7"}},
"98":{"Mr. Bean":{"mean":null,"count":"1","max":null}}}}
Általános API-válaszok¶
Alapja: https://labs.omniti.com/labs/jsend
Mindig JSON-karakterlánc:
{
"status":"X",
"data":"",
"message":""
}
X: success, error, fail
Általános hibaüzenetek¶
{
"status": "error",
"message": "The access token provided is invalid"
}
{
"status": "error",
"message": "The request requires higher privileges than provided by the access token"
}
WEB API¶
Az index.php bizonyos esetekben API-szolgáltatásként is működik
(?query=), kizárólag _GET kérésekhez és nem hitelesített kérésekhez.
Ez az API text_filter modulokat használ egy SQL-lekérdezési utasítás
összeállításához.
WEB API-változók¶
- query:
API-végpont.
- qtable:
Az adatlekéréshez használt adattábla.
- report:
Adatlekérés tárolt lekérdezések használatával.
- output:
JSON-, XML-, CSV- vagy más fájlkimenet. Ha nincs beállítva, a kimenet a webes felület.
- filename:
A kimeneti fájl neve.
Az aktív, vagyis ismert OpenBioMaps-szerverek listájának lekérése a query API használatával:
curl https://openbiomaps.org/projects/openbiomaps_network/index.php -G -d 'query={"available":"up"}&output=json&filename=results.json'
Szűrt tábla lekérése nem alapértelmezett táblából:
curl https://openbiomaps.org/projects/pollimon/index.php -G -d 'query={"q":"2"}&output=json&qtable=pollimon_sample_plots'
LQ API-végpont:
- LQ:
Tárolt lekérdezési eredmény adatainak megjelenítése.
Használati példa:
wget https://openbiomaps.org/projects/checkitout/?report=2@szamossag&output=csv