REST APIaren dokumentazioa
Hauek dira APIaren diseinu-helburu nagusiak:
-
REST arkitektura estiloa erabili.
-
Ezartzeko erraza den API garbi bat diseinatzea. Orain APIa Ruby on Rails plataforman ezarrita dago baina etorkizunean berrezarri edota bestelako plataformetara hedatu ahal izango da, adibidez, PHP edo Zope plataformetan.
-
OpenLayers liburutegia erabili mapak erakutsi eta horiekin lan egiteko. Horri esker,Mapstraction-ekin guztiz bateragarriak izango gara.
-
TMS Open Layers-i mapak zerbitzatzeko.
- Bestelako API estandarrei atxikitzen saiatu, horrek eskaintzen dituen elkarrekiko eraginkortasun abantailez gozatzeko.
-
Etorkizunean, Open Geospatial Consortium (OGC) elkartearen zerbitzuak ezarri. Zerbitzu horien artean:
Oro har, APIa bi zatitan banatzen da:
- Kontsultak egiteko eta informazioa lortzeko APIa.
- Mapak txertatzeko eta horiekin lan egiteko APIa. Beste norbait garatzen ari den aplikazioan leiho bat txertatzeko.
Oharpen orokorrak
API hau HTTP bidez eskuragarri dago eta REST estiloari jarraitzen dio. Diseinuari dagokionez, APIari berdin zaio egingo den inplementazioa nolakoa den, nahiz eta Ruby on Rails-en REST inplementazioaren diseinuaren xehetasun txiki batzuk izan. Ruby on Rails-en eragina kasuan kasu zehaztuta dago.
Koordenatu motak
Kontrakoa adierazten ez bada, API honetan erabiltzen diren koordenatu guztiak (luzera/latitudea) Spherical Mercator proiekzioan aurki daitezke eta "EPSG:900913" SRS-a daukate.
APIaren oinarrizko URL-a
Dokumentu honetan agertzen diren URL guztiak APIaren zerbitzariaren oinarrizko URL-ean aplikatzen dira. Hau da oraingo oinarrizko URL-a:
b5m.gipuzkoa.eus/api/
Azpimarratu behar da Ruby On Rails-eri berdin zaiola zein den erabilitako domeinua, izan ere, web aplikazioa eskatzen den URL-aren domeinura berez egokitzen baita.
Bertsionatua
APIa bertsionatuta dago. Horri esker, egun APIa erabiltzen duten bezeroei arazorik eragin gabe garapenean aurrera jarraitu dezake. Bertsioa adierazten duten zenbakiek honako forma daukate:
handiago.txikiago
Dokumentu honetan APIaren 1.0 bertsioa deskribatzen da. Hortaz, hau izango da oinarrizko URL-a:
b5m.gipuzkoa.eus/api/1.0/
APIaren bertsio bat denboran iraunkor mantentzen saiatu behar da erabiltzen duten bezeroei arazoak ez sortzeko.
Lokalizazioa
Kontsulta askoren erantzunak bezeroak bilatu nahi duen testua jaso behar du.
Bilaketaren hautaketa RESTful moduan egiten da, hau da, URL-aren path-ean hizkuntza kode bat sartuz. Hori, querystring-ak (adibidez, "?lang=es") ez erabiltzeko egiten da, RestBible-k gomendatzen duenari jarraiki (121-123 or.).
Hizkuntza kodeak ISO 639-1 estandarrari jarraiki zehazten dira. Hauek dira gure aplikazioan erabiliko ditugun kode nagusiak:
- Euskara: eu - Gaztelania: es - Ingelesa: en - Frantsesa: fr
Hizkuntza kodea APIaren bertsio-zenbakiaren ondoren zehazten da, adibidez:
/api/1.0/eu/
URL-en path-aren (direktorioen katea) REST “egitura” ingelesez dago eta independentea da hautatutako lokalizazioarekiko. Izan ere, ez baitauka zentzurik URL-ak hautatutako lokalizazioaren arabera aldatzea. REST estiloa dela-eta, path-aren zati batzuk kontsultaren parametroekin bat etor daitezke eta hortaz, lokalizatu daitezke.
Horrela, entitateak (herriak, kaleak, etab.) bilatzeko erabiltzen diren “kodeak” kontsultako parametroetan lokalizatuta daude.
Adibidez, objektu baten MBRa lortzeko (informazio gehiago APIaren xehetasunetan)
/api/1.0/eu/locate/mbr/M_069
Lehen adierazi dugun bezala, locale-a URL-aren bitartez hautatzen da. Momentuz, ez zaio jaramonik egiten HTTP Accept-Language goiburuari. Horrek bat egiten du REST (RestBible 93,391) estiloarekin.
Edonola ere, APIk itzultzen duen testu-eduki osoa UTF-8 formatuan kodetuta dago. Momentuz, ez diogu jaramonik egingo HTTP Accept-Charset goiburuari (RestBible 390).
EPSG
APIak baimentzen du emaitzak jasotzea erreferentzia-sistema hauetan: EPSG:900913an (Spherical Mercator, balio lehenetsia), EPSG:4326an (WGS84) eta EPSG:25830ean (ETRS89). Erreferentzia-sistemaren aukeraketa, srs parametroaren bidez egiten da.
/api/1.0/eu/locate/mbr/M_069.xml;srs=epsg:25830 /api/1.0/eu/locate/mbr/M_069.xml;srs=epsg:4326 /api/1.0/eu/locate/mbr/M_069.xml;srs=epsg:900913
Irteera formatua
APIak hainbat modutan adierazten ditu baliabideak (datuak).
- JSON
- XML
- TEXT (TXT,CSV)
Formatua aukeratzeko ondoren ematen den zerrendatik betetzen den lehen baldintza hautatzen da (Rails estiloa):
- Eskaeraren URL-ari “formatu luzapen” bat gehituz. Adibidez:
/api/1.0/eu/locate/mbr/M_069.xml /api/1.0/eu/locate/mbr/M_069.json
-
HTTP Content goiburua erabiliz egokiena den MIME type-arekin.
- Aipatutako bi baldintzak betetzen ez badira, XML formatua lehenetsiko da.
Baliabide guztiak ez daude formatu guztietan eskuragarri. Oro har, baliabideekin batera horiek zein formatu bitartez lor daitezkeen zehazten duen zerrenda bat atxikitzen da. Formatuen zerrenda eskuratzeko nahikoa da “.formats” luzapena gehitzea “baliabide mota” ezartzen duen URL-ari. Adibidez:
-
/api/1.0/eu/locate/mbr.formats /api/1.0/eu/locate/info.formats
Horrela, baliabide horrek onartzen dituen formatuak jasotzen dituen testu CSV bat lortzen da.
JSONP formatua
APIak datuak JSONP formatuan itzul ditzake. Hori lortzeko, callback-aren funtzioa zein den zehaztu behar da.
Callback-a zehazteko URL-aren querystring bat erabili ohi da. Gure kasuan:
/api/1.0/eu/locate/mbr/M_069.jsonp?callback=nire_funtzioa
Callback-a zehazteko modu honek ez du REST-en arkitektura estiloa mantentzen eta ez da cache friendly. Horregatik, callback-a zehazteko REST-etik hurbilago dagoen modu bat aukeratu da.
Callback-a zehazteko URL-aren parametro bat (eta ez querystring bat) erabili ohi da:
/api/1.0/eu/locate/mbr/M_069.jsonp;callback=nire_funtzioa
Callback parametroa URL-kodetuta egon daiteke. Nahiz eta oso ohikoa ez den, callback-ean "." erabiltzen bada, hori URL-kodetu beharko da. Izan ere, karaktere guztiak URL-kodeaketa gomendatzen da (letrak eta digituak ez ezik):
/api/1.0/eu/locate/mbr/M_069.jsonp;callback=form%5B0%5D%2Efuncion # honakoaren baliokidea da: "form[0].funcion"
Eskaera adibideak:
Eskaera:
/api/1.0/eu/locate/info/D_4545.json
Emaitza:
{ "info": { "type": "postal_id", "postal_code": { "id_municipality": "017", "name": "SALESIANOS, CONVENTO", "bis": " ", "postal_code": "20720", "district_code": "02", "municipality": "AZKOITIA", "num": "012", "street": "AIZKIBEL KALEA", "section_code": "002", "id_street": "1240" } } }
Eskaera:
/api/1.0/eu/locate/info/D_4545.jsonp;callback=funcion
Emaitza:
funcion({ "info": { "type": "postal_id", "postal_code": { "id_municipality": "017", "name": "SALESIANOS, CONVENTO", "bis": " ", "postal_code": "20720", "district_code": "02", "municipality": "AZKOITIA", "num": "012", "street": "AIZKIBEL KALEA", "section_code": "002", "id_street": "1240" } } })
Eskaera:
/api/1.0/eu/locate/info/D_4545.jsonp;callback=form%5B0%5D%2Efuncion
Emaitza:
form[0].funcion({ "info": { "type": "postal_id", "postal_code": { "id_municipality": "017", "name": "SALESIANOS, CONVENTO", "bis": " ", "postal_code": "20720", "district_code": "02", "municipality": "AZKOITIA", "num": "012", "street": "AIZKIBEL KALEA", "section_code": "002", "id_street": "1240" } } })
APIren antolaketa hierarkikoa (''namespaces-eak'' edota izenen guneak)
APIaren URL-ak hierarkikoki egituratuta daude. Lehenik eta behin, zein baliabidetara sartu behar den zehazten da identifikatzaile baten bidez.
Namespace | Erabilera |
configuration/ | Eskuragarri dauden geruzei buruzko informazioa |
locate/ | Baliabide (datu) geografikoetara sartzeko |
library/ | Javascript liburutegiak kargatzeko |
osgeo/ | Open Source Geospatial Foundation-ek definitutako APIetara sartzeko (batez ere TMSetara). |
Ondoren, URL-ak gainontzeko baliabideak hierarkikoki identifikatuko ditu, horiek “handitik txikira” sailkatuz.
Aldaketak egiteko REST eragiketak
APIaren egungo bertsioak HTTP-ren GET metodoa onartzen du soilik, hau da, datuak eskuratu daitezke soilik. APIak ez ditu PUT, POST eta DELETE metodoak onartzen.
Segurtasuna eta erabileraren kontrola
APIaren egungo bertsioak ez du erabiltzailea egiaztatzeko sistemarik onartzen (API key) Sarbide guztiak anonimoak dira eta ez daude mugatuta.
URL-en egituraren laburpena
Oinarrizko domeinua | Bertsioa | Locale | Namespace | Baliabidera iristeko ibilbidea | Irudia (formatua) |
b5m.gipuzkoa.eus/api/ | M.m/ | xy/ | vwxyz/ | .../... | .xyz |
Adibidea | |||||
b5m.gipuzkoa.eus/api/ | 1.0/ | eu/ | locate/ | mbr/M_069 | .json |
APIaren definizioa
Definizio hauetako URL-ak bat datoz dagozkion URL-aren aurrezenbakiarekin.
"configuration/" namespace-a
URL horiek konfigurazio datuak itzultzen dituzte.
URL | Laburpena | Deskribapena |
configuration/layers/foreground | Lehen mailako geruzak | Geruzak aktibatuta daude eta bertara TMS bidez sar daiteke. |
configuration/layers/background | Bigarren mailako geruzak | Geruzak aktibatuta daude eta bertara Google, Yahoo edo Microsoft-en APIen bidez sar daiteke. |
Namespace configuration adibideen orrialdea.
"locate/" namespace-a
URL guztiek datuak itzuli eta objektuak aipatzen dituzte.
URL | Laburpena | Deskribapena |
mbr/{code} | Zehaztutako objektuaren Minimum Bounding Rectangle | Objektua inguratzen duen gutxieneko laukizuzenaren koordenatuak |
geometry/{code} | Objektua definitzen duen geometria | Geometria objektu bat irudikatzen duen poligonoa definitzen duten koordenatuen multzoa da. Onartzen diren irudikapenak: GML |
center/{code} | Objektuaren erdia | Objektuaren erdiko koordenatuak |
info/{code} | Objektuaren testu deskribapena | Testu deskribapenean objektuaren izen onartua, mota, etab. zehazten da. |
search/{bilaketa_katea} | Bilatu nahi den terminoa | Bilatu nahi den toponimoaren izena |
Hauek dira baimenduta dauden Objektuak:
Objektua | Kodea | Adibidetzat erabiltzen den balioa |
Eskualdeak | S_codcomarca | S_3 |
Herriak | M_codmuni | M_045 |
Kaleak, eraikin-multzo bezala | K_codmuni_codcalle | K_003_1110 |
Kaleak, bide bezala | V_codmuni_codcalle | V_003_1110 |
Barrutiak eta atalak | SC_codmuni_coddistri_codseccion | SC_045_01_003 |
Posta-helbideak | D_idpostal | D_4545 |
Posta-helbideak2 | F_codmuni_codcalle_portal | F_045_1110_003 F_034_1104_004B |
Eraikinak | E_idarea | E_33360 |
Errepideak eta trena | T_codcarre | T_9044 |
Kilometro-puntua | PK_errepidearenizena_kilometro | PK_GI-2132_5 |
Auzoak (area-kodea) | B_idarea | B_14278 |
Auzoak (izen-kodea) | Z_idbarrio | Z_15400 |
Arroak | C_codcuenca | C_11 |
Hiriguneak | N_codnucleo | N_30145 |
Ibaiak | I_idrio | I_17609 |
Orografia (area-kodea) | O_idarea | O_21669 |
Orografia (izen-kodea) | G_idorogra | G_24071 |
Leizeak | CV_codigo | CV_CE0708 |
Karte megalitikoa | GK_codigo | GK_GARK153 |
Gune megalitikoak | EM_codigo | EM_AR13019 |
Search/-en egindako bilaketaren emaitzaren formatua:
Eremua | Deskribapena |
type | Bilatzen denaren izena, adibidez, ERAIKINA, HERRIA, AUZOA, ERREKA, KALEA, POSTA-HELBIDEA. |
name | Erabiltzaileak idatzitako gako hitza duen elementuaren izena. |
code | Elementuak datu-basean duen kodea. Kode hori ezinbestekoa da API REST-ekin bilaketak egiteko. |
urls | Mapa eta aplikazio ezberdinetara daramaten URL-en array-a. |
ortho | B5Map-eko ortoargazkietara daraman URL-a. |
map | B5Map-era daraman URL-a |
pictometry | B5Map-eko txoribista perspektibara daraman URL-a |
map2d | !B5M-ra daraman URL-a |
info | Kale-izendegira daraman URL-a |
map3d | Gipuzkoa 3D aplikaziora daraman URL-a |
GoogleMaps?-era daraman URL-a |
Namespace locate adibideen orrialdea.
"query/" namespace-a
URL horiei esker, koordenatu baten inguruan dauden objektuei buruzko informazioa lor daiteke.
URL | Laburpena | Deskribapena |
whatisthis/lat/{lat}/lon/{lon}/tolerance/:tolerance/codes/{codes} | Puntu batean dauden objektu geografikoen zerrenda eskaintzen du | (*) |
(*) Koordenatu bat eta bilatu nahi diren objektu geografiko moten zerrenda bat emanez gero, koordenada horrek hartzen duen azaleran dauden objektu geografikoen zerrenda eskaintzen du ("puntu horretan dauden objektuak"). Zehaztutako objektu geografikoak soilik egiaztatzen dira, beraz, ez da inoiz eskainiko zehaztu gabeko objektu geografikorik. Parametroak:
lat: latitudea lon: luzera tolerance: puntu jakin bat emanik, bere inguruan eremu bat definitzen duen erradioa Km-tan, bertan bilaketa egin ahal izateko (balioa 0 izango da puntuan bertan bilatzeko). codes: Kakotxen ("T,D,E") edo izartxoen bidez ("*") banandutako objektu geografikoen zerrenda eskuragarri dauden kode guztiak egiaztatzeko.
"layer/" namespace-a
URL hauek geruza bati (ortoargazkia, mapa edota pictometry) dagokion informazioa eskaintzen dute.
URL | Deskribapena |
layer/scenetype/layer/{layer}/mbr/xmin/{xmin}/ymin/{ymin}/xmax/{xmax}/ymax/{ymax} | MBR-a Gipuzkoa barruan, pixka bat aterata edota Gipuzkoatik kanpo dagoen egiaztatu. Testu formatuan itzuli: * 1: Gipuzkoa barruan * 2: Pixka bat aterata * 3: Gipuzkoatik kanpo |
Namespace layer adibideen orrialdea.
"pictometry/" Namespace-a
URL hauek pictometry irudiei buruzko informazioa erakusten dute,
pictometry/coordinate-search/lat/{lat}/lon/{lon}.{format} | Koordenatu jakin batzuk emanda, eskuragarri dauden pictometry irudiak lortzen ditu. Ikuspegien zerrenda bat eskaintzen du eta ikuspegi bakoitzetik: * Irudiaren oinarriko TMS URL-a * Jatorriko koordenada planarrei dagokien "erdigunea" adierazten duen koordenada bat irudi horren barnean * irudiaren orientazioa (N/S/E/O/NW...) |
pictometry/checkfast/lat/{lat}/lon/{lon}.{format} | Emandako koordenatuen pictometry ba ote dagoen egiaztazen du modu azkarrean. TRUE ala FALSE erantzuten du. |
"Namespace pictometry adibideen orrialdea".
"library/" Namespace-a
URL hauei esker, bezeroak Javascript liburutegiak kargatu ditzake. Oinarrizko liburutegia “openlayers” bada ere, adibide (eta produktu) guztietan “prototype” eta “scriptaculous” erabiliko dira. Horregatik, momentuz, liburutegi horiek ere bezeroei irekita egongo dira.
Ibilbidea errazteko liburutegiaren izenarekin osatutako aurrizki bat erabiliko dugu, izan ere, openlayers/-en barruan OpenLayers-ek behar dituen baliabideak (img/, css/...) gordetzen dituzten direktorio “ezkutuan” baitaude.
Bezeroek liburutegiak bestelako guneetatik ere karga ditzakete.
URL | Resumen | Descripción |
openlayers/OpenLayers.js | OpenLayers liburutegia, KONTUZ! "OpenLayers.js" idatzi behar da (eta ez “openlayers.js” adibidez) . Horrela egiten ez bada ezin da liburutegia behar bezala kargatu (OpenLayers liburutegiaren ezarpen xehetasun bat da). | http://openlayers.org/ |
openlayers/OpenLayers.js.version | Hornitzen dugun OpenLayers liburutegiaren bertsioa | |
prototype/prototype.js | Prototype liburutegia | http://www.prototypejs.org/ |
prototype/prototype.js.version | Hornitzen dugun Prototype liburutegiaren bertsioa | |
scriptaculous/scriptaculous.js | script.aculo.us liburutegia | http://script.aculo.us/ |
scriptaculous/scriptaculous.js.version | Hornitzen dugun script.aculo.us liburutegiaren bertsioa |
Namespace library adibideen orrialdea.
"osgeo/" namespace-a
URL hauek OSGEO definitutako “estandarretara” sartzeko erabiltzen dira. Momentuz, TMS-etara sartzeko soilik erabiltzen dira.
URL | Laburpena | Deskribapena | Adibidea |
osgeo/tms/tileset/1.0.0/ort/.. | OpenLayersentzako Tile Resources-ak | Ortofotoak (Eguneratua) | http://b5m.gipuzkoa.eus/api/1.0/eu/osgeo/tms/tileset/1.0.0/ort/17/64822/83058.jpg |
osgeo/tms/tileset/1.0.0/map/.. | OpenLayersentzako Tile Resources-ak | Mapa (Eguneratua) | http://b5m.gipuzkoa.eus/api/1.0/eu/osgeo/tms/tileset/1.0.0/map/17/64822/83058.png |
osgeo/tms/tileset/1.0.0/ort2006/.. | OpenLayersentzako Tile Resources-ak | 2006ko ortofotoak | http://b5m.gipuzkoa.eus/api/1.0/eu/osgeo/tms/tileset/1.0.0/ort2006/17/64822/83058.jpg |
osgeo/tms/tileset/1.0.0/map2008/.. | OpenLayersentzako Tile Resources-ak | 2006ko mapa | http://b5m.gipuzkoa.eus/api/1.0/eu/osgeo/tms/tileset/1.0.0/map2008/17/64822/83058.png |
Eskuragarri dauden kartografiak:
Kartografia | Urtea | ID |
Mapa | egungoa | map |
2010 | map2010 | |
2009 | map2009 | |
2008 | map2008 | |
2007 | map2007 | |
Ortofotoa | egungoa | ort |
2009 | ort2009 | |
2008 | ort2008 | |
2007 | ort2007 | |
2006 | ort2006 | |
2005 | ort2005 | |
2004 | ort2004 | |
2002 | ort2002 | |
2001 | ort2001 | |
Pictometry | 2007 | pictometry |
Namespace osgeo adibideen orrialdea.
Aplikazioaren adibidea
API honek eskaintzen dituen aplikazioetako bat ikus daiteke adibide honetan.