domingo, 3 de abril de 2016

Android, Heroku, Node.js para publicar un WebService REST

En el post anterior vimos como abrir una cuenta en heroku, que nos permite tener una plataforma gratuita para publicar servicios web, lo cual nos habilita a crear un backend para desarrollo. El lenguaje que elegimos en Node.js aunque también nos ofrece Java, Rubi y varios mas

En este post, vamos a continuar los ejemplos que configuramos y vamos a crear una sencilla API REST que publicará en Node.js un listado de productos.

Aclaración:
En este post no utilizaremos una base de datos (por ejemplo MongoDB) detrás de Node.js
Esto lo realizaremos en un post posterior, donde exploraremos con instalarla localmente y en el servidor. Para los que quieran




Comencemos

Paso 01: Nuestros recursos

Creamos el código para tres productos en Node.js, el FrontEnd es una aplicación  en Android y contiene la clase producto: 
   
public class Producto {

    private int id;
    private String description;
    private double price;
    private String image;

    public Producto(){ }

    // Getter y Setter
}

Tenemos las siguientes imágenes subidas al servidor Heroku:


Que son las figuras de las piezas de Ajedrez, juego que amo:



Repasemos como subimos estas imagen desde Local (PC) a Remoto (Heroku) con Git:

  
MacBook-Pro-de-Pablo:node-js-getting-started pabloin$ pwd
/Users/pabloin/Desktop/_tmpAndroid/_heroku/node-js-getting-started
MacBook-Pro-de-Pablo:node-js-getting-started pabloin$ git commit -m "Agrego imagenes de ajedrez"
[master 70bc0ab] Agrego imagenes de ajedrez
 7 files changed, 2 insertions(+), 2 deletions(-)
 create mode 100644 public/images/Pieza01_rey.png
 create mode 100644 public/images/Pieza02_dama.png
 create mode 100644 public/images/Pieza03_torre.gif
 create mode 100644 public/images/Pieza04_alfil.gif
 create mode 100644 public/images/Pieza05_caballo.gif
 create mode 100644 public/images/Pieza06_peon.gif
MacBook-Pro-de-Pablo:node-js-getting-started pabloin$ git push heroic master
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
..
remote: Verifying deploy.... done.
To https://git.heroku.com/infinite-lowlands-19433.git
   f2abe98..70bc0ab  master -> master
MacBook-Pro-de-Pablo:node-js-getting-started pabloin$ git push heroku master
MacBook-Pro-de-Pablo:node-js-getting-started pabloin$ heroku local
[WARN] No ENV file found
[OKAY] Trimming display Output to 121 Columns
12:24:35 AM web.1 |  Node app is running on port 5000

 



Paso 02: Creamos la API

Creamos la API REST:
  • https://infinite-lowlands-19433.herokuapp.com/chess/api/productos
Y para definir un Json sencillo, con Node.js creamos:

// - http://localhost:5000/chess/api/chess
// - http://localhost:5000/chess/api/chess/dama
// - http://localhost:5000/chess/api/chess/caballo
//
// - https://infinite-lowlands-19433.herokuapp.com/chess/api/chess
// - https://infinite-lowlands-19433.herokuapp.com/chess/api/chess/dama
// - https://infinite-lowlands-19433.herokuapp.com/chess/api/chess/caballo
//
var chess =
    [
      {"id":1,"description":"Rey     ","image":"https:\/\/infinite-lowlands-19433.herokuapp.com\/images\/Pieza01_rey.png",     "price":100},
      {"id":2,"description":"Dama    ","image":"https:\/\/infinite-lowlands-19433.herokuapp.com\/images\/Pieza02_dama.png",    "price":9},
      {"id":3,"description":"Torre   ","image":"https:\/\/infinite-lowlands-19433.herokuapp.com\/images\/Pieza03_torre.gif",   "price":5},
      {"id":4,"description":"Alfil   ","image":"https:\/\/infinite-lowlands-19433.herokuapp.com\/images\/Pieza04_alfil.gif",   "price":3},
      {"id":5,"description":"Caballo ","image":"https:\/\/infinite-lowlands-19433.herokuapp.com\/images\/Pieza05_caballo.gif", "price":3},
      {"id":6,"description":"Peón    ","image":"https:\/\/infinite-lowlands-19433.herokuapp.com\/images\/Pieza06_peon.gif",    "price":1}
    ];

app.get('/chess/api/chess', function(req, res){        res.json(chess);   });

app.get('/chess/api/chess/rey',     function(req, res){   res.json(chess[0]);   });
app.get('/chess/api/chess/dama',    function(req, res){   res.json(chess[1]);   });
app.get('/chess/api/chess/torre',   function(req, res){   res.json(chess[2]);   });
app.get('/chess/api/chess/alfil',   function(req, res){   res.json(chess[3]);   });
app.get('/chess/api/chess/caballo', function(req, res){   res.json(chess[4]);   });
app.get('/chess/api/chess/peon',    function(req, res){   res.json(chess[5]);   });




Con este paso concluimos la creación de una API REST, algunos de los recursos son:




La intención es dejar la API pública para consumirla desde un dispositivo Android

ToDo - Próximo Paso:

En el siguiente Post, escribiremos una API que en vez de imágenes de las piezas de Ajedrez, nos entregue ejercicios de táctica de ajedrez (Mate en 1, en 2, etc) con un JSON donde tendremos las imágenes, la posición FEN y la solución





1 comentario:

  1. En el post anterior vimos como abrir una cuenta en heroku, que nos permite tener una plataforma gratuita para publicar servicios web, lo cual nos habilita a crear un backend para desarrollo. El lenguaje que elegimos en Node.js aunque también nos ofrece Java, Rubi y varios mas. Más claves en este post, vamos a continuar los ejemplos que configuramos y vamos a crear una sencilla API REST que publicará en Node.js un listado de productos.

    ResponderEliminar