10 minutes of
Hapiness
Daniela Borges
Opensoft Barcamp - April 25, 2015
10 minutes of hapiness
A rich framework for building applications and services
// daniela borges
10 minutes of hapiness
walmart case study
// daniela borges
10 minutes of hapiness
walmart case study
// daniela borges
10 minutes of hapiness
walmart case study
express
Most of the effort focused on changing the interaction between Express and the business logic (...)
[lack of] support for authentication, encrypted cookies, input validation, ...
Eran Hammer
(nodejs Architect at Walmart)
( source: http://hueniverse.com/2012/12/20/hapi-a-prologue/ )
// daniela borges
Hapi
(HTTP API server)
10 minutes of hapiness
walmart case study
-
configuration is better than code
-
business logic must be isolated from transport layer
delivering business value
// daniela borges
10 minutes of hapiness
A rich framework for building
applications and services
focus on writing reusable application logic
Hapi
// daniela borges
10 minutes of hapiness
Stats
+62k downloads last month
Current version 8.4.0
// daniela borges
10 minutes of hapiness
How easy could it be to
start a server?
// daniela borges
10 minutes of hapiness
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({
host: 'localhost',
port: 8000
});
server.start();
Create!.. a server
// daniela borges
10 minutes of hapiness
(...)
server.route({
method: 'GET',
path:'/api/barcamp',
handler: function (request, reply) {
reply('Opensoft barcamp event!');
}
});
server.start();
Add routes
// daniela borges
10 minutes of hapiness
Create!.. routes
may be organized in plugins
focus on writing reusable
application logic
// daniela borges
10 minutes of hapiness
Create!.. routes using plugins
var register = function (plugin, options, next) {
plugin.route({
method: 'GET',
path: '/api/barcamp',
handler: function(request, reply){
// do interesting stuff
}
});
next();
};
register.attributes = {
name : 'barcampApi',
version : '0.0.1'
}
module.exports = register;
barcampApi.js
// daniela borges
10 minutes of hapiness
Create!.. routes using plugins
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection(...);
// Register the API
server.register( [ barcampApi, (...) ] ,
function (err) {});
server.start();
index.js
// daniela borges
10 minutes of hapiness
Other relevant plugins
...'cause everything is a plugin
// daniela borges
10 minutes of hapiness
API documentation generator
// daniela borges
10 minutes of hapiness
server.register( {register: require('lout')} , function (err) {
// do something crazy with err
});
// daniela borges
10 minutes of hapiness
Object schema description language and validator
// daniela borges
10 minutes of hapiness
var schema = {
name: Joi.string().required(),
paticipantNumber: Joi.integer().min(0).max(500),
website: Joi.uri()
}
// daniela borges
10 minutes of hapiness
var Joi = require('joi');
server.route({
method: 'POST',
path:'/api/barcamp',
handler: voodooHandlerFunc,
config:{
validate:
{
payload: {
name: Joi.string().required(),
paticipantNumber: Joi.integer().min(0).max(500),
website: Joi.uri()
}
}
}
});
// daniela borges
10 minutes of hapiness
// daniela borges
authentication
10 minutes of hapiness
Cookie authentication plugin
hapi-auth-cookie
- defines a strategy
// register the plugin
server.register(require('hapi-auth-cookie'), function (err) {
// define strategy
server.auth.strategy('session', 'cookie', {
password: 'secret',
cookie: 'sid',
ttl: 1000 * 60 * 60 * 24, //1 day
redirectTo: '/login'
});
});
// daniela borges
10 minutes of hapiness
Cookie authentication plugin
hapi-auth-cookie
- manages sessions
on login
request.auth.session.set(xptoAccount);
on logout
request.auth.session.clear();
// daniela borges
10 minutes of hapiness
third-party login plugin
Bell
- supports for Google, GitHub, Twitter, Facebook, Instagram, LinkedIn, ...
- supports OAuth 1.0a and 2.0 based login services
// daniela borges
10 minutes of hapiness
Relevant plugins
automatic API documentation: lout
validation: joi
authentication: hapi-auth-cookie, bell, ...
error handling: boom, poop
tests: lab
HTTP requests: wreck
database: mongodb, ...
views: jade, swig, handlebars
// daniela borges
10 minutes of hapiness
How can I start?
npm install -g makemehapi
// daniela borges
10 minutes of hapiness
Nodeschool International Day
// daniela borges
Saturday, May 23, 2015
registration: meetup.com/require-lx
10 minutes of hapiness
Motivational Links
// daniela borges
10 minutes of hapiness
Resumé
// daniela borges
Copy of 10 minutes of Hapiness
By tkssharma
Copy of 10 minutes of Hapiness
- 883