Friday, December 21, 2018

rest hapi echo


1. At first, we create the repository, i'm using bitbucket and mercurial

2. We clone the repository locally

educacion@educacion:~/src/resthapi$ hg clone https://bitbucket.org/maximilianou/rest_echo_hapi/

3. List this folder to see the files.

educacion@educacion:~/src/resthapi$ ls
rest_echo_hapi

4. Change Dir, inside the path where you will have the code.

educacion@educacion:~/src/resthapi$ cd rest_echo_hapi/

educacion@educacion:~/src/resthapi/rest_echo_hapi$ ls -a
.  ..  .hg  LICENSE.txt  README.md

5. Create the package.json

educacion@educacion:~/src/resthapi/rest_echo_hapi$ npm init -y

6. let see the repository files status sync

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status
? package.json

7. Add new files

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg add .

8. Verify the locally status change.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status
A package.json

9. Commit changes in the local repository.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -m 'initial commit' -u maximilianou@gmail.com

10. Upload Changes to the remote repository ( origin master ) 

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push

11. Let's install Hapijs

educacion@educacion:~/src/resthapi/rest_echo_hapi$ npm install hapi --save

12. Verify the changes in package.json

educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat package.json 
{
  "name": "rest_echo_hapi",
  "version": "1.0.0",
  "description": "This README would normally document whatever steps are necessary to get your application up and running.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "hapi": "^17.8.1"
  }
}

13. Add to .hgignore what does'nt have to be sync to the central ( remote ) repository.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ vi .hgignore

14. Let's see the content of my hgignore now.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat .hgignore 
# Add any directories, files, or patterns you don't want to be tracked by version control
# Project #
# System #
.DS_Store
# Mercurial #
.orig
# Node #
node_modules/
# Grunt build #
dist/
# Bower #
bower_components/
public/system/lib
.bower-cache/
.bower-registry/
.bower-tmp/
.tmp/
# IDE #
nbproject/
.idea/
atlassian-ide-plugin.xml

15. Add configuration files for this instance of reposisory.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg add .
adding .hgignore
adding package-lock.json

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status
M package.json
A .hgignore
A package-lock.json

16. Commit this repository sanity change.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -m 'repository sanity' -u maximilianou@gmail.com

17. Upload to the central repository

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push

18. Now, we can create a directory structure, just to beginning with the right foot, then walk.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ mkdir server

19. Create our first javascript server file, or program.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ touch server/index.js

20. Here we create the server in port 3000, localhost. Object Oriented Programming.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat server/index.js 
const Hapi = require('hapi');
class EchoServerHapi{
    constructor(args){
        this.server = Hapi.server(args);
    };
    async init(){
        try {
          await this.server.start();
          console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`);
        } catch (error) {
          console.log('Error while trying to run echo Server Hapi:: ' + error.message);
        }
      };      
};
const firstEchoServer = new EchoServerHapi({
    port: 3000,
    host: 'localhost',
    app: {}
  });
firstEchoServer.init();

21. It is running.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ node server/index.js 
Here we have the echo Server Hapi running:: http://localhost:3000

22. And.. the route is not specified.

educacion@educacion:~$ curl http://localhost:3000/
{"statusCode":404,"error":"Not Found","message":"Not Found"}

23. Adding some route. Simple way at first, just a method routing() in the class.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ cat server/index.js 
const Hapi = require('hapi');
class EchoServerHapi{
    constructor(args){
        this.server = Hapi.server(args);
    }
    async init(){
        try {
          await this.routing();
          await this.server.start();
          console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`);
        } catch (error) {
          console.log('Error while trying to run echo Server Hapi:: ' + error.message);
        }
    }
    async routing(){
        this.server.route({
            method: 'GET',
            path: '/',
            handler: (request, h) => {
                return 'Hello, Javascript Developer!\n';
            }
        });        
        this.server.route({
            method: 'GET',
            path: '/{name}',
            handler: (request, h) => {
                return 'Hello, ' + encodeURIComponent(request.params.name) + '!\n';
            }
        });
    }
}
const firstEchoServer = new EchoServerHapi({
    port: 3000,
    host: 'localhost',
    app: {}
  });
firstEchoServer.init();

