SlideShare una empresa de Scribd logo
1 de 75
WORKSHOP I
INTRODUCCIÓN A API REST
¿QUÉ ES UNA API?
APPLICATION PROGRAMING INTERFACE
Conjunto de subrutinas, funciones y
procedimientos que ofrece cierta biblioteca
para ser utilizado por otro software como una
capa de abstracción.
¿QUÉ ES UNA API?
La cara de una plataforma
hacia el mundo exterior.
=
Nos abstraemos de las capas más internas de
la plataforma.
¿QUÉ ES UNA API?
LO QUE IMPORTA ES EL QUÉ, NO EL CÓMO
¿QUÉ ES UNA API?
http://www.smashew.com/
PLATAFORMA MONOLÍTICA
PLATAFORMA DISTRIBUIDA
API
API
API
¿QUÉ ES REST?
¿ES UN PÁJARO?
¿UN AVIÓN?
¿UN PROTOCOLO?
¿UN LENGUAJE?
¿JSON?
¿XML?
¿HTTP?
¿SOA?
NO, ES UN...
¿QUÉ ES REST?
Representational State Transfer es un modelo de arquitectura software orientada a construir servicios web escalables
conforme a una serie de buenas prácticas.
Los principales son:
● Separación y responsabilidades en modelo consumidor y servidor.
● Modelo en base a recursos identificados de forma unívoca y homogénea.
● Operaciones atómicas sin estado.
● Conjunto de operaciones acotadas: CRUD.
Y, ¿sobre qué protocolo se implementa todo esto?
¿QUÉ ES REST?
Un servicio web tiene como objetivo fundamental enviar datos de un punto A a un punto B.
HTTP es un protocolo perfecto para esto:
● Entidades / Nombres → Recursos identificados por una URI.
● Operaciones / Verbos → Métodos HTTP.
● Resultados → Códigos de estado HTTP.
● Metadatos → Cabeceras HTTP.
● Representaciones → Body HTTP.
Realmente, ¿hace falta más?
PROTOCOLO: HTTP
REST VS SOAP
ESTADOS HTTP
2XX 3XX
4XX 5XX
FORMATO: JSON VS XML
● JSON, XML, HTML, texto plano… son formas
de representar la información.
● REST puede trabajar con cualquiera de ellas.
● JSON encaja muy bien en la filosofía REST de
hacer las cosas lo más sencillas posible.
● JavaScript es uno de los lenguajes más
populares.
● XML es un lenguaje pensado para ser
interpretado por máquinas. JSON es más
human-friendly.
EJEMPLO
QUEREMOS CONSTRUIR UNA
PLATAFORMA E-LEARNING CON UN
MODELO DE ARQUITECTURA RESTful.
RECURSOS
Los recursos con las entidades (nombres) sobre las que operar.
Se identifican con URLs:
http://api.e-learning.com/{recurso}/{id}
http://api.e-learning.com/users
http://api.e-learning.com/users/41123
http://api.e-learning.com/courses
http://api.e-learning.com/courses/64362
RECURSOS: DEBATES
ANTIPATRÓN:
http://api.e-learning.com/user?id=41123
ANIDAMIENTO:
http://api.e-learning.com/course/636/module/312
PLURALIZACIÓN:
http://api.e-learning.com/courses
http://api.e-learning.com/course
Los métodos son las operaciones (verbos) que podemos realizar sobre los recursos. Están acotadas por los métodos
disponibles en HTTP.
POST: create
GET: read
PUT: update
DELETE: delete
La mayoría de escenarios se pueden resolver con estas cuatro operaciones.
MÉTODOS
GET
GET http://api.e-learning.com/courses
200 OK
[
{
"id":1,
"name":"Introducción a REST",
"description":"Conceptos fundamentales de las APIs REST: recursos, métodos, status...",
"duration":3,
"modules":[ ...]
},
{
"id":2,
"name":"Python para desarrolladores Java",
"description":"...",
"duration":4,
"modules":[ ...]
}, ...
]
GET
GET http://api.e-learning.com/courses/1
200 OK
{
"id":1,
"name":"Introducción a REST",
"description":"Conceptos fundamentales de las APIs REST",
"duration":3,
"modules":[...]
}
POST
POST http://api.e-learning.com/courses
{
"name":"Introducción a Spark",
"description":"Análisis de datos masivos en memoria con Spark",
"duration":10,
"modules":[...]
}
201 CREATED
Location: /courses/42113
PUT
PUT http://api.e-learning.com/courses/42113
{
"name":"Introducción a Spark" ,
"description":"Análisis de datos masivos en memoria con Spark" ,
"duration":15,
"Modules":[...]
}
200 OK
DELETE
DELETE http://api.e-learning.com /courses/42113
204 NO CONTENT
ó
200 OK
{
"name":"Introducción a Spark",
"description":"Análisis de datos masivos en memoria con Spark",
"duration":15,
"modules":[...]
}
HEAD → Preguntar si un recurso existe.
OPTIONS → Devuelve los métodos disponibles sobre un recurso.
PATCH → Actualizaciones parciales.
OTROS MÉTODOS
Se utilizan para metadatos y protocolo a nivel de aplicación.
Accept: text/plain
Accept-Charset: utf-8
Accept-Encoding: gzip
Accept-Language: es-ES
Cookie: $version=1; skin= new;
Content-Length: 12312
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Type: application/x-www-form-urlencoded
Date: Mon, 27 Apr 2015 08:12:31 GM
Authorization: Basic bXl1c2VyOm15cGFzcw==
Location: /users/123
CABECERAS
Formato en el que vienen representados los datos, se negocia con las cabeceras Accept (petición) y Content-Type
(petición y respuesta).
application/json
application/xml
application/octet-stream
text/plain
text/html
application/x-www-form-urlencoded
multipart/form-data
CONTENIDO
Normalmente se pasan como query parameters y se utilizan para añadir criterios adicionales de filtrado, ordenación, paginado…
GET http://api.e-learning.com/courses?name=Spark&page_size=10&sort=+name
[
{
"id":1,
"name":"Introducción a Spark",
...
},
{
...
]
PARÁMETROS
Además del status code 4XX ó 5XX correspondiente, hay que devolver un body informativo:
{
"errors":[
{
"userMessage":"Sorry, resource does not exist",
"internalMessage":"No course found in the database",
"code":34
}
]
}
GESTIÓN DE ERRORES
¿Qué ocurre si lanzas una nueva versión de tu API?
→ VERSIONADO
http://api.e-learning.com/v1
http://api.e-learning.com/v2
...
VERSIONADO
HATEOAS
Hypermedia as the Engine of Application State
{
"id":1,
"name":"Introducción a REST",
"description":"Conceptos fundamentales de las APIs REST: recursos, métodos, status...",
"duration":3,
"modules":[
{
"id":32,
"name":"HATEOAS",
"links":[
{
"rel":"self",
"href":"/v1/modules/32"
}
]
}
...
]
}
BENEFICIOS: HOMOGENEIDAD
/listUsers?id=123
/getUsers?id=123
/findUsers?user_id=123
/users/find/123
/users/get_by_id/123
/deleteUser
/users: GET y POST
/users/{id}: GET, PUT y DELETE
BENEFICIOS: SIN ESTADO → ESCALABLE
/enroll_user_course?course=1&user=2
1. Comprobar si existe curso
2. Comprobar si existe usuario
3. Comprobar si quedan plazas libres en el curso
4. ...
Asignar usuario al curso.
HEAD /user/1
GET /courses/1
POST /course/1/user/1
...
Q&A
Descanso 10 minutos
CASOS DE USO: BACK END APP MÓVIL
APIREST
/scores
/level/610
/gamestats
GET
POST
POST
GET
CASOS DE USO: BACK END APP MÓVIL
APIREST
/account
/transactions
/transfer
GET
POST
POST
GET
CASOS DE USO: MACHINE TO MACHINE
MYSTORE
/checkout
/pay
/user
/payment
POST
GET
POST
POST
CASOS DE USO: MACHINE TO MACHINE
MYAPP
/service2
/ec2/new
/service3
/service4
/service5
/service6
/service1
/storage
POST
PUT
CASOS DE USO: DATA API (READ ONLY)
/nextweek
/today
/cities/madrid
GET
GET
GET
GET
ESTADÍSTICAS
http://www.programmableweb.com/news/97-games-apis-secondlife-internet-video-archive-and-eve-online/2012/05/30
ESTADÍSTICAS
http://www.programmableweb.com/news/97-games-apis-secondlife-internet-video-archive-and-eve-online/2012/05/30
ESTADÍSTICAS
TIPOLOGÍA DE APIs
● Servicios back-end Internet.
● e-Commerce.
● Backoffice.
● Financieros.
● Datos (solo lectura).
● ...
SEGURIDAD
SEGURIDAD EN SERVICIOS REST
1. Esquemas (RFC 2617)
Basic
Digest Schemes (OAuth 1.0)
Bearer Token Schemes (OAuth2)
Custom
2. Autenticación por Api Key
3. Autenticación por Token
Header:
Authorization: ….
../?api-key=…&secret-key=….
../?token=….
ESQUEMA: BÁSICO
PROS:
● Simple de utilizar (en el cliente).
● Soportado por todos los servidores y frameworks
de programación (y navegadores!!!!).
● Utiliza la cabecera Authentication
● Estándar http.
● No requiere peticiones CORS
CONS:
● Base64 no es un un tipo de cifrado!
● Solo es seguro sobre HTTPs
● Es más lento… (https).
base64string = base64.encode( username + “:” + password)
req.add_header(" Authorization", "Basic " + base64string)
req.send()
ESQUEMA: DIGEST (i.e. OAuth 1.0)
PROS:
● Pensada para autenticación con 3ros de
manera segura.
● Garantiza la autenticidad end-to-end del
mensaje.
● No es necesario utilizar HTTPS.
● Las contraseñas nunca se envían en las
peticiones.
● No es vulnerable a Man-In-The-Middle.
CONS:
● Complejo de implementar tanto el cliente como servidor.
● Complejo de entender y utilizar.
● Los clientes de navegadores no son buenos para retener
los tokens y credenciales necesarios.
POST /1/statuses/update.json
Authorization:
OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtI……...EyMZeS9weJAEb",
oauth_version="1.0"
ESQUEMA: DIGEST (i.e. OAuth 1.0)
usuario
app
tercero
1. usuario accede a la app y pide
conectar con tercero 2. app pide al tercero un token de
autorización
3. tercero genera el token y el
secret token
4. app construye link de auth y lo
envía al usuario
5. usuario autoriza al app mediante link
6. app accede a los datos del
cliente mediante el token
ESQUEMA: BEARER TOKEN (OAUTH 2.0)
PROS:
● Utiliza estándar para generación de tokens (JWT) que expiran.
● Más sencillo que ESQUEMA: DIGEST.
● No requiere acceso a la contraseña del usuario.
CONS:
● Susceptible a ataques Man-In-The-Middle.
● Requiere renovación del token, proceso posiblemente complejo.
POST /events HTTP/1.1
Host: my-server.com
Authorization: Bearer AbCdEf123456
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/1.0 (KHTML,
like Gecko; Gmail Actions)
ESQUEMA: CUSTOM
PROS:
● Personalización total tanto del flujo de
comunicaciones, como de la generación de
claves (siempre utilizando la cabecera
Authorization).
CONS:
● Hay que generar documentación exquisita y
clientes/librerías propietarias que debes
entregar a tus consumidores.
● Puede incrementar la complejidad.
AUTENTICACIÓN API KEY
PROS:
● Ideal para API m2m.
● Se puede combinar con otros tipos de auth como basic/digest/bearer.
CONS:
● No se recomienda guardar el api KEY, en clientes inseguros como Navegadores (HTML/JS).
Ejemplo:
ID : YLNVXG091ZO1BSANZ5U6DCTIX
Secret: gtaMCCJoFnEu3dDlkxmdgtaMCCJoFnEu3dDlkxmd+92iaY
AUTENTICACIÓN POR TOKEN
PROS:
● Ideal para API m2m.
CONS:
● No se recomienda guardar el api KEY, en clientes inseguros como Navegadores (HTML/JS).
1. Request: POST /token
?grant_type=password&username=username&password=password
2. Response:
{
“token_type":"auth.service1",
“expires_in":6000,
"refresh_token":"U9fhc2aNkUuwiFRDfrRo",
"parameter1":"value1”,
"access_token":" 6tivaTH33cafRZI5mOIu"
}
3. GET /service1 HTTP/1.1
Authorization: Bearer 6tivaTH33cafRZI5mOIu
MODELING LANGUAGES
...ioDocs, WADL, WSDL
WSDL 1.0/2.0
RAML
SWAGGER
BLUEPRINT
TOOLING!
Generación de
DOC
Generación de
API Java
Generación de
Pruebas
Unitarias
Generación de
pruebas
funcionales
Definición de
interfaz REST
Generación de
Cliente
(javascript)
ANÁLISIS
Generación de
pruebas carga
DEV FRONTEND
DEV FRONTEND
DEV BACKEND DEV BACKEND
DEV BACKEND
DEV BACKEND
TOOLING!
Generación de
DOC
Generación de
API
Generación de
Pruebas
Unitarias
Generación de
pruebas
funcionales
Definición
de interfaz
REST
Generación
de Cliente
(javascript)
API Designer
Generación de
pruebas carga
API Console
API Notebook
REST Postman
SoapUI plugin
JMeter / Tsung
JAX-RS/Spring
Restify
API MANAGEMENT: WHAT?
Servicio
Servicio backend consumidores
API
API MANAGER APP
API MANAGEMENT: FEATURES
● API Security: SSL, PKI, threat protection, schema validation, encryption, signatures, etc.
● API Lifecycle governance: Versioning, etc.
● Analytics & traffic monitoring.
● API Identity: API key, OAuth, SAML, LDAP, MFA, token translation & management.
● API metering, Billing and Monetization
● Developer Center: Client ID/app key generation, interactive API console.
● API Discovery: Catalog, search and provisioning.
● API Orchestration: Adaptation of multiple services, workflow operations, branching policies, etc.
● Operational Integration: System monitoring, clustering, scalability, migration.
API MANAGEMENT
PYTHON: DJANGO REST
NODEJS
restify
JAVA
MICROSERVICIOS: EVOLUCIÓN
http://es.slideshare.net/ErnestoHernandezRodriguez/arquitecturas-de-microservicios-codemotion-2014
PATRONES: ADAPTER
PATRONES: ADAPTER
PATRONES: ADAPTER (NETFLIX)
PATRONES: WEBHOOKS
polling NO!!
NO
NO!!
no
ALGO PARA
MI?
ALGO PARA
MI?
ALGO PARA
MI?
ALGO PARA
MI?
NOOOO!!!!
NO!!!!!!
cliente servidor
PATRONES: WEBHOOKS
OK
SI TE LLEGA ALGO
ENVIAMELO AL
BUZÓN!
LLEGÓ
ALGO
servidorcliente
INICIATIVAS: ODATA
OData
El protocolo OData (Open Data Protocol) facilita la creación de servicios de datos REST, que pueden ser identificados por URI (uniform
resource identifiers) únicas, para ser publicados y consumidos por clientes web.
Protocolos
Convenios
Lenguaje de definición de esquemas común
Formato JSON Format
Vocabulario estándar
GET /statuses/retweets_of_me
GET /friends/ids
POST /friendships/destroy
GET /blocks/list
GET /favorites/list
POST /favorites/destroy
POST /favorites/create
GET /v1/payments/payment/<Payment-Id>
POST /v1/payments/orders/<Order-Id>/authorize
POST /v1/payments/orders/<Order-Id>/do-void
POST /v1/payments/orders/<Order-Id>/capture
POST /v1/payments/capture/<Capture-Id>/refund
GET /v1/invoicing/invoices?<Query-String>
GET /v1/invoicing/invoices/<Invoice-Id>/qr-code
SHOW ME YOUR API!
● programmableweb.com
● github.com/WhiteHouse/api-standards
● dev.twitter.com/rest/public
● developers.bbva.com
www.beeva.com
hablemos@beeva.com

Más contenido relacionado

La actualidad más candente

3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOS
3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOS3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOS
3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOSDaniela Barrientos
 
Programación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de CapasProgramación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de CapasEdward Ropero
 
Arquitecturas RISC - CISC
Arquitecturas RISC - CISCArquitecturas RISC - CISC
Arquitecturas RISC - CISCEdwin Belduma
 
Unidad 1 Ingenieria de software
Unidad 1 Ingenieria de softwareUnidad 1 Ingenieria de software
Unidad 1 Ingenieria de softwareJahiro Bojorquez
 
Requerimientos no funcionales
Requerimientos no funcionalesRequerimientos no funcionales
Requerimientos no funcionalesAngel Minga
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesAlvaro Enrique Ruano
 
Diseno de la arquitectura
Diseno de la arquitecturaDiseno de la arquitectura
Diseno de la arquitecturaFatima Cham
 
Modelo de desarrollo concurrente
Modelo de desarrollo concurrenteModelo de desarrollo concurrente
Modelo de desarrollo concurrentesamuel ospino
 
Qué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOSQué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOSmyle22
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareRoberth Loaiza
 
Caracteristicas del modelo orientado a objetos
Caracteristicas del modelo orientado a objetosCaracteristicas del modelo orientado a objetos
Caracteristicas del modelo orientado a objetosJose Diaz Silva
 
RESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTRESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTAlejito Laaz
 
Aplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicioAplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicioGrial - University of Salamanca
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQLbrobelo
 

La actualidad más candente (20)

Ieee 830
Ieee 830Ieee 830
Ieee 830
 
3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOS
3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOS3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOS
3.5.2 IDENTIFICACIÓN, IMPACTO Y PROYECCIÓN DEL RIEGOS
 
Programación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de CapasProgramación I 2. Arquitectura de Capas
Programación I 2. Arquitectura de Capas
 
3.creacion de componentes visuales
3.creacion de componentes visuales3.creacion de componentes visuales
3.creacion de componentes visuales
 
Arquitecturas RISC - CISC
Arquitecturas RISC - CISCArquitecturas RISC - CISC
Arquitecturas RISC - CISC
 
Unidad 1 Ingenieria de software
Unidad 1 Ingenieria de softwareUnidad 1 Ingenieria de software
Unidad 1 Ingenieria de software
 
Requerimientos no funcionales
Requerimientos no funcionalesRequerimientos no funcionales
Requerimientos no funcionales
 
Programación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clasesProgramación Orientada a Objetos - Otras relaciones entre clases
Programación Orientada a Objetos - Otras relaciones entre clases
 
Diseno de la arquitectura
Diseno de la arquitecturaDiseno de la arquitectura
Diseno de la arquitectura
 
Front end y Back-end
Front end y Back-end Front end y Back-end
Front end y Back-end
 
Modelo evolutivo
Modelo evolutivoModelo evolutivo
Modelo evolutivo
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Modelo de desarrollo concurrente
Modelo de desarrollo concurrenteModelo de desarrollo concurrente
Modelo de desarrollo concurrente
 
Computacion paralela
Computacion paralelaComputacion paralela
Computacion paralela
 
Qué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOSQué es uml, PARA QUE SIRVE, PASOS
Qué es uml, PARA QUE SIRVE, PASOS
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de Software
 
Caracteristicas del modelo orientado a objetos
Caracteristicas del modelo orientado a objetosCaracteristicas del modelo orientado a objetos
Caracteristicas del modelo orientado a objetos
 
RESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTRESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPT
 
Aplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicioAplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicio
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 

Destacado (18)

WORKSHOP II: API REST
WORKSHOP II: API RESTWORKSHOP II: API REST
WORKSHOP II: API REST
 
Charla REST API
Charla REST APICharla REST API
Charla REST API
 
Simplemente REST
Simplemente RESTSimplemente REST
Simplemente REST
 
Introducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLCIntroducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLC
 
Single Sign On Salesforce Developer Group
Single Sign On Salesforce Developer GroupSingle Sign On Salesforce Developer Group
Single Sign On Salesforce Developer Group
 
OAuth and OpenID
OAuth and OpenIDOAuth and OpenID
OAuth and OpenID
 
GFI - Seguridad en tus APIs
GFI - Seguridad en tus APIsGFI - Seguridad en tus APIs
GFI - Seguridad en tus APIs
 
WSO2 REST API Example
WSO2 REST API ExampleWSO2 REST API Example
WSO2 REST API Example
 
Introduccion a los Servicios Web Rest
Introduccion a los Servicios Web RestIntroduccion a los Servicios Web Rest
Introduccion a los Servicios Web Rest
 
Rest API
Rest APIRest API
Rest API
 
(BDT313) Amazon DynamoDB For Big Data
(BDT313) Amazon DynamoDB For Big Data(BDT313) Amazon DynamoDB For Big Data
(BDT313) Amazon DynamoDB For Big Data
 
Herramientas DevOps
Herramientas DevOpsHerramientas DevOps
Herramientas DevOps
 
Json web token api authorization
Json web token api authorizationJson web token api authorization
Json web token api authorization
 
DEVNET-1126 APIC-EM API
DEVNET-1126	APIC-EM APIDEVNET-1126	APIC-EM API
DEVNET-1126 APIC-EM API
 
Modern API Security with JSON Web Tokens
Modern API Security with JSON Web TokensModern API Security with JSON Web Tokens
Modern API Security with JSON Web Tokens
 
144 Rest Web Services
144 Rest Web Services144 Rest Web Services
144 Rest Web Services
 
Visual Studio IDE
Visual Studio IDEVisual Studio IDE
Visual Studio IDE
 
APIC-EM API Deep Dive
APIC-EM API Deep DiveAPIC-EM API Deep Dive
APIC-EM API Deep Dive
 

Similar a REST API Workshop Introduction

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
 
Construcción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARConstrucción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARMarcos Martinez
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera apiCloudAppi
 
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 apisCloudAppi
 
WEB SCRAPING & API REST
 WEB SCRAPING & API REST WEB SCRAPING & API REST
WEB SCRAPING & API RESTCharly Graf Q
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 
RESTful Para todos by Diego Sapriza
RESTful Para todos by Diego SaprizaRESTful Para todos by Diego Sapriza
RESTful Para todos by Diego Sapriza.NET Conf UY
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007guestd24c393
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apisCloudAppi
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007guest976d083
 
API Agregadas y Computo Masivo
API Agregadas y Computo MasivoAPI Agregadas y Computo Masivo
API Agregadas y Computo MasivoAndrea Guevara
 
Balotario resuelto
Balotario resueltoBalotario resuelto
Balotario resueltoAlexiToxD
 
Servicios web
Servicios webServicios web
Servicios webitoomac02
 
Servicios web
Servicios webServicios web
Servicios webitoomac02
 

Similar a REST API Workshop Introduction (20)

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
 
Construcción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARConstrucción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEAR
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera api
 
Servicios web
Servicios webServicios web
Servicios web
 
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
 
OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
WEB SCRAPING & API REST
 WEB SCRAPING & API REST WEB SCRAPING & API REST
WEB SCRAPING & API REST
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
RESTful Para todos by Diego Sapriza
RESTful Para todos by Diego SaprizaRESTful Para todos by Diego Sapriza
RESTful Para todos by Diego Sapriza
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apis
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007
 
Guiacursophp sql
Guiacursophp sqlGuiacursophp sql
Guiacursophp sql
 
Curso introduccionphp sql
Curso introduccionphp sqlCurso introduccionphp sql
Curso introduccionphp sql
 
API Agregadas y Computo Masivo
API Agregadas y Computo MasivoAPI Agregadas y Computo Masivo
API Agregadas y Computo Masivo
 
Balotario resuelto
Balotario resueltoBalotario resuelto
Balotario resuelto
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web
Servicios webServicios web
Servicios web
 

Más de BEEVA_es

BEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of todayBEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of todayBEEVA_es
 
JustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream ProcessingJustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream ProcessingBEEVA_es
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
BEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbotsBEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbotsBEEVA_es
 
BEEVA | Crear bots avanzados
BEEVA | Crear bots avanzadosBEEVA | Crear bots avanzados
BEEVA | Crear bots avanzadosBEEVA_es
 
BEEVA | Ruling the world galaxy with your voice and the cloud
 BEEVA | Ruling the world galaxy with your voice and the cloud BEEVA | Ruling the world galaxy with your voice and the cloud
BEEVA | Ruling the world galaxy with your voice and the cloudBEEVA_es
 
[API Days] Cooking with apis
[API Days] Cooking with apis[API Days] Cooking with apis
[API Days] Cooking with apisBEEVA_es
 
Como ganar un hackathon
Como ganar un hackathonComo ganar un hackathon
Como ganar un hackathonBEEVA_es
 
Bases de Datos No Relacionales
Bases de Datos No RelacionalesBases de Datos No Relacionales
Bases de Datos No RelacionalesBEEVA_es
 
Curso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVACurso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVABEEVA_es
 
Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0BEEVA_es
 
Desmitificando un proyecto de Big Data
Desmitificando un proyecto de Big DataDesmitificando un proyecto de Big Data
Desmitificando un proyecto de Big DataBEEVA_es
 
Cómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organizaciónCómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organizaciónBEEVA_es
 
Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT BEEVA_es
 
Siete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big DataSiete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big DataBEEVA_es
 
Bases de Datos no relacionales
Bases de Datos no relacionalesBases de Datos no relacionales
Bases de Datos no relacionalesBEEVA_es
 
Data Platform de BEEVA
Data Platform de BEEVAData Platform de BEEVA
Data Platform de BEEVABEEVA_es
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsBEEVA_es
 
El presente del mundo del retail
El presente del mundo del retailEl presente del mundo del retail
El presente del mundo del retailBEEVA_es
 
El presente del mundo telco
El presente del mundo telcoEl presente del mundo telco
El presente del mundo telcoBEEVA_es
 

Más de BEEVA_es (20)

BEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of todayBEEVA | The reality of IoT as of today
BEEVA | The reality of IoT as of today
 
JustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream ProcessingJustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
JustGiving | Serverless Data Pipelines, API, Messaging and Stream Processing
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
BEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbotsBEEVA | Diseño UX para chatbots
BEEVA | Diseño UX para chatbots
 
BEEVA | Crear bots avanzados
BEEVA | Crear bots avanzadosBEEVA | Crear bots avanzados
BEEVA | Crear bots avanzados
 
BEEVA | Ruling the world galaxy with your voice and the cloud
 BEEVA | Ruling the world galaxy with your voice and the cloud BEEVA | Ruling the world galaxy with your voice and the cloud
BEEVA | Ruling the world galaxy with your voice and the cloud
 
[API Days] Cooking with apis
[API Days] Cooking with apis[API Days] Cooking with apis
[API Days] Cooking with apis
 
Como ganar un hackathon
Como ganar un hackathonComo ganar un hackathon
Como ganar un hackathon
 
Bases de Datos No Relacionales
Bases de Datos No RelacionalesBases de Datos No Relacionales
Bases de Datos No Relacionales
 
Curso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVACurso de Responsive Web Design de BEEVA
Curso de Responsive Web Design de BEEVA
 
Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0Push comercial ANS BEEVA v1.0
Push comercial ANS BEEVA v1.0
 
Desmitificando un proyecto de Big Data
Desmitificando un proyecto de Big DataDesmitificando un proyecto de Big Data
Desmitificando un proyecto de Big Data
 
Cómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organizaciónCómo empezar a implementar proyectos Big Data en tu organización
Cómo empezar a implementar proyectos Big Data en tu organización
 
Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT Hadoop en la nube: ETL a ELT
Hadoop en la nube: ETL a ELT
 
Siete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big DataSiete "consejos" para abordar un proyecto con tecnologías Big Data
Siete "consejos" para abordar un proyecto con tecnologías Big Data
 
Bases de Datos no relacionales
Bases de Datos no relacionalesBases de Datos no relacionales
Bases de Datos no relacionales
 
Data Platform de BEEVA
Data Platform de BEEVAData Platform de BEEVA
Data Platform de BEEVA
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
 
El presente del mundo del retail
El presente del mundo del retailEl presente del mundo del retail
El presente del mundo del retail
 
El presente del mundo telco
El presente del mundo telcoEl presente del mundo telco
El presente del mundo telco
 

Último

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
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
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
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
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
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
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (15)

trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
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
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
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
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
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)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

REST API Workshop Introduction

  • 3. APPLICATION PROGRAMING INTERFACE Conjunto de subrutinas, funciones y procedimientos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. ¿QUÉ ES UNA API? La cara de una plataforma hacia el mundo exterior. =
  • 4. Nos abstraemos de las capas más internas de la plataforma. ¿QUÉ ES UNA API? LO QUE IMPORTA ES EL QUÉ, NO EL CÓMO
  • 5. ¿QUÉ ES UNA API? http://www.smashew.com/
  • 9. ¿ES UN PÁJARO? ¿UN AVIÓN? ¿UN PROTOCOLO? ¿UN LENGUAJE? ¿JSON? ¿XML? ¿HTTP? ¿SOA? NO, ES UN... ¿QUÉ ES REST?
  • 10. Representational State Transfer es un modelo de arquitectura software orientada a construir servicios web escalables conforme a una serie de buenas prácticas. Los principales son: ● Separación y responsabilidades en modelo consumidor y servidor. ● Modelo en base a recursos identificados de forma unívoca y homogénea. ● Operaciones atómicas sin estado. ● Conjunto de operaciones acotadas: CRUD. Y, ¿sobre qué protocolo se implementa todo esto? ¿QUÉ ES REST?
  • 11. Un servicio web tiene como objetivo fundamental enviar datos de un punto A a un punto B. HTTP es un protocolo perfecto para esto: ● Entidades / Nombres → Recursos identificados por una URI. ● Operaciones / Verbos → Métodos HTTP. ● Resultados → Códigos de estado HTTP. ● Metadatos → Cabeceras HTTP. ● Representaciones → Body HTTP. Realmente, ¿hace falta más? PROTOCOLO: HTTP
  • 14. FORMATO: JSON VS XML ● JSON, XML, HTML, texto plano… son formas de representar la información. ● REST puede trabajar con cualquiera de ellas. ● JSON encaja muy bien en la filosofía REST de hacer las cosas lo más sencillas posible. ● JavaScript es uno de los lenguajes más populares. ● XML es un lenguaje pensado para ser interpretado por máquinas. JSON es más human-friendly.
  • 15. EJEMPLO QUEREMOS CONSTRUIR UNA PLATAFORMA E-LEARNING CON UN MODELO DE ARQUITECTURA RESTful.
  • 16. RECURSOS Los recursos con las entidades (nombres) sobre las que operar. Se identifican con URLs: http://api.e-learning.com/{recurso}/{id} http://api.e-learning.com/users http://api.e-learning.com/users/41123 http://api.e-learning.com/courses http://api.e-learning.com/courses/64362
  • 18. Los métodos son las operaciones (verbos) que podemos realizar sobre los recursos. Están acotadas por los métodos disponibles en HTTP. POST: create GET: read PUT: update DELETE: delete La mayoría de escenarios se pueden resolver con estas cuatro operaciones. MÉTODOS
  • 19. GET GET http://api.e-learning.com/courses 200 OK [ { "id":1, "name":"Introducción a REST", "description":"Conceptos fundamentales de las APIs REST: recursos, métodos, status...", "duration":3, "modules":[ ...] }, { "id":2, "name":"Python para desarrolladores Java", "description":"...", "duration":4, "modules":[ ...] }, ... ]
  • 20. GET GET http://api.e-learning.com/courses/1 200 OK { "id":1, "name":"Introducción a REST", "description":"Conceptos fundamentales de las APIs REST", "duration":3, "modules":[...] }
  • 21. POST POST http://api.e-learning.com/courses { "name":"Introducción a Spark", "description":"Análisis de datos masivos en memoria con Spark", "duration":10, "modules":[...] } 201 CREATED Location: /courses/42113
  • 22. PUT PUT http://api.e-learning.com/courses/42113 { "name":"Introducción a Spark" , "description":"Análisis de datos masivos en memoria con Spark" , "duration":15, "Modules":[...] } 200 OK
  • 23. DELETE DELETE http://api.e-learning.com /courses/42113 204 NO CONTENT ó 200 OK { "name":"Introducción a Spark", "description":"Análisis de datos masivos en memoria con Spark", "duration":15, "modules":[...] }
  • 24. HEAD → Preguntar si un recurso existe. OPTIONS → Devuelve los métodos disponibles sobre un recurso. PATCH → Actualizaciones parciales. OTROS MÉTODOS
  • 25. Se utilizan para metadatos y protocolo a nivel de aplicación. Accept: text/plain Accept-Charset: utf-8 Accept-Encoding: gzip Accept-Language: es-ES Cookie: $version=1; skin= new; Content-Length: 12312 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== Content-Type: application/x-www-form-urlencoded Date: Mon, 27 Apr 2015 08:12:31 GM Authorization: Basic bXl1c2VyOm15cGFzcw== Location: /users/123 CABECERAS
  • 26. Formato en el que vienen representados los datos, se negocia con las cabeceras Accept (petición) y Content-Type (petición y respuesta). application/json application/xml application/octet-stream text/plain text/html application/x-www-form-urlencoded multipart/form-data CONTENIDO
  • 27. Normalmente se pasan como query parameters y se utilizan para añadir criterios adicionales de filtrado, ordenación, paginado… GET http://api.e-learning.com/courses?name=Spark&page_size=10&sort=+name [ { "id":1, "name":"Introducción a Spark", ... }, { ... ] PARÁMETROS
  • 28. Además del status code 4XX ó 5XX correspondiente, hay que devolver un body informativo: { "errors":[ { "userMessage":"Sorry, resource does not exist", "internalMessage":"No course found in the database", "code":34 } ] } GESTIÓN DE ERRORES
  • 29. ¿Qué ocurre si lanzas una nueva versión de tu API? → VERSIONADO http://api.e-learning.com/v1 http://api.e-learning.com/v2 ... VERSIONADO
  • 30. HATEOAS Hypermedia as the Engine of Application State { "id":1, "name":"Introducción a REST", "description":"Conceptos fundamentales de las APIs REST: recursos, métodos, status...", "duration":3, "modules":[ { "id":32, "name":"HATEOAS", "links":[ { "rel":"self", "href":"/v1/modules/32" } ] } ... ] }
  • 32. BENEFICIOS: SIN ESTADO → ESCALABLE /enroll_user_course?course=1&user=2 1. Comprobar si existe curso 2. Comprobar si existe usuario 3. Comprobar si quedan plazas libres en el curso 4. ... Asignar usuario al curso. HEAD /user/1 GET /courses/1 POST /course/1/user/1 ...
  • 34. CASOS DE USO: BACK END APP MÓVIL APIREST /scores /level/610 /gamestats GET POST POST GET
  • 35. CASOS DE USO: BACK END APP MÓVIL APIREST /account /transactions /transfer GET POST POST GET
  • 36. CASOS DE USO: MACHINE TO MACHINE MYSTORE /checkout /pay /user /payment POST GET POST POST
  • 37. CASOS DE USO: MACHINE TO MACHINE MYAPP /service2 /ec2/new /service3 /service4 /service5 /service6 /service1 /storage POST PUT
  • 38. CASOS DE USO: DATA API (READ ONLY) /nextweek /today /cities/madrid GET GET GET GET
  • 42. TIPOLOGÍA DE APIs ● Servicios back-end Internet. ● e-Commerce. ● Backoffice. ● Financieros. ● Datos (solo lectura). ● ...
  • 44. SEGURIDAD EN SERVICIOS REST 1. Esquemas (RFC 2617) Basic Digest Schemes (OAuth 1.0) Bearer Token Schemes (OAuth2) Custom 2. Autenticación por Api Key 3. Autenticación por Token Header: Authorization: …. ../?api-key=…&secret-key=…. ../?token=….
  • 45. ESQUEMA: BÁSICO PROS: ● Simple de utilizar (en el cliente). ● Soportado por todos los servidores y frameworks de programación (y navegadores!!!!). ● Utiliza la cabecera Authentication ● Estándar http. ● No requiere peticiones CORS CONS: ● Base64 no es un un tipo de cifrado! ● Solo es seguro sobre HTTPs ● Es más lento… (https). base64string = base64.encode( username + “:” + password) req.add_header(" Authorization", "Basic " + base64string) req.send()
  • 46. ESQUEMA: DIGEST (i.e. OAuth 1.0) PROS: ● Pensada para autenticación con 3ros de manera segura. ● Garantiza la autenticidad end-to-end del mensaje. ● No es necesario utilizar HTTPS. ● Las contraseñas nunca se envían en las peticiones. ● No es vulnerable a Man-In-The-Middle. CONS: ● Complejo de implementar tanto el cliente como servidor. ● Complejo de entender y utilizar. ● Los clientes de navegadores no son buenos para retener los tokens y credenciales necesarios. POST /1/statuses/update.json Authorization: OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtI……...EyMZeS9weJAEb", oauth_version="1.0"
  • 47. ESQUEMA: DIGEST (i.e. OAuth 1.0) usuario app tercero 1. usuario accede a la app y pide conectar con tercero 2. app pide al tercero un token de autorización 3. tercero genera el token y el secret token 4. app construye link de auth y lo envía al usuario 5. usuario autoriza al app mediante link 6. app accede a los datos del cliente mediante el token
  • 48. ESQUEMA: BEARER TOKEN (OAUTH 2.0) PROS: ● Utiliza estándar para generación de tokens (JWT) que expiran. ● Más sencillo que ESQUEMA: DIGEST. ● No requiere acceso a la contraseña del usuario. CONS: ● Susceptible a ataques Man-In-The-Middle. ● Requiere renovación del token, proceso posiblemente complejo. POST /events HTTP/1.1 Host: my-server.com Authorization: Bearer AbCdEf123456 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/1.0 (KHTML, like Gecko; Gmail Actions)
  • 49. ESQUEMA: CUSTOM PROS: ● Personalización total tanto del flujo de comunicaciones, como de la generación de claves (siempre utilizando la cabecera Authorization). CONS: ● Hay que generar documentación exquisita y clientes/librerías propietarias que debes entregar a tus consumidores. ● Puede incrementar la complejidad.
  • 50. AUTENTICACIÓN API KEY PROS: ● Ideal para API m2m. ● Se puede combinar con otros tipos de auth como basic/digest/bearer. CONS: ● No se recomienda guardar el api KEY, en clientes inseguros como Navegadores (HTML/JS). Ejemplo: ID : YLNVXG091ZO1BSANZ5U6DCTIX Secret: gtaMCCJoFnEu3dDlkxmdgtaMCCJoFnEu3dDlkxmd+92iaY
  • 51. AUTENTICACIÓN POR TOKEN PROS: ● Ideal para API m2m. CONS: ● No se recomienda guardar el api KEY, en clientes inseguros como Navegadores (HTML/JS). 1. Request: POST /token ?grant_type=password&username=username&password=password 2. Response: { “token_type":"auth.service1", “expires_in":6000, "refresh_token":"U9fhc2aNkUuwiFRDfrRo", "parameter1":"value1”, "access_token":" 6tivaTH33cafRZI5mOIu" } 3. GET /service1 HTTP/1.1 Authorization: Bearer 6tivaTH33cafRZI5mOIu
  • 54. RAML
  • 57. TOOLING! Generación de DOC Generación de API Java Generación de Pruebas Unitarias Generación de pruebas funcionales Definición de interfaz REST Generación de Cliente (javascript) ANÁLISIS Generación de pruebas carga DEV FRONTEND DEV FRONTEND DEV BACKEND DEV BACKEND DEV BACKEND DEV BACKEND
  • 58. TOOLING! Generación de DOC Generación de API Generación de Pruebas Unitarias Generación de pruebas funcionales Definición de interfaz REST Generación de Cliente (javascript) API Designer Generación de pruebas carga API Console API Notebook REST Postman SoapUI plugin JMeter / Tsung JAX-RS/Spring Restify
  • 59. API MANAGEMENT: WHAT? Servicio Servicio backend consumidores API API MANAGER APP
  • 60. API MANAGEMENT: FEATURES ● API Security: SSL, PKI, threat protection, schema validation, encryption, signatures, etc. ● API Lifecycle governance: Versioning, etc. ● Analytics & traffic monitoring. ● API Identity: API key, OAuth, SAML, LDAP, MFA, token translation & management. ● API metering, Billing and Monetization ● Developer Center: Client ID/app key generation, interactive API console. ● API Discovery: Catalog, search and provisioning. ● API Orchestration: Adaptation of multiple services, workflow operations, branching policies, etc. ● Operational Integration: System monitoring, clustering, scalability, migration.
  • 64. JAVA
  • 69. PATRONES: WEBHOOKS polling NO!! NO NO!! no ALGO PARA MI? ALGO PARA MI? ALGO PARA MI? ALGO PARA MI? NOOOO!!!! NO!!!!!! cliente servidor
  • 70. PATRONES: WEBHOOKS OK SI TE LLEGA ALGO ENVIAMELO AL BUZÓN! LLEGÓ ALGO servidorcliente
  • 71. INICIATIVAS: ODATA OData El protocolo OData (Open Data Protocol) facilita la creación de servicios de datos REST, que pueden ser identificados por URI (uniform resource identifiers) únicas, para ser publicados y consumidos por clientes web. Protocolos Convenios Lenguaje de definición de esquemas común Formato JSON Format Vocabulario estándar
  • 72. GET /statuses/retweets_of_me GET /friends/ids POST /friendships/destroy GET /blocks/list GET /favorites/list POST /favorites/destroy POST /favorites/create
  • 73. GET /v1/payments/payment/<Payment-Id> POST /v1/payments/orders/<Order-Id>/authorize POST /v1/payments/orders/<Order-Id>/do-void POST /v1/payments/orders/<Order-Id>/capture POST /v1/payments/capture/<Capture-Id>/refund GET /v1/invoicing/invoices?<Query-String> GET /v1/invoicing/invoices/<Invoice-Id>/qr-code
  • 74. SHOW ME YOUR API! ● programmableweb.com ● github.com/WhiteHouse/api-standards ● dev.twitter.com/rest/public ● developers.bbva.com