/mesas-ave-api

Mesas AVE API REST — NodeJS Backend para la App móvil Mesas AVE.

Primary LanguageJavaScript

Mesas AVE API REST

NodeJS Backend para la App móvil Mesas AVE.

Mesas AVE es una App móvil para potenciar la economía colaborativa compartiendo mesa en trenes de tipo AVE Renfe.

A continuación se describen todos los servicios que ofrece el API.

http://mesasave.herokuapp.com/api/v1

Listado de servicios

Resumen

Servicio Descripción Requiere Authorization
GET stations Obtiene todas las estaciones No
GET stations/[id] Obtiene una estación No
GET tables Obtiene todas las mesas No
GET tables/[id] Obtiene una mesa No
POST tables Crea una mesa
PUT tables/[id] Actualiza una mesa
DELETE tables/[id] Elimina una mesa
GET users Obtiene todos los usuarios No
GET users/[id] Obtiene un usuario No
POST users Crea un usuario No
PUT users/[id] Actualiza un usuario
POST users/[id]/rememberPassword Envía un correo con la contraseña No
POST users/login Comprueba los credenciales

Dominio

  • stations: Estaciones por las que pasan los trenes AVE.
  • tables: Cada una de las mesas con 4 asientos que se encuentran en los trenes AVE.
  • availablePlaces: Asientos libres de una mesa.
  • fromDateTime: Fecha y hora de salida de una mesa.
  • toDateTime: Fecha y hora de llegada de una mesa.
  • _fromStation: Estación de origen de una mesa.
  • _toStation: Estación destino de una mesa.
  • <base64>: Codificación de las credenciales de un usuario. Por ejemplo, para un usuario con email="Aladin" y password="open sesame" el base64 sería aplicar la codificación base64 a la cadena "Aladin:open sesame", es decir, QWxhZGRpbjpvcGVuIHNlc2FtZQ==
  • querystring: cadena para filtrar los resultados devueltos por un servicio. Siguen el formato estándar: ?parámetro1=valor1&parámetro2=valor2

Servicios

GET stations

Description: Obtiene todas las estaciones.

URL: http://mesasave.herokuapp.com/api/v1/stations

Method: GET

Request body:

""

Reponse body:

[
  	{
		"_id": "550803afe4b018f3e291fff9",
		"name": "A Albergueria-Prado"
	},
	{
		"_id": "560803afe4b018f3e291fff9",
		"name": "Alicante"
	}
]

GET stations/[id]

Description: Obtiene una estación.

URL: http://mesasave.herokuapp.com/api/v1/stations/[id]

Method: GET

Request body:

""

Reponse body:

{
	"_id": "550803afe4b018f3e291fff9",
	"name": "A Albergueria-Prado"
}

GET tables

Description: Obtiene todas las mesas. Se pueden aplicar filtros mediante Query string. La Query string es opcional.

Para obtener las 100 primeras mesas con 3 plazas disponibles ordenadas por el parámetro fromDatetime de forma descencente sería:

http://www.mesasave.herokuapp.com/api/v1/tables?availablePlaces=3&skip=0&limit=100&sort=-fromDatetime.

Si quisiéramos la misma búsqueda pero por orden ascendente habría que cambiar -fromDatetime por fromDatetime.

El parámetro fromDatetime admite 1 o 2 valores dependiendo de si se quieren obtener las mesas de un día en concreto o las mesas entre un rango de fechas.

Para obtener todas las mesas de una fecha en concreto:

http://www.mesasave.herokuapp.com/api/v1/tables?fromDatetime=yyyy-MM-ddTHH:mm:ss.mmmZ.

Para obtener todas las mesas entre un rango de fechas:

http://www.mesasave.herokuapp.com/api/v1/tables?fromDatetime=yyyy-MM-ddTHH:mm:ss.mmmZ&fromDatetime=yyyy-MM-ddTHH:mm:ss.mmmZ.

URL: http://mesasave.herokuapp.com/api/v1/tables[querystring]

Method: GET

Request body:

""

Reponse body:

[
  	{
		"_id": "550803afe4b018f3e291fff9",
		"fromDatetime": "2011-05-26T07:56:00.123Z",
		"toDatetime": "2011-05-26T10:56:00.123Z",
		"availablePlaces": 3,
  		"_fromStation": {
			"_id": "550803afe4b018f3e291fff9",
			"name": "A Albergueria-Prado"
		},
		"_toStation": {
			"_id": "560803afe4b018f3e291fff9",
			"name": "Alicante"
		},
		"_user": {
			"_id": "500803afe4b018f3e291fff9",
			"name": "Pepe López",
			"email": "pepe@gmail.com",
			"phone": "697123123"
		}
	},
	{
		...another object
	}
]

GET tables/[id]

Description: Obtiene una mesa.

URL: http://mesasave.herokuapp.com/api/v1/tables/[id]

Method: GET

Request body:

""

Reponse body:

{
	"_id" : "550803afe4b018f3e291fff9",
	"fromDatetime": "2011-05-26T07:56:00.123Z",
	"toDatetime": "2011-05-26T10:56:00.123Z",
	"availablePlaces": 3,
	"_fromStation": {
		"_id": "550803afe4b018f3e291fff9",
		"name": "A Albergueria-Prado"
	},
	"_toStation": {
		"_id": "560803afe4b018f3e291fff9",
		"name": "Alicante"
	},
	"_user": {
		"_id": "500803afe4b018f3e291fff9",
		"name": "Pepe López",
		"email": "pepe@gmail.com",
		"phone": "697123123"
	}
}

POST tables

Description: Crea una mesa.

URL: http://mesasave.herokuapp.com/api/v1/tables

Method: POST

Content-type: application/json

Authorization: Basic <base64>

// <base64> = base64("email:password")

Request body:

{
	"fromDatetime": "2011-05-26T07:56:00.123Z",
	"toDatetime": "2011-05-26T10:56:00.123Z",
	"availablePlaces": 3,
	"_fromStation": "550803afe4b018f3e291fff9",
	"_toStation": "560803afe4b018f3e291fff9",
	"_user": "500803afe4b018f3e291fff9"
}

Reponse body:

{
	"_id" : "550803afe4b018f3e291fff9",
	"fromDatetime": "2011-05-26T07:56:00.123Z",
	"toDatetime": "2011-05-26T10:56:00.123Z",
	"availablePlaces": 3,
	"_fromStation": {
		"_id": "550803afe4b018f3e291fff9",
		"name": "A Albergueria-Prado"
	},
	"_toStation": {
		"_id": "560803afe4b018f3e291fff9",
		"name": "Alicante"
	},
	"_user": {
		"id": 500803afe4b018f3e291fff9"
		"name": "Pepe López",
		"email": "pepe@gmail.com",
		"phone": "697123123"
	}
}

PUT tables/[id]

Description: Actualiza una mesa. Los parámetros que no se envíen no se actualizarán.

URL: http://mesasave.herokuapp.com/api/v1/tables/[id]

Method: PUT

Content-type: application/json

Authorization: Basic <base64>

// <base64> = base64("email:password")

Request body:

{
	"fromDatetime": "2011-05-26T07:56:00.123Z",
	"toDatetime": "2011-05-26T10:56:00.123Z",
	"availablePlaces": 2,
	"_fromStation": "550803afe4b018f3e291fff9",
	"_toStation": "560803afe4b018f3e291fff9",
	"_user": "500803afe4b018f3e291fff9"
}

Reponse body:

{
	"_id" : "550803afe4b018f3e291fff9",
	"fromDatetime": "2011-05-26T07:56:00.123Z",
	"toDatetime": "2011-05-26T10:56:00.123Z",
	"availablePlaces": 2,
	"_fromStation": {
		"_id": "550803afe4b018f3e291fff9",
		"name": "A Albergueria-Prado"
	},
	"_toStation": {
		"_id": "560803afe4b018f3e291fff9",
		"name": "Alicante"
	},
	"_user": {
		"id": 500803afe4b018f3e291fff9"
		"name": "Pepe López",
		"email": "pepe@gmail.com",
		"phone": "697123123"
	}
}

DELETE tables/[id]

Description: Elimina una mesa.

URL: http://mesasave.herokuapp.com/api/v1/tables/[id]

Method: DELETE

Request body:

""

Reponse body:

""

GET users

Description: Obtiene todos los usuarios.

URL: http://mesasave.herokuapp.com/api/v1/users

Method: GET

Request body:

""

Reponse body:

[
  	{

		"_id": "500803afe4b018f3e291fff9",
		"name": "Pepe López",
		"email": "pepe@gmail.com",
		"phone": "697123123"
	},
	{
		...another object
	}
]

GET users/[id]

Description: Obtiene un usuario.

URL: http://mesasave.herokuapp.com/api/v1/users/[id]

Method: GET

Request body:

{
	"_id" : "500803afe4b018f3e291fff9"
}

Reponse body:

{		
	"_id": "500803afe4b018f3e291fff9",
	"name": "Pepe López",
	"email": "pepe@gmail.com",
	"phone": "697123123"
}

POST users

Description: Crea un usuario. Todos los campos son obligatorios.

URL: http://mesasave.herokuapp.com/api/v1/users

Method: POST

Content-type: application/json

Request body:

{
	"name": "Pepe López",
	"email": "pepe@gmail.com",
	"phone": "697123123",
	"password": "1234"
}

Reponse body:

{
	"_id": "500803afe4b018f3e291fff9",
	"name": "Pepe López",
	"email": "pepe@gmail.com",
	"phone": "697123123",
	"password": "1234"
}

PUT users/[id]

Description: Actualiza un usuario. Los parámetros que no se envíen no se actualizarán. Si se quiere cambiar el campo "password" hay que enviar también los parámetros "newPassword" y "repeatNewPassword" y ambos deben coincidir.

URL: http://mesasave.herokuapp.com/api/v1/users/[id]

Method: PUT

Content-type: application/json

Authorization: Basic <base64>

// <base64> = base64("email:password")

Request body:

{
	"name": "Pepe López",
	"email": "pepe@gmail.com",
	"phone": "697123123",
	"password": "1234",
	"newPassword": "4321",
	"repeatNewPassword": "4321",
}

Reponse body:

{
	"_id": "500803afe4b018f3e291fff9",
	"name": "Pepe López",
	"email": "pepe@gmail.com",
	"phone": "697123123",
	"password": "1234" // este parámetro sólo aparecerá si se ha actualizado el campo "password"
}

POST users/[id]/rememberPassword

Description: Envía un correo con la contraseña del usuario.

URL: http://mesasave.herokuapp.com/api/v1/users/[id]/rememberPassword

Method: POST

Request body:

""

Reponse body:

""

POST users/login

Description: Comprueba si unos credenciales (email/password) son correctos.

URL: http://mesasave.herokuapp.com/api/v1/users/login

Method: POST

Authorization: Basic <base64>

// <base64> = base64("email:password")

Request body:

""

Reponse body:

{
	"_id": "500803afe4b018f3e291fff9",
	"name": "Pepe López",
	"email": "pepe@gmail.com",
	"phone": "697123123",
	"password": "1234"
}