24. running the server, from the command line.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ node server/index.js 
Here we have the echo Server Hapi running:: http://localhost:3000

25. Checking the path /

educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl http://localhost:3000/
Hello, Javascript Developer!

26. Checking the path /Mafalda, just an Example Case!!

educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl http://localhost:3000/Mafalda
Hello, Mafalda!

27. Upload changes to the central repository.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status
M server/index.js
educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -u maximilianou@gmail.com -m 'Hello URL routing()'
educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status
educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push

28. Now, adding GET, POST, PUT to our near rest echo.

const Hapi = require('hapi');
class EchoServerHapi{
    constructor(args){
        this.server = Hapi.server(args);
    }
    async init(){
        try {
          await this.routing();
          await this.server.start();
          console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`);
        } catch (error) {
          console.log('Error while trying to run echo Server Hapi:: ' + error.message);
        }
    }
    async routing(){
        this.server.route({
            method: 'GET',
            path: '/',
            handler: (request, h) => {
                return 'Hello, Javascript Developer!\n';
            }
        });        
        this.server.route({
            method: 'GET',
            path: '/{name}',
            handler: (request, h) => {
                return 'Hello, ' + encodeURIComponent(request.params.name) + '!\n';
            }
        });
        this.server.route({
            method: 'POST',
            path: '/msg',
            handler: (request, h) => {
                return "POSTing:: "+JSON.stringify(request.payload) + '\n';
            }
        });
        this.server.route({
            method: 'PUT',
            path: '/msg',
            handler: (request, h) => {
                return "PUTing:: "+JSON.stringify(request.payload) + '\n';
            }
        });
    }
}
const firstEchoServer = new EchoServerHapi({
    port: 3000,
    host: 'localhost',
    app: {}
  });
firstEchoServer.init();

29. Now, checking the post and put, with --data, body of http for POST and PUT, Reference: https://tools.ietf.org/html/rfc2616

educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl --header "Content-Type: application/json" --request POST --data '{"clave":"valor"}' http://localhost:3000/msg
POSTing:: {"clave":"valor"}

educacion@educacion:~/src/resthapi/rest_echo_hapi$ curl --header "Content-Type: application/json" --request PUT --data '{"clave":"valor"}' http://localhost:3000/msg
PUTing:: {"clave":"valor"}

30. Commiting changes to the central repository.

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg status
M server/index.js

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg commit -u maximilianou@gmail.com -m 'post, put method echo'

educacion@educacion:~/src/resthapi/rest_echo_hapi$ hg push


31. Compliting echo rest, get, post, put, and DELETE here

const Hapi = require('hapi');
class EchoServerHapi{
    constructor(args){
        this.server = Hapi.server(args);
    }
    async init(){
        try {
          await this.routing();
          await this.server.start();
          console.log(`Here we have the echo Server Hapi running:: ${this.server.info.uri}`);
        } catch (error) {
          console.log('Error while trying to run echo Server Hapi:: ' + error.message);
        }
    }
    async routing(){
        this.server.route({
            method: 'GET',
            path: '/',
            handler: (request, h) => {
                return 'Hello, Javascript Developer!\n';
            }
        });        
        this.server.route({
            method: 'GET',
            path: '/{name}',
            handler: (request, h) => {
                return 'Hello, ' + encodeURIComponent(request.params.name) + '!\n';
            }
        });
        this.server.route({
            method: 'POST',
            path: '/msg',
            handler: (request, h) => {
                return "POSTing:: "+JSON.stringify(request.payload) + '\n';
            }
        });
        this.server.route({
            method: 'PUT',
            path: '/msg',
            handler: (request, h) => {
                return "PUTing:: "+JSON.stringify(request.payload) + '\n';
            }
        });
        this.server.route({
            method: 'DELETE',
            path: '/{name}',
            handler: (request, h) => {
                return 'Bye, ' + encodeURIComponent(request.params.name) + '!\n';
            }
        });
    }
}
const firstEchoServer = new EchoServerHapi({
    port: 3000,
    host: 'localhost',
    app: {}
  });
firstEchoServer.init();

32. Checking HTTP DELETE, data into the url, like http get.

educacion@educacion:~$ curl --request DELETE http://localhost:3000/Pedrito
Bye, Pedrito!



No comments: