Ruta EndPoint API REST - UNIZAR-30226-2017-02/backend GitHub Wiki

Endpoint

Es cada una de las direcciones a las cuales el frontend puede conectarse para solicitar o requerir un cambio en la información del servidor ( ej : approf.com/login , approf.com/usuario/modificar , approf.com/buscar? ... ). Por tanto el servidor dispondrá de tantas como características públicas queramos implementar.

En el caso del login de un usuario, el frontend recogería el username y la password y se conectaría con el backend en la dirección approf.com/login mediante una petición POST que contendría los datos recogidos por el frontend. El resultado podría ser un JSON del tipo :

{
  operation : 'login',
  resultCode : '0',
  status : 'success'
}

Al recibirlo, el frontend accedería al código de error del Json recibido y si es igual a cero, significa que el inicio de sesión ha sido correcto.

Implementación de una ruta en el backend

Mediante un sistema de carga, cada vez que el servidor se inicia, lee las rutas de una carpeta especifica ('/rutas') y ejecuta el código en esos fichero, generando así la función que será llamada cuando se reciba la petición a dicha dirección. Un ejemplo de fichero .js que contendría la implementación de una ruta de la API REST sería el siguiente :

// Imports / dependencias que usa el código
var mongoose = require('mongoose');

// Modelo para acceder a la información de la BBDD
var Usuario = require('./../modelos/usuario');

// Defines un modulo que recibe como parámetro el objeto express (framework server http)
module.exports = function (app) {

  // Asigna a la petición POST con dirección (/api/usuario/datos'),
  // utilizando un middleware ( código que se ejecuta en todas las peticiones y antes del código final)
  // la siguiente función (la cual es anónima)
  app.post('/api/usuario/datos', middleWare.AuthMiddleware, function(req, res) {
      
  // En req esta el objecto request y en res el objeto que se encarga de lo que se enviará de vuelta al            cliente

      // Busca un único usuario cuyo username es el obtenido de los parámetros POST y ejecuta una función anónima
      Usuario.findOne({userName: req.decoded.user.username}, function(err,data){
         
         // Err contiene una excepción / error en la búsqueda

         // Data contiene un objeto con la información del usuario (como se definió en el modelo / tabla ficticia)
            o en este caso específico null si no había usuario que tuviera dicho username

         // Asigna a la respuesta el código de todo correcto (200) y envía el objeto en 'data' como json.
         res.status(200).json(data);
      };
  }
}

Peticion POST

Si una petición post tuviese dos campos, véase A y B, la información de dichos campos se encontraría en :

A -> req.body.A

B -> req.body.B

(los nombres en POST son los nombres para acceder luego a ellos)

Peticion GET

Si una petición get tuviese dos variables, véase A y B, la información de dichas variables se encontraría en (si existiesen, sino tendrían null) :

A -> req.query.A

B -> req.query.B

(los nombres de las variables en GET son los nombres para acceder luego a ellos)