SlideShare una empresa de Scribd logo
Desarrolla tu primera API
Marco Antonio Sanz
¿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/
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
admin@cloudappi.net ·
www.cloudappi.net
❏ 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
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?
➢ 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
➢ Framework javascript para ejecutar código del lado del
servidor. Se ejecuta sobre el V8 de Google.
Aspectos generales
Node.js
➢ 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
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
Utilizamos el proyecto Osprey
Seguimos los pasos que ponen
en Github
Generando el esqueleto
Implementación
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
Instalamos las dependencias
npm install (dónde esté package.json)
Revisamos el app.js
Generando el esqueleto
Implementación
Ejecutamos la aplicación
node app.js
Probamos la consola
localhost:3000/api/consol
e
Probando el fake
Implementación
Probamos la API
try it
Probando el fake
Implementación
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
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
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
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
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
¿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
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
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
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
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
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
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
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
➢ 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
➢ 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és
Enlaces
Ruegos y preguntas
Contacta en:
Email: admin@apiaddicts.org
Web:
http://www.meetup.com/APIAddicts
Siguenos en:
➢ Linkedin: ApiAddicts
➢ Twitter: @apiaddicts
➢ Facebook: APIAddicts
➢ Meetup: APIAddicts
Contacta

Más contenido relacionado

Similar a Taller desarrollo de apis

Mada metodología ágil de desarrollo de apis
Mada   metodología ágil de desarrollo de apisMada   metodología ágil de desarrollo de apis
Mada metodología ágil de desarrollo de apis
CloudAppi
 
Servicios web
Servicios webServicios web
Servicios web
Cheli Hedz
 
Servicios web
Servicios webServicios web
Servicios web
Joel Balderrama Rosas
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
Pedro J. Molina
 
Ajax
AjaxAjax
Ajax
ousli07
 
Servicios web
Servicios webServicios web
Servicios web
Joel Balderrama Rosas
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
Mariano Iglesias
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
INSIGNIA4U
 
Servicios web
Servicios webServicios web
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
Adolfo Sanz De Diego
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
Steven Gomez
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
hdgarcia
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
BEEVA_es
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
Alejandro Mancilla
 
Servicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleServicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y Google
Armando Nuñez Ramos
 
APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y Go
JM Robles
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
betabeers
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
Carlos Azaustre
 
Introducción a AngularJS
Introducción a AngularJS Introducción a AngularJS
Introducción a AngularJS
Marcos Reynoso
 

Similar a Taller desarrollo de apis (20)

Mada metodología ágil de desarrollo de apis
Mada   metodología ágil de desarrollo de apisMada   metodología ágil de desarrollo de apis
Mada metodología ágil de desarrollo de apis
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web
Servicios webServicios web
Servicios web
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Ajax
AjaxAjax
Ajax
 
Servicios web
Servicios webServicios web
Servicios web
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Servicios web
Servicios webServicios web
Servicios web
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
 
Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
Servicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y GoogleServicios web en Java, PHP, Perl y Google
Servicios web en Java, PHP, Perl y Google
 
APIs REST: Django y Go
APIs REST: Django y GoAPIs REST: Django y Go
APIs REST: Django y Go
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
 
Introducción a AngularJS
Introducción a AngularJS Introducción a AngularJS
Introducción a AngularJS
 

Más de CloudAppi

Meme teambuilding
Meme teambuildingMeme teambuilding
Meme teambuilding
CloudAppi
 
Api managers
Api managersApi managers
Api managers
CloudAppi
 
Cloud appi transformacion digital
Cloud appi   transformacion digitalCloud appi   transformacion digital
Cloud appi transformacion digital
CloudAppi
 
Marco antonio sanz
Marco antonio sanzMarco antonio sanz
Marco antonio sanz
CloudAppi
 
Desarrolla tu primera api con spring boot
Desarrolla tu primera api con spring bootDesarrolla tu primera api con spring boot
Desarrolla tu primera api con spring boot
CloudAppi
 
Gobierno de apis
Gobierno de apisGobierno de apis
Gobierno de apis
CloudAppi
 
Api managers
Api managersApi managers
Api managers
CloudAppi
 
Las apis como modelo de negocio
Las apis como modelo de negocioLas apis como modelo de negocio
Las apis como modelo de negocio
CloudAppi
 
Seguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developerSeguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developer
CloudAppi
 

Más de CloudAppi (9)

Meme teambuilding
Meme teambuildingMeme teambuilding
Meme teambuilding
 
Api managers
Api managersApi managers
Api managers
 
Cloud appi transformacion digital
Cloud appi   transformacion digitalCloud appi   transformacion digital
Cloud appi transformacion digital
 
Marco antonio sanz
Marco antonio sanzMarco antonio sanz
Marco antonio sanz
 
Desarrolla tu primera api con spring boot
Desarrolla tu primera api con spring bootDesarrolla tu primera api con spring boot
Desarrolla tu primera api con spring boot
 
Gobierno de apis
Gobierno de apisGobierno de apis
Gobierno de apis
 
Api managers
Api managersApi managers
Api managers
 
Las apis como modelo de negocio
Las apis como modelo de negocioLas apis como modelo de negocio
Las apis como modelo de negocio
 
Seguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developerSeguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developer
 

Último

mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
MiguelAtencio10
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
gisellearanguren1
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
AngelCristhianMB
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
cecypozos703
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
YashiraPaye
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
KukiiSanchez
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
yuberpalma
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
NicandroMartinez2
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
luiscohailatenazoa0
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
Manuel Diaz
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
ranierglez
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
70244530
 

Último (20)

mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
 
La Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docxLa Inteligencia Artificial en la actualidad.docx
La Inteligencia Artificial en la actualidad.docx
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
 
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdfPLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
PLAN DE MANTENMIENTO preventivo de un equipo de computo.pdf
 

Taller desarrollo de apis

  • 1. Desarrolla tu primera API Marco Antonio Sanz
  • 2. ¿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/
  • 3. 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 admin@cloudappi.net · www.cloudappi.net
  • 4. ❏ 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
  • 5. 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?
  • 6. ➢ 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
  • 7. ➢ Framework javascript para ejecutar código del lado del servidor. Se ejecuta sobre el V8 de Google. Aspectos generales Node.js
  • 8. ➢ 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
  • 9. 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
  • 10. Utilizamos el proyecto Osprey Seguimos los pasos que ponen en Github Generando el esqueleto Implementación
  • 11. 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
  • 12. Instalamos las dependencias npm install (dónde esté package.json) Revisamos el app.js Generando el esqueleto Implementación
  • 13. Ejecutamos la aplicación node app.js Probamos la consola localhost:3000/api/consol e Probando el fake Implementación
  • 14. Probamos la API try it Probando el fake Implementación
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. ¿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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. ➢ 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
  • 29. ➢ 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és Enlaces
  • 31.
  • 32. Contacta en: Email: admin@apiaddicts.org Web: http://www.meetup.com/APIAddicts Siguenos en: ➢ Linkedin: ApiAddicts ➢ Twitter: @apiaddicts ➢ Facebook: APIAddicts ➢ Meetup: APIAddicts Contacta