taller desarrollo de apis
DESCRIPTION
Se aprenderá a desarrollar una API siguiendo la metodología MADA que tiene como misión reducir la complejidad a la hora de desarrollar una API y que utiliza RAML como lenguaje de definición de APIs. A patir del RAML, se generará toda la documentación necesaria para exponer a los developers, se podrá construir un fake para probarlo en la consola de pruebas y se generará un esqueleto en node.js. El taller desarrollará un ejemplo utilizando objetos en memoria y otro ejemplo utilizando MongoDB como base de datos.TRANSCRIPT
![Page 1: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/1.jpg)
Desarrolla tu primera API
Marco Antonio Sanz
![Page 2: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/2.jpg)
¿Quienes somos?
Grupo de meetup
http://www.meetup.com/API-Addicts/
Meetups realizados
❏ MADA. Metodología ágil de
definición de APIs
❏ Taller: Definición de APIs
❏ Taller: Desarrolla tu primera API
❏ Seguridad en las APIs
❏ Las APis en el mundo Big Data
❏ Las APis en el mundo Cloud
❏ Apis como modelo de negocio
❏ Define y desarrolla tu primera API
Marco Antonio Sanz:http://es.linkedin.com/pub/marco-antonio-sanz-molina-prados/18/335/97/
![Page 3: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/3.jpg)
Patrocinadores
¿qué nos ofrece?
➢ know - how de apis
➢ Experiencia en el gobierno de Apis
➢ Ejemplos de arquitecturas
➢ Experiencia en el mundo Cloud
Calle Velasco 13
Tlf: 658 89 75 75
www.cloudappi.net
![Page 4: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/4.jpg)
❏ Realizar un documento funcional
❏ Realizar el diseño de la API
❏ Realizar una implementación fake
❏ Implementar la API
❏ Validar la API
❏ Generar documentación para developers
❏ Generar casos de prueba (códigos de ejemplo)
❏ Generar los SDks
Pasos para desarrollar una API
Índice
![Page 5: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/5.jpg)
Datos recogidos de google Trend
Búsquedas por lenguajes en google Commits por lenguaje en github
Datos recogidos de ohloh.net
Primeros pasos¿Qué lenguaje utilizo?
![Page 6: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/6.jpg)
➢ Es una tecnología que está en auge
➢ El lenguaje es Javascript, que todo el
mundo conoce.
➢ Es muy fácil desarrollar una API con el
módulo express
➢ integración con RAML (proyecto osprey)
¿Por qué node.js?
Primeros pasos
![Page 7: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/7.jpg)
➢ Framework javascript para ejecutar código del lado del
servidor. Se ejecuta sobre el V8 de Google.
Aspectos generales
Node.js
![Page 8: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/8.jpg)
➢ Es orientado a eventos y no a threads,
basándose en la programación asíncrona.
➢ Levanta un servidor web en local.
➢ Buena gestión de los paquetes con npm.
➢ El módulo express ayuda a desarrollar APIs.
Aspectos generales
Node.js
![Page 9: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/9.jpg)
raml http://raml.org/ url dónde se encuentra toda la
documentación de RAML
api designer http://api-
portal.anypoint.mulesof
t.com/raml/api-designer
url del api designer
c9.io https://c9.io/ Entorno para desarrollo
test.raml http://api-
portal.anypoint.mulesof
t.com/cloudsystems/api
/notifly/test.raml
raml de partida
Recursos
Implementación
![Page 10: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/10.jpg)
Utilizamos el proyecto Osprey
Seguimos los pasos que ponen
en Github
Generando el esqueleto
Implementación
![Page 11: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/11.jpg)
Instalamos Osprey-cli
npm install -g osprey-cli
Generamos el esqueleto
osprey new raml/test.raml --
name test --target test
Generando el esqueleto
Implementación
![Page 12: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/12.jpg)
Instalamos las dependencias
npm install (dónde esté package.json)
Revisamos el app.js
Generando el esqueleto
Implementación
![Page 13: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/13.jpg)
Ejecutamos la aplicación
node app.js
Probamos la consola
localhost:3000/api/consol
e
Probando el fake
Implementación
![Page 14: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/14.jpg)
Probamos la API
try it
Probando el fake
Implementación
![Page 15: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/15.jpg)
Nuestros primeros pasos
➢ Instalación de módulos con npm
install <módulo> o package.json
➢ Importación de módulos con
require
➢ Ejecución del servidor
➢ Módulo express
var express = require('express');
var path = require('path');
var osprey = require('osprey');
var app = module.exports = express();
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.compress());
app.use(express.logger('dev'));
app.set('port', process.env.PORT || 3000);
api = osprey.create('/api', app, {
ramlFile: path.join(__dirname, '/assets/raml/api.raml'),
logLevel: 'debug' // logLevel: off->No logs | info->Show Osprey modules initializations | debug->Show all
});
if (!module.parent) {
var port = app.get('port');
app.listen(port);
console.log('listening on port ' + port);
}
Generando el esqueleto
Implementación
![Page 16: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/16.jpg)
GET /api/users
{ "result": {
"info": "OK"
},
"data": [
{"name": "Marco",
"firstname": "2",
"lastname":
"2",
"address":
{
"descripcion": "blab
bla",
"number":
"2"
},
"id": "0"
} ] }
app.get('/api/users', function(req, res) {
res.statusCode = 200;
res.type('application/json');
res.send({ result: { "result": {
"info": "OK"},
"data": {
"users": users
}
}});
});
Resultado
Creando un GET
Implementación
![Page 17: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/17.jpg)
POST /api/users
app.post('/api/users', function(req, res) {
users.push(req.body);
req.body.id=users.length-1;
res.statusCode = 201;
res.type('application/json');
res.send({ "result": {
"info": "user created"},
"data": { "id": users.length-1 }
});
});
Resultado
{
"result": {
"info": "user created",
"data": {"id": 2}
}
Creando un POST
Implementación
![Page 18: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/18.jpg)
PUT /api/users/0
app.put('/api/users/:userid', function(req, res) {
var result=users[req.params.userid];
res.statusCode = 200;
res.type('application/json');
req.body.id = req.params.userid;
users[req.params.userid] = req.body;
res.send({"result": {"info": "OK"},
"data": users[req.params.userid] });
});
Resultado
{"result": { "info": "OK"},
"data": {
"name": "Marco",
"firstname": "2",
"lastname": "2",
"address": {
"descripcion": "blab bla",
"number": "2" },
"id": "0"}}
Creando un PUT
Implementación
![Page 19: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/19.jpg)
DELETE /api/users/0
app.delete('/api/users/:userid', function(req, res) {
users.splice(req.params.userid,1);
res.send({
"result": {
"info": "OK"
},
"data": users
});
});
Resultado
{"result": { "info": "OK"},
"data": {
"name": "Marco",
"firstname": "2",
"lastname": "2",
"address": {
"descripcion": "blab bla",
"number": "2" },
"id": "0"}}
Creando un DELETE
Implementación
![Page 20: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/20.jpg)
¿Qué es MongoDB?
Es una base de datos opensource noSQL orientada a documento. Sus principales
características son las siguientes:
- Orientada a documento. La información se organiza como colecciones de
documentos json.
- Los documentos están en formato BSON
- Permite indexar por cualquier campo
- Permite alta disponibilidad y replicación de la información
- Auto - sharding. Permite escalamiento horizontal.
- Map Reduce
- Permite realizar queries basadas en documentos
Conectando a la BBDD
Implementación
![Page 21: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/21.jpg)
Conectando node con MongoDB
Es una base de datos opensource noSQL orientada a documento. Sus principales
características son las siguientes:
- Orientada a documento. La información se organiza como colecciones de
documentos json.
- Los documentos están en formato BSON
- Permite indexar por cualquier campo
- Permite alta disponibilidad y replicación de la información
- Auto - sharding. Permite escalamiento horizontal.
- Map Reduce
- Permite realizar queries basadas en documentos
Conectando a la BBDD
Implementación
![Page 22: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/22.jpg)
Instalando el driver de Mongo. package.json
{
"name": "test",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.4.4",
"osprey": "0.1.1",
"mongodb":"*"
}
var MongoClient = require ('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/meetup',function(err,db){
if (err) throw err;
});
Conectando a la base de datos. app.js
Configurando MongoDB
Implementación
![Page 23: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/23.jpg)
GET /api/users
app.get('/api/users', function(req, res) {
var params={};
if (req.params){
params=req.params;
}
db.collection('users').find(params).toArray(function(er
r,users){
if (err)throw err;
res.send({
"result": {
"info":
"OK"
},
"data": users
});
});
});
Resultado
{
"result": {
"info": "OK"
},
"data": [
{
"name": "Marco",
"firstname": "Polo",
"lastname": "2",
"address": {
"descripcion": "blab bla",
"number": "2"
},
"_id": "53cee9b7e892d0c91d7ab299"
}]}
Creando un GET con BBDD
Implementación
![Page 24: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/24.jpg)
POST /api/users
app.post('/api/users', function(req, res) {
var user=req.body;
db.collection('users').insert(user,function(err,user){
res.send({
"result": {
"info":
"OK"
},
"data": user
});
});
});
Resultado
{
"result": { "info": "OK" },
"data": [ {
"name": "Marco",
"firstname": "Polo",
"lastname": "2",
"address": {
"descripcion": "blab bla",
"number": "2"
},
"_id": "53ceee94e657ff1a1f93893c"
}
]
}
Creando un POST con BBDD
Implementación
![Page 25: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/25.jpg)
PUT /api/users/53cee9c8e892d0c91d7ab29b
app.put('/api/users/:userid', function(req, res) {
var objectId = new ObjectID(req.params.userid);
var user = req.body;
db.collection('users').update({_id:objectId},user,function(er
r,updated){
res.send({
"result": {
"info": "OK"
},
"data": updated
});
});
});
Resultado
{
"result": {
"info": "OK"
},
"data": 0
}
Creando un PUT con BBDD
Implementación
![Page 26: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/26.jpg)
DEL /api/users/53cee9c8e892d0c91d7ab29b
app.delete('/api/users/:userid', function(req, res) {
var objectId = new ObjectID(req.params.userid);
db.collection('users').remove({_id:objectId},function(e
rr,user){
res.send({
"result": {
"info": "OK"
},
"data": user
});
});
});
Resultado
{
"result": {
"info": "OK"
},
"data": 0
}
Creando un DELETE con BBDD
Implementación
![Page 27: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/27.jpg)
Código:
https://github.com/cloudsystems/meetup/tree/master/meetup
Colección de pruebas postman:
https://www.getpostman.com/collections/771041a6437349596cf2
RAML de ejemplo:
http://api-portal.anypoint.mulesoft.com/cloudsystems/api/notifly/test.raml
Código de ejemplo
Enlaces de interés
![Page 28: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/28.jpg)
➢ Mongoose, mongoose-validate, mongoose-schema-extend:
Permite definir esquemas para mongo
➢ Express.router: Permite unificar todas las rutas en un sólo fichero
➢ Express validator: Permite validar parámetros
➢ Errorhandler: Permite manejar los errores de un forma más fácil
➢ Log4js-node: Permite configurar y manejar los logs
➢ Node-schedule: Permite configurar tareas batch
Utilidades
➢ ForEver: Permite ejecutar continuamente el script node
➢ Node-supervidor: Permite realizar actualizaciones en caliente
Módulos interesantes
Algunas cosas más
![Page 29: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/29.jpg)
➢ MongoDB: http://www.mongodb.org/
➢ RAML: http://raml.org/
➢ Nodejs: http://nodejs.org/
➢ IDe para poder desarrollar y ejecutar nuestras pruebas: http://c9.io
➢ API designer: http://api-portal.anypoint.mulesoft.com/raml/api-designer:
➢ Cursos de Mongo con node: https://university.mongodb.com/
Enlaces de interésEnlaces
![Page 30: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/30.jpg)
Ruegos y preguntas
![Page 31: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/31.jpg)
![Page 32: Taller desarrollo de apis](https://reader034.vdocuments.mx/reader034/viewer/2022052508/559c583d1a28ab0c588b463f/html5/thumbnails/32.jpg)
Contacta en:
Email: [email protected]
Web:
http://www.meetup.com/APIAddicts
Siguenos en:
➢ Linkedin: ApiAddicts
➢ Twitter: @apiaddicts
➢ Facebook: APIAddicts
➢ Meetup: APIAddicts
Contacta