SlideShare una empresa de Scribd logo
1 de 36
Define y 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
❏ El Mundo Big Data y las APis
❏ El Mundo Cloud y las APis
❏ 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
Al pensar en una API, hay que
pensar en desarrollar productos. Es
un traje para varios clientes, por lo
que a todos no les puede quedar
bien.
Un backend se desarrolla pensando
en tu cliente, es un traje hecho a
medida.
API Backend
¿Qué es una API?
1) Realizar un documento funcional
2) Realizar el diseño de la API
3) Realizar una implementación fake
4) Implementar la API
5) Validar la API
6) Generar documentación para developers
7) Generar casos de prueba (códigos de ejemplo)
8) Generar los SDks
Pasos
Definición de Apis
Hay que tener en cuenta los siguientes aspectos:
➢ Protocolo API (SOAP vs REST)
➢ Seguridad de la API,métodos de autenticación y
autorización. Pj: Basic, oauth1, aouth2…
➢ API Manager (wso2, apigee, genoa) vs ESB
(Oracle Service Bus..)
➢ Formato de datos de entrada / salida (xml, json…)
Consideraciones generales
Definición de Apis
Utiliza el protocolo HTTP para realizar las peticiones.
El estándar RESTFULL, define cómo se deben realizar las peticiones REST,
cuales son los métodos HTTP que se deben utilizar y cómo deben
estructurarse las uris para que sean user-friendly. Podemos basarnos en
https://github.com/WhiteHouse/api-standards para definir nuestra API.
Principios básicos:
➢ Una URL identifica un recurso. Por ejemplo, GET
http://testapi.cloudsystems.es/users
RestFul
Definición de Apis
➢ Uniformidad de interfaz. Los recursos se manipulan a través de las
métodos HTTP (PUT, GET, POST AND DELETE).
○ POST crea el recurso
○ PUT permite modificarlo
○ DELETE lo elimina
○ GET permite consultarlo.
○ Adicionalmente, se han introducido nuevos métodos, como
PATCH (actualización parcial de un recurso).
Principios básicos
Restful
➢ Uniformidad de salida. Los códigos HTTP de salida:
○ 1xxx: Informacional
○ 2xx: Resultado satisfactorio
■ 200: OK
■ 201: Recurso creado
○ 3xx: Redirecciones
○ 4xx: Errores de cliente
■ 400: Parámetros incorrectos
■ 404: recurso no encontrado
Principios básicos
Restful
➢ Mensajes autodescriptivos: Los recursos están desacoplados de la
representación.
➢ Los mensajes se pueden devolver en varios formatos. Los
mensajes se pueden obtener en una variedad de formatos como
HTML, XML, json… Para indicar estos formatos, se puede utilizar las
cabeceras Content-Type y Accept o bién indicarlo al final de la URI.
Por ejemplo: GET testapi.cloudsystems.es/users.json
➢ Todas las peticiones son sin estado.
Principios básicos
Restful
Crear:
POST http://apitest.cloudsystems.es/users
Modificar:
PUT http://apitest.cloudsystems.es/users/23
Eliminar:
DELETE http://apitest.cloudsystems.es/users/23
Consultar:
GET http://apitest.cloudsystems.es/users
Consultar un usuario:
GET http://apitest.cloudsystems.es/users/23
Segundo nivel
GET http://apitest.cloudsystems.es/users/23/cars
urls
Restful
Crear un usuario
request:
POST http://apitest.cloudsystems.es/users
body:
{"name": "Marco", "firstname": "Polo", "lastname": "2",
"address": { "street": "blab bla", "number": "2" }}
response:
Header:HTTP CODE: 201
Body:
{"result": {
"info": "user created"
},
"data": {
"id": "23"}
}
Ejemplo
Restful
Obtener usuarios:
Request:
GET http://apitest.cloudsystems.es/users
Response:
Header: HTTP CODE: 200
Body:
{ "result": { "info": "OK"},
"data": {
"users": [
{ "name": "Marco","firstname": "Polo",
"address": {"street": "blabbla"}},
{ "name": "Prueba","firstname": "ww",
"address": {"street": "blab bla" }}]
}
}
}
Ejemplo
Restful
Actualizar un usuario
Request:
PUT http://apitest.cloudsystems.es/users/23
body:
{lastname:”González”}
Response:
Header: HTTP CODE: 200
Body:
{
“result”:
{“info”:”user updated”},
{“data”:””}
}
Ejemplo
Restful
Eliminar un usuario
Request:
DELETE http://apitest.cloudsystems.es/users/23
Response:
Header: 200 OK
Body:
{
"result": {
"info": "user deleted"
},
"data": ""
}
Ejemplo
Restful
● Fields
● Paging
● Expand
● Method
● Orderby
Parámetros
Definición de Apis
➢ Devuelve los atributos
seleccionados
Fields
Parámetros
request:
GET /users?fields=name
response:
header:
http code 200
body:
Original:
"data": [ {"user": {
"name": "marco",
“dni”:”123123123”,
“age”:”12”
“phones”:[“1222”,”222”]
}}]}
Response:
"data": [ {"user": {
"name": "marco"
}}]}
➢ Parámetro limit / offset: Se debe mostrar un offset y el número de
elementos a devolver.
request:
GET /users?limit=100&offset=200
response:
header:
http code 200/206
body:
Restful
{
"paging": {
"total": 10,
"num": 3,
"page_size": 100,
"next": "/users?limit=100&offset=300",
"previous":
"/users?limit=100&offset=100",
"last": "/users?limit=100&offset=900",
"first": "/users?limit=100&offset=0"
},
"data": [
{"user": { "name": "marco"}}
]
}
Paginación
Restful
request:
POST /users?method=put
body:
body:
{"user": {
"name": "pepe"
}}
Response:
header: 200 OK
body:
{"result": {
"info": "user updated"
}}
➢Algunos clientes de API pueden no soportar realizar las peticiones
PUT, DELETE.
PUT y DELETE
➢ Permite devolver el segundo o
tercer nivel de un json
Expand
Restful
Por defecto
request:
GET /users
response:
header: 200 OK
body:
{"data": [
{"user": { "name": "marco"
}}
]}
request:
GET /users?expand=address
response:
header: 200 OK
body:
{"data": [
{"user": { "name": "marco"
“address”:{
“street”:”Calle
velasco” }
}}
]}
➢ Permite indicar el orden de la lista
a devolver
Orderby
Restful
request:
GET /users?sortby=name DESC
response:
header: 200 OK
body:
{"data": [
{"user": { "name": "marco"}}
{"user": { "name": "laura"}}
]}
ORIGINAL
request:
GET /users?orderby=name DESC
response:
header: 200 OK
body:
{"data": [
{"user": { "name": "laura"}}
{"user": { "name": "marco"}}
]}
➢ Cabecera Authentication
- Oauth 1.0 / 2.0
- Basic
- Hmac
Seguridad
Restful
request:
GET /users?expand=address
header:
Authentication Basic dXN1YXJpbzpwYXNzd29yZA==
response:
header: 200 OK
body:
{"data": [
{"user": { "name": "marco"
]}
Base64 (usuario:password)
- Accept
- Content-type
Formatos de entrada/salida
Restful
request:
GET /users?expand=address
header:
Content-Type: application/xml
Accept: application/json
response:
header: 200 OK
body:
{"data": [
{"user": { "name": "marco"
]}
Base64 (usuario:password)
Las Apis deben versionarse como cualquier producto software. No tiene por qué
coincidir con la implementación y suele indicarse en la url.
METHOD /<version>/<resource>
Versionado
Restful
request:
GET /1/users?expand=address
header:
Content-Type: application/xml
Accept: application/json
response:
header: 200 OK
body:
{"data": [
{"user": { "name": "marco"
]}
RAML
Api Designer
#%RAML 0.8
title: GitHub API
version: v3
baseUri: https://api.github.com
mediaType: application/json
protocols: [ HTTP, HTTPS ]
schemas:
- User: schema/user.json
Users: schema/users.json
Org: schema/org.json
Orgs: schema/orgs.json
song**
Parámetros generales de la API Existe una sección principal que describe información
general de la API, como la siguiente:
❏ title: Título de la API
❏ version: versión de la API.
❏ baseUri: url dónde se va a desplegar la API.
❏ mediaType: Tipo de dato de que va a soportar la
API
❏ protocols: Protocolos disponibles para la API
(HTTP/HTTPS)
❏ schemas: permite importar schemas json para
ser utilizados posteriormente
Documento root
RAML
❏ parámetros globales: permiten definier
parámetros comunes a varios servicios.
❏ queryParameters: Son los parámetros que
van en la query. Son los que se pasan como
get XXX/users?username=marco
❏ uriParameters: son los parámetros que van
directamente en la URI. En RestFul sólo
deberían ser identificadores de recursos.
❏ responses: Respuestas del servicio. Hay
que especificar el formato de respuesta, y
además, se puede añadir su schema y un
ejemplo. Los schemas pueden ir en json
schema o en xsd.
/users:
is: [ paged ]
get:
queryParameters:
username:
description: user to find
200:
body
application/json:
example: |
{ "result": {
"info": "user created"
}
Métodos GET
RAML
❏ body: Toda petición post debe ir
acompañada con información de entrada.
❏ responses: Respuestas del servicio. Hay
que especificar el formato de respuesta, y
además, se puede añadir su schema y un
ejemplo. Los schemas pueden ir en json
schema o en xsd.
post:
description: creates an user
body:
application/json:
example: |
{"name": "Marco", "firstname": "Polo", "lastname":
"2", "address": { "descripcion": "blab bla", "number": "2"
}}
responses:
200:
body:
application/json:
example: |
{"result": { "info": "user
created" }, "data": { "id": "23" }
}
Métodos POST
RAML
put:
description: updates an user
body:
application/json:
example: |
{"name": "Marco", "firstname": "Polo", "lastname":
"2", "address": { "descripcion": "blab bla", "number": "2"
}}
responses:
200:
body:
application/json:
example: |
{"result": {"info": "user
updated"},"data": ""}
❏ uriParameters: Permite identificar un
recurso
❏ queryParameters: Permite filtrar los
recursos
❏ responses: Respuestas del servicio. Hay
que especificar el formato de respuesta, y
además, se puede añadir su schema y un
ejemplo. Los schemas pueden ir en json
schema o en xsd.
❏ body: Enviar los campos a modificar. Se
debería utilizar el método HTTP PATCH
para modificaciones parciales.
Métodos PUT
RAML
/{userId}:
uriParameters:
userId:
description: user id
delete:
description: removes a user
responses:
200:
body:
application/json:
example: |
{
"result": {
"info": "user
deleted"
},
"data": ""
}
❏ uriParameters: Permite identificar un
recurso
❏ queryParameters: Permite filtrar los
recursos
❏ responses: Respuestas del servicio. Hay
que especificar el formato de respuesta, y
además, se puede añadir su schema y un
ejemplo. Los schemas pueden ir en json
schema o en xsd.
Métodos DELETE
RAML
Desarrollo de una implementación con las interfaces
de entrada y salida.
Implementado Fake
RAML
Desarrollo de una implementación con las interfaces
de entrada y salida.
Implementado Fake
RAML
➢ Seguridad. API Managers
➢ Carga del sistema.
➢ Entorno (¿Desplegar en un PAAS o en un IAAS?)
➢ Estadísticas
➢ Logs del sistema
Consideraciones generales
Apis
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

La actualidad más candente

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 bootCloudAppi
 
Gobierno de apis
Gobierno de apisGobierno de apis
Gobierno de apisCloudAppi
 
Marco antonio sanz
Marco antonio sanzMarco antonio sanz
Marco antonio sanzCloudAppi
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCarlos Azaustre
 
Login social con node.js
Login social con node.jsLogin social con node.js
Login social con node.jsCarlos Azaustre
 
Curso Básico de AngularJS
Curso Básico de AngularJSCurso Básico de AngularJS
Curso Básico de AngularJSCarlos Azaustre
 
Presentación de ACTO Framework parte I
Presentación de ACTO Framework parte IPresentación de ACTO Framework parte I
Presentación de ACTO Framework parte IADWE Team
 

La actualidad más candente (8)

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
 
Marco antonio sanz
Marco antonio sanzMarco antonio sanz
Marco antonio sanz
 
Curso de HTML5
Curso de HTML5Curso de HTML5
Curso de HTML5
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
 
Login social con node.js
Login social con node.jsLogin social con node.js
Login social con node.js
 
Curso Básico de AngularJS
Curso Básico de AngularJSCurso Básico de AngularJS
Curso Básico de AngularJS
 
Presentación de ACTO Framework parte I
Presentación de ACTO Framework parte IPresentación de ACTO Framework parte I
Presentación de ACTO Framework parte I
 

Destacado

Big Data as PaaS in Enterprises
Big Data as PaaS in EnterprisesBig Data as PaaS in Enterprises
Big Data as PaaS in EnterprisesPankaj Khattar
 
Big data y las apis (big data spain)
Big data y las apis (big data spain)Big data y las apis (big data spain)
Big data y las apis (big data spain)CloudAppi
 
BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)
BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)
BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)pmluque
 
Freedata: la aplicación del Big Data al ehealth
Freedata: la aplicación del Big Data al ehealthFreedata: la aplicación del Big Data al ehealth
Freedata: la aplicación del Big Data al ehealthAna Lorenzo Morales
 
The architecture of data analytics PaaS on AWS
The architecture of data analytics PaaS on AWSThe architecture of data analytics PaaS on AWS
The architecture of data analytics PaaS on AWSTreasure Data, Inc.
 
Internet of Things and Data Analytics for Smart Cities
Internet of Things and Data Analytics for Smart CitiesInternet of Things and Data Analytics for Smart Cities
Internet of Things and Data Analytics for Smart CitiesPayamBarnaghi
 

Destacado (9)

D naiyer resume
D naiyer resumeD naiyer resume
D naiyer resume
 
Big Data as PaaS in Enterprises
Big Data as PaaS in EnterprisesBig Data as PaaS in Enterprises
Big Data as PaaS in Enterprises
 
Big data y las apis (big data spain)
Big data y las apis (big data spain)Big data y las apis (big data spain)
Big data y las apis (big data spain)
 
BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)
BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)
BIG DATA en CLOUD PaaS para Internet de las Cosas (IoT)
 
Freedata: la aplicación del Big Data al ehealth
Freedata: la aplicación del Big Data al ehealthFreedata: la aplicación del Big Data al ehealth
Freedata: la aplicación del Big Data al ehealth
 
The architecture of data analytics PaaS on AWS
The architecture of data analytics PaaS on AWSThe architecture of data analytics PaaS on AWS
The architecture of data analytics PaaS on AWS
 
Del Dr. Google al e-Paciente
Del Dr. Google al e-PacienteDel Dr. Google al e-Paciente
Del Dr. Google al e-Paciente
 
Building a Data Analytics PaaS for Smart Cities
Building a Data Analytics PaaS for Smart CitiesBuilding a Data Analytics PaaS for Smart Cities
Building a Data Analytics PaaS for Smart Cities
 
Internet of Things and Data Analytics for Smart Cities
Internet of Things and Data Analytics for Smart CitiesInternet of Things and Data Analytics for Smart Cities
Internet of Things and Data Analytics for Smart Cities
 

Similar a Define y desarrolla tu primera api

Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apisCloudAppi
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTBEEVA_es
 
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
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHAlejandro Esquiva Rodriguez
 
5.2. api-rest
5.2. api-rest5.2. api-rest
5.2. api-restxavazque2
 
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Iniciativa Barcelona Open Data
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con RESTAlex Puig
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"www.encamina.com
 
Servicios web con Python
Servicios web con PythonServicios web con Python
Servicios web con PythonManuel Pérez
 
Servicios web
Servicios webServicios web
Servicios webitoomac02
 
Servicios web
Servicios webServicios web
Servicios webitoomac02
 
Servicios web en php, perl, java
Servicios web en php, perl, javaServicios web en php, perl, java
Servicios web en php, perl, javaFaby Marcos Solis
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAlberto Ruibal
 

Similar a Define y desarrolla tu primera api (20)

Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apis
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API REST
 
Servicios web
Servicios webServicios web
Servicios 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)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSH
 
5.2. api-rest
5.2. api-rest5.2. api-rest
5.2. api-rest
 
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"
 
Servicios web con Python
Servicios web con PythonServicios web con Python
Servicios web con Python
 
OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web en php, perl, java
Servicios web en php, perl, javaServicios web en php, perl, java
Servicios web en php, perl, java
 
Ajax
AjaxAjax
Ajax
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en Android
 
Diseño web
Diseño webDiseño web
Diseño web
 
Seguridad En Programación
Seguridad En ProgramaciónSeguridad En Programación
Seguridad En Programación
 
Diseño web
Diseño webDiseño web
Diseño web
 

Último

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Último (20)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

Define y desarrolla tu primera api

  • 1. Define y 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 ❏ El Mundo Big Data y las APis ❏ El Mundo Cloud y las APis ❏ 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. Al pensar en una API, hay que pensar en desarrollar productos. Es un traje para varios clientes, por lo que a todos no les puede quedar bien. Un backend se desarrolla pensando en tu cliente, es un traje hecho a medida. API Backend ¿Qué es una API?
  • 5. 1) Realizar un documento funcional 2) Realizar el diseño de la API 3) Realizar una implementación fake 4) Implementar la API 5) Validar la API 6) Generar documentación para developers 7) Generar casos de prueba (códigos de ejemplo) 8) Generar los SDks Pasos Definición de Apis
  • 6. Hay que tener en cuenta los siguientes aspectos: ➢ Protocolo API (SOAP vs REST) ➢ Seguridad de la API,métodos de autenticación y autorización. Pj: Basic, oauth1, aouth2… ➢ API Manager (wso2, apigee, genoa) vs ESB (Oracle Service Bus..) ➢ Formato de datos de entrada / salida (xml, json…) Consideraciones generales Definición de Apis
  • 7. Utiliza el protocolo HTTP para realizar las peticiones. El estándar RESTFULL, define cómo se deben realizar las peticiones REST, cuales son los métodos HTTP que se deben utilizar y cómo deben estructurarse las uris para que sean user-friendly. Podemos basarnos en https://github.com/WhiteHouse/api-standards para definir nuestra API. Principios básicos: ➢ Una URL identifica un recurso. Por ejemplo, GET http://testapi.cloudsystems.es/users RestFul Definición de Apis
  • 8. ➢ Uniformidad de interfaz. Los recursos se manipulan a través de las métodos HTTP (PUT, GET, POST AND DELETE). ○ POST crea el recurso ○ PUT permite modificarlo ○ DELETE lo elimina ○ GET permite consultarlo. ○ Adicionalmente, se han introducido nuevos métodos, como PATCH (actualización parcial de un recurso). Principios básicos Restful
  • 9. ➢ Uniformidad de salida. Los códigos HTTP de salida: ○ 1xxx: Informacional ○ 2xx: Resultado satisfactorio ■ 200: OK ■ 201: Recurso creado ○ 3xx: Redirecciones ○ 4xx: Errores de cliente ■ 400: Parámetros incorrectos ■ 404: recurso no encontrado Principios básicos Restful
  • 10. ➢ Mensajes autodescriptivos: Los recursos están desacoplados de la representación. ➢ Los mensajes se pueden devolver en varios formatos. Los mensajes se pueden obtener en una variedad de formatos como HTML, XML, json… Para indicar estos formatos, se puede utilizar las cabeceras Content-Type y Accept o bién indicarlo al final de la URI. Por ejemplo: GET testapi.cloudsystems.es/users.json ➢ Todas las peticiones son sin estado. Principios básicos Restful
  • 11. Crear: POST http://apitest.cloudsystems.es/users Modificar: PUT http://apitest.cloudsystems.es/users/23 Eliminar: DELETE http://apitest.cloudsystems.es/users/23 Consultar: GET http://apitest.cloudsystems.es/users Consultar un usuario: GET http://apitest.cloudsystems.es/users/23 Segundo nivel GET http://apitest.cloudsystems.es/users/23/cars urls Restful
  • 12. Crear un usuario request: POST http://apitest.cloudsystems.es/users body: {"name": "Marco", "firstname": "Polo", "lastname": "2", "address": { "street": "blab bla", "number": "2" }} response: Header:HTTP CODE: 201 Body: {"result": { "info": "user created" }, "data": { "id": "23"} } Ejemplo Restful
  • 13. Obtener usuarios: Request: GET http://apitest.cloudsystems.es/users Response: Header: HTTP CODE: 200 Body: { "result": { "info": "OK"}, "data": { "users": [ { "name": "Marco","firstname": "Polo", "address": {"street": "blabbla"}}, { "name": "Prueba","firstname": "ww", "address": {"street": "blab bla" }}] } } } Ejemplo Restful
  • 14. Actualizar un usuario Request: PUT http://apitest.cloudsystems.es/users/23 body: {lastname:”González”} Response: Header: HTTP CODE: 200 Body: { “result”: {“info”:”user updated”}, {“data”:””} } Ejemplo Restful
  • 15. Eliminar un usuario Request: DELETE http://apitest.cloudsystems.es/users/23 Response: Header: 200 OK Body: { "result": { "info": "user deleted" }, "data": "" } Ejemplo Restful
  • 16. ● Fields ● Paging ● Expand ● Method ● Orderby Parámetros Definición de Apis
  • 17. ➢ Devuelve los atributos seleccionados Fields Parámetros request: GET /users?fields=name response: header: http code 200 body: Original: "data": [ {"user": { "name": "marco", “dni”:”123123123”, “age”:”12” “phones”:[“1222”,”222”] }}]} Response: "data": [ {"user": { "name": "marco" }}]}
  • 18. ➢ Parámetro limit / offset: Se debe mostrar un offset y el número de elementos a devolver. request: GET /users?limit=100&offset=200 response: header: http code 200/206 body: Restful { "paging": { "total": 10, "num": 3, "page_size": 100, "next": "/users?limit=100&offset=300", "previous": "/users?limit=100&offset=100", "last": "/users?limit=100&offset=900", "first": "/users?limit=100&offset=0" }, "data": [ {"user": { "name": "marco"}} ] } Paginación
  • 19. Restful request: POST /users?method=put body: body: {"user": { "name": "pepe" }} Response: header: 200 OK body: {"result": { "info": "user updated" }} ➢Algunos clientes de API pueden no soportar realizar las peticiones PUT, DELETE. PUT y DELETE
  • 20. ➢ Permite devolver el segundo o tercer nivel de un json Expand Restful Por defecto request: GET /users response: header: 200 OK body: {"data": [ {"user": { "name": "marco" }} ]} request: GET /users?expand=address response: header: 200 OK body: {"data": [ {"user": { "name": "marco" “address”:{ “street”:”Calle velasco” } }} ]}
  • 21. ➢ Permite indicar el orden de la lista a devolver Orderby Restful request: GET /users?sortby=name DESC response: header: 200 OK body: {"data": [ {"user": { "name": "marco"}} {"user": { "name": "laura"}} ]} ORIGINAL request: GET /users?orderby=name DESC response: header: 200 OK body: {"data": [ {"user": { "name": "laura"}} {"user": { "name": "marco"}} ]}
  • 22. ➢ Cabecera Authentication - Oauth 1.0 / 2.0 - Basic - Hmac Seguridad Restful request: GET /users?expand=address header: Authentication Basic dXN1YXJpbzpwYXNzd29yZA== response: header: 200 OK body: {"data": [ {"user": { "name": "marco" ]} Base64 (usuario:password)
  • 23. - Accept - Content-type Formatos de entrada/salida Restful request: GET /users?expand=address header: Content-Type: application/xml Accept: application/json response: header: 200 OK body: {"data": [ {"user": { "name": "marco" ]} Base64 (usuario:password)
  • 24. Las Apis deben versionarse como cualquier producto software. No tiene por qué coincidir con la implementación y suele indicarse en la url. METHOD /<version>/<resource> Versionado Restful request: GET /1/users?expand=address header: Content-Type: application/xml Accept: application/json response: header: 200 OK body: {"data": [ {"user": { "name": "marco" ]}
  • 26. #%RAML 0.8 title: GitHub API version: v3 baseUri: https://api.github.com mediaType: application/json protocols: [ HTTP, HTTPS ] schemas: - User: schema/user.json Users: schema/users.json Org: schema/org.json Orgs: schema/orgs.json song** Parámetros generales de la API Existe una sección principal que describe información general de la API, como la siguiente: ❏ title: Título de la API ❏ version: versión de la API. ❏ baseUri: url dónde se va a desplegar la API. ❏ mediaType: Tipo de dato de que va a soportar la API ❏ protocols: Protocolos disponibles para la API (HTTP/HTTPS) ❏ schemas: permite importar schemas json para ser utilizados posteriormente Documento root RAML
  • 27. ❏ parámetros globales: permiten definier parámetros comunes a varios servicios. ❏ queryParameters: Son los parámetros que van en la query. Son los que se pasan como get XXX/users?username=marco ❏ uriParameters: son los parámetros que van directamente en la URI. En RestFul sólo deberían ser identificadores de recursos. ❏ responses: Respuestas del servicio. Hay que especificar el formato de respuesta, y además, se puede añadir su schema y un ejemplo. Los schemas pueden ir en json schema o en xsd. /users: is: [ paged ] get: queryParameters: username: description: user to find 200: body application/json: example: | { "result": { "info": "user created" } Métodos GET RAML
  • 28. ❏ body: Toda petición post debe ir acompañada con información de entrada. ❏ responses: Respuestas del servicio. Hay que especificar el formato de respuesta, y además, se puede añadir su schema y un ejemplo. Los schemas pueden ir en json schema o en xsd. post: description: creates an user body: application/json: example: | {"name": "Marco", "firstname": "Polo", "lastname": "2", "address": { "descripcion": "blab bla", "number": "2" }} responses: 200: body: application/json: example: | {"result": { "info": "user created" }, "data": { "id": "23" } } Métodos POST RAML
  • 29. put: description: updates an user body: application/json: example: | {"name": "Marco", "firstname": "Polo", "lastname": "2", "address": { "descripcion": "blab bla", "number": "2" }} responses: 200: body: application/json: example: | {"result": {"info": "user updated"},"data": ""} ❏ uriParameters: Permite identificar un recurso ❏ queryParameters: Permite filtrar los recursos ❏ responses: Respuestas del servicio. Hay que especificar el formato de respuesta, y además, se puede añadir su schema y un ejemplo. Los schemas pueden ir en json schema o en xsd. ❏ body: Enviar los campos a modificar. Se debería utilizar el método HTTP PATCH para modificaciones parciales. Métodos PUT RAML
  • 30. /{userId}: uriParameters: userId: description: user id delete: description: removes a user responses: 200: body: application/json: example: | { "result": { "info": "user deleted" }, "data": "" } ❏ uriParameters: Permite identificar un recurso ❏ queryParameters: Permite filtrar los recursos ❏ responses: Respuestas del servicio. Hay que especificar el formato de respuesta, y además, se puede añadir su schema y un ejemplo. Los schemas pueden ir en json schema o en xsd. Métodos DELETE RAML
  • 31. Desarrollo de una implementación con las interfaces de entrada y salida. Implementado Fake RAML
  • 32. Desarrollo de una implementación con las interfaces de entrada y salida. Implementado Fake RAML
  • 33. ➢ Seguridad. API Managers ➢ Carga del sistema. ➢ Entorno (¿Desplegar en un PAAS o en un IAAS?) ➢ Estadísticas ➢ Logs del sistema Consideraciones generales Apis
  • 35.
  • 36. Contacta en: Email: admin@apiaddicts.org Web: http://www.meetup.com/APIAddicts Siguenos en: ➢ Linkedin: ApiAddicts ➢ Twitter: @apiaddicts ➢ Facebook: APIAddicts ➢ Meetup: APIAddicts Contacta