Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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...
Patrocinadores
¿qué nos ofrece?
➢ know - how de apis
➢ Experiencia en el gobierno de Apis
➢ Ejemplos de arquitecturas
➢ Ex...
❏ Realizar un documento funcional
❏ Realizar el diseño de la API
❏ Realizar una implementación fake
❏ Implementar la API
❏...
Datos recogidos de google Trend
Búsquedas por lenguajes en google Commits por lenguaje en github
Datos recogidos de ohloh....
➢ Es una tecnología que está en auge
➢ El lenguaje es Javascript, que todo el
mundo conoce.
➢ Es muy fácil desarrollar una...
➢ Framework javascript para ejecutar código del lado del
servidor. Se ejecuta sobre el V8 de Google.
Aspectos generales
No...
➢ Es orientado a eventos y no a threads,
basándose en la programación asíncrona.
➢ Levanta un servidor web en local.
➢ Bue...
raml http://raml.org/ url dónde se encuentra toda la
documentación de RAML
api designer https://anypoint.mulesoft.com url ...
Creamos una APi en el APi portal
Api Portal
Implementación
https://anypoint.mulesoft.com
Importamos el RAML
Api Designer
Implementación
http://api-portal.anypoint.mulesoft.com/cloudsystems/api/notifly/test.raml
Revisando los servicios
Api Designer
Implementación
http://api-portal.anypoint.mulesoft.com/cloudsystems/api/notifly/test....
Utilizamos el proyecto Osprey
Seguimos los pasos que ponen
en Github
Generando el esqueleto
Implementación
http://raml.org...
Instalamos Osprey-cli
npm install -g osprey-cli
Generamos el esqueleto
osprey new --name test --
target test
Generando el ...
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
requ...
GET /api/users
{ "result": {
"info": "OK"
},
"data": [
{"name": "Marco",
"firstname": "2",
"lastname":
"2",
"address":
{
"...
POST /api/users
app.post('/api/users', function(req, res) {
users.push(req.body);
req.body.id=users.length-1;
res.statusCo...
PUT /api/users/0
app.put('/api/users/:userid', function(req, res) {
var result=users[req.params.userid];
res.statusCode = ...
DELETE /api/users/0
app.delete('/api/users/:userid', function(req, res) {
users.splice(req.params.userid,1);
res.send({
"r...
¿Qué es MongoDB?
Es una base de datos opensource noSQL orientada a documento. Sus principales
características son las sigu...
Conectando node con MongoDB
Es una base de datos opensource noSQL orientada a documento. Sus principales
características s...
Instalando el driver de Mongo. package.json
{
"name": "test",
"version": "0.0.1",
"private": true,
"dependencies": {
"expr...
GET /api/users
app.get('/api/users', function(req, res) {
var params={};
if (req.params){
params=req.params;
}
db.collecti...
POST /api/users
app.post('/api/users', function(req, res) {
var user=req.body;
db.collection('users').insert(user,function...
PUT /api/users/53cee9c8e892d0c91d7ab29b
app.put('/api/users/:userid', function(req, res) {
var objectId = new ObjectID(req...
DEL /api/users/53cee9c8e892d0c91d7ab29b
app.delete('/api/users/:userid', function(req, res) {
var objectId = new ObjectID(...
Código:
https://github.com/cloudsystems/meetup/tree/master/meetup
Colección de pruebas postman:
https://www.getpostman.com...
➢ Mongoose, mongoose-validate, mongoose-schema-extend:
Permite definir esquemas para mongo
➢ Express.router: Permite unifi...
➢ MongoDB: http://www.mongodb.org/
➢ RAML: http://raml.org/
➢ Nodejs: http://nodejs.org/
➢ IDe para poder desarrollar y ej...
Ruegos y preguntas
Contacta en:
Email: admin@apiaddicts.org
Web:
http://www.meetup.com/APIAddicts
Siguenos en:
➢ Linkedin: ApiAddicts
➢ Twitt...
JSDays Desarrolla tu primera API
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
El mundo cloud y las apis
Next
Download to read offline and view in fullscreen.

1

Share

Download to read offline

JSDays Desarrolla tu primera API

Download to read offline

Taller para desarrollar tu primera API utilizando node.js y MongoDB partiendo de un RAML que hemos realizado en el #JSDays.

Related Books

Free with a 30 day trial from Scribd

See all

JSDays Desarrolla tu primera API

  1. 1. Desarrolla tu primera API Marco Antonio Sanz
  2. 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. 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. 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. 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. 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. 7. ➢ Framework javascript para ejecutar código del lado del servidor. Se ejecuta sobre el V8 de Google. Aspectos generales Node.js
  8. 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. 9. raml http://raml.org/ url dónde se encuentra toda la documentación de RAML api designer https://anypoint.mulesoft.com url del api designer c9.io https://c9.io/ Entorno para desarrollo test.raml http://api- portal.anypoint.mulesoft.com/clo udsystems/api/notifly/test.raml raml de partida Código ejemplo https://github.com/cloudsystems/ meetup.git Código de ejemplo Recursos Implementación
  10. 10. Creamos una APi en el APi portal Api Portal Implementación https://anypoint.mulesoft.com
  11. 11. Importamos el RAML Api Designer Implementación http://api-portal.anypoint.mulesoft.com/cloudsystems/api/notifly/test.raml
  12. 12. Revisando los servicios Api Designer Implementación http://api-portal.anypoint.mulesoft.com/cloudsystems/api/notifly/test.raml
  13. 13. Utilizamos el proyecto Osprey Seguimos los pasos que ponen en Github Generando el esqueleto Implementación http://raml.org/ https://github.com/mulesoft/osprey
  14. 14. Instalamos Osprey-cli npm install -g osprey-cli Generamos el esqueleto osprey new --name test -- target test Generando el esqueleto Implementación wget http://api- portal.anypoint.mulesoft.com/cloudsystems/api/n otifly/test.raml Obtenemos el fichero test.raml
  15. 15. Instalamos las dependencias npm install (dónde esté package.json) Revisamos el app.js Generando el esqueleto Implementación
  16. 16. Ejecutamos la aplicación node app.js Probamos la consola localhost:3000/api/consol e Probando el fake Implementación
  17. 17. Probamos la API try it Probando el fake Implementación
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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
  23. 23. ¿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
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. 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
  31. 31. ➢ 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
  32. 32. ➢ 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
  33. 33. Ruegos y preguntas
  34. 34. Contacta en: Email: admin@apiaddicts.org Web: http://www.meetup.com/APIAddicts Siguenos en: ➢ Linkedin: ApiAddicts ➢ Twitter: @apiaddicts ➢ Facebook: APIAddicts ➢ Meetup: APIAddicts Contacta
  • RobertoLuchaSedeo

    Feb. 27, 2016

Taller para desarrollar tu primera API utilizando node.js y MongoDB partiendo de un RAML que hemos realizado en el #JSDays.

Views

Total views

575

On Slideshare

0

From embeds

0

Number of embeds

11

Actions

Downloads

8

Shares

0

Comments

0

Likes

1

×