Implementación en node.js
del API de backend para el servicio de datos abiertos sobre transporte público
node
versiónv6.2.1
(https://github.com/creationix/nvm)docker
versión1.9.1
docker-compose
versión1.6.2
Se asume que los siguientes comandos se están ejecutando desde el directorio del proyecto ./buses-api
- Descargar las dependencias
npm install
- Levantar el servicio de base de datos
export ORIENTDB_ROOT_PASSWORD="root"
docker-compose up
- Crear la base de datos vacía y el usuario de la aplicación iniciando el engine por primera vez
bin/www
- Inicializar el esquema en la base de datos recién creada
node_modules/orientjs/bin/orientjs migrate up
POST http://localhost:3000/buses/v0.1/route
- Request
{
"id": "420",
"stops": [
{
"name": "Heredia",
"location": {
"latitude": 9.894389,
"longitude": -81.38932
}
},
{
"name": "San José",
"location": {
"latitude": 9.43843,
"longitude": -84.43784
}
}
],
"path": [
{
"latitude": 9.894389,
"longitude": -81.38932
},
{
"latitude": 9.32832,
"longitude": -81.38232
},
{
"latitude": 10.4384,
"longitude": -84.438943
},
{
"latitude": 9.43843,
"longitude": -84.43784
}
]
}
- Response
{
"route": "421"
}
- Request
GET http://localhost:3000/buses/v0.1/route/id/420
- Response
{
"id": "420",
"stops": [
{
"location": {
"latitude": 9.894389,
"longitude": -81.38932
},
"name": "Heredia",
"routes": [
"420",
"400",
"410"
],
"createdOn": "2016-01-17T04:19:59.000Z",
"lastUpdatedOn": "2016-01-17T04:19:59.000Z"
},
{
"location": {
"latitude": 9.43843,
"longitude": -84.43784
},
"name": "San José",
"routes": [
"420",
"415",
"400"
],
"createdOn": "2016-01-17T04:19:59.000Z",
"lastUpdatedOn": "2016-01-17T04:19:59.000Z"
}
],
"path": [
{
"latitude": 9.894389,
"longitude": -81.38932
},
{
"latitude": 9.32832,
"longitude": -81.38232
},
{
"latitude": 10.4384,
"longitude": -84.438943
},
{
"latitude": 9.43843,
"longitude": -84.43784
}
]
}
- Request
GET http://localhost:3000/buses/v0.1/route/ids
- Response
[
"400",
"410",
"415",
"420",
"421"
]
POST /buses/v0.1/trace
{
"deviceId": "...",
"timestamp": "UTC timestamp string"
}
La propiedad deviceId
debe corresponder a algún valor que identifique de manera única al dispositivo con respecto a la aplicación trazador. Ver http://android-developers.blogspot.com/2011/03/identifying-app-installations.html
HTTP 200 OK
{
"traceId": "..."
}
Cualquier otro código HTTP en caso de error.
POST /buses/v0.1/trace/{traceId}/points
{
"deviceId": "...",
"timestamp": "UTC timestamp string",
"points": [
{
"latitude": "...",
"longitude": "..."
},
{
"latitude": "...",
"longitude": "..."
},
{
"latitude": "...",
"longitude": "..."
},
{
"latitude": "...",
"longitude": "..."
}
]
}
HTTP 200 OK
Cualquier otro código HTTP en caso de error.
POST /buses/v0.1/trace/{traceId}/stop
{
"deviceId": "...",
"timestamp": "UTC timestamp string",
"stop": {
"latitude": ...,
"longitude": ...
}
}
HTTP 200 OK
Cualquier otro código HTTP en caso de error.
Para escribir los metadatos:
PUT /buses/v0.1/trace/{traceId}/metadata
{
"deviceId": "...",
"timestamp": "UTC timestamp string",
"routeCode": "400",
"routeName": "Heredia - San José por La Uruca",
"routePrice": 560.0
}
HTTP 200 OK
Cualquier otro código HTTP en caso de error.
Para el folksonomy necesita leer todos los metadatos existentes:
GET /buses/v0.1/trace/metadata
HTTP 200 OK
[
{
"traceId": "...",
"deviceId": "...",
"timestamp": "UTC timestamp string",
"routeCode": "400",
"routeName": "Heredia - San José por La Uruca",
"routePrice": 560.0
},
{
"traceId": "...",
"deviceId": "...",
"timestamp": "UTC timestamp string",
"routeCode": "420",
"routeName": "Los Lagos de Heredia - San José por La Uruca",
"routePrice": 480.0
},
...
]
Cualquier otro código HTTP en caso de error.
PUT /buses/v0.1/trace/{traceId}
Para finalizar una ruta:
{
"status": "finished"
}
Para descartar una ruta:
{
"status": "discarded"
}
HTTP 200 OK
Cualquier otro código HTTP en caso de error.