SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
#REST
Asier Marqués

@asiermarques
linkedin.com/in/asier
@asiermarques
HTTP
HTTP - RFC 2616

Request

Response
Request
GET /usuarios
Accept: text/html, application/json
Response
GET /usuarios
Status Code: 200
Content Type: application/json
¿Por qué hacer APIs HTTP?

Evitar la dependencia del cliente con el backend.

Utilizar un protocolo maduro, probado y muy
usado.
Mejorar la integración con servicios o
aplicaciones de terceros.
RESTFul
Richardson Madurity Model

Nivel 1 – Uso correcto de las URIs

Nivel 2 – Uso correcto de HTTP
Nivel 3 – Hypermedia
Nivel 1 - URIs
Recursos y URIs

Cada información con la que queramos
trabajar es un recurso.
Usamos URLs, un tipo de URI que
identifica y localiza un recurso.
Recursos

Un listado de usuarios

→ /usuarios

Un usuario

→ /usuarios/{id}
Nombrar recursos

Usamos nombres, no verbos
Utilizamos una estructura jerárquica
Evitamos añadir:

Nombres de formatos
Extensiones
Filtros, órdenes paginaciones
Incorrecto

Perfil de usuario

→ /getUser/{id}

Edición de usuario

→ /users/{id}/edit

Paginación de listado

→ /users/page/{page}

Relaciones

→ /invoices/user/{id}
Incorrecto

Perfil de usuario

→ /getUser/{id}

Edición de usuario

→ /users/{id}/edit

Paginación de listado

→ /users/page/{page}

Relaciones

→ /invoices/user/{id}
Correcto

Perfil de usuario

→ /users/{id}

Edición de usuario

→ /users/{id}

Paginación de listado

→ /users?page={page}

Relaciones

→ /user/{id}/invoices
Contenidos parciales, filtrados parciales
GET /usuario/{id}?campos=id,nombre,email

Status Code: 206
Formatos
Incorrecto
GET /user/{id}.xml
Accept: text/html
Correcto
GET /user/{id}
Accept: application/xml
Nivel 2 - HTTP
Métodos HTTP

Leer
Crear
Editar
Editar parcialmente
Eliminar
Opciones disponibles

→
→
→
→
→
→

GET
POST
PUT
PATCH
DELETE
OPTIONS
Códigos de estado HTTP

No reinventar la rueda
RFC 2616 – Sección 10
Información
Éxito
Redirección, proxy o caché
Error de cliente
Error de servidor

→
→
→
→
→

1XX
2XX
3XX
4XX
5XX
Tipo de contenido, media types HTTP
Request

GET /recurso
Accept: application/json
Response
GET /recurso
Status Code 200
Content Type: application/json
Nivel 3 - Hypermedia
http://roy.gbiv.com/untangled/2008/rest-apis-must-behypertext-driven
HATEOAS
Hypermedia as the Engine of
Application State

RSDL
REST Service Description Language
GET pedido/{id}
<pedido>
<id>666</id>
<estado>Procesado</estado>
<links>
<link rel=”factura”>
http://api.acme.com/api/pedido/666/factura
</link>
<link rel=”pago”>
http://api.acme.com/api/pedido/666/pago
</link>
</links>
</pedido>
Hypermedia y HATEOAS

Nos permite desacoplar al máximo el cliente del
servidor.
Nos da flexibilidad ante cambios futuros en
nuestra API.

Nos permite automatizar peticiones sin tener que
conocer de antemano la API.
Utilizamos media type propios.
Accept: application/vnd.{tu servicio} +json
GET /pedido/{id}
Request

Accept:
application/vnd.acme+xml, application/xml
Response
Content Type:
application/vnd.acme+xml
HAL - Hypertext Application Language

application/hal+json

http://stateless.co/hal_specification.html
https://github.com/mikekelly/hal-browser
GET /users/john
{

"username":
"bio":

"john",
"Un tipo majísimo, siempre saluda en la
escalera.",
"real_name": "John Smith”,
"_embedded": { "rs:addresses": [] },
"_links": {
"self": { "href": "/users/john” },
"curies": [{
"name":
"rs",
"href":
"http://api.acme.com/docs/rels/{rel}",
"templated": true
}],

}

}

"rs:posts":
"rs:follow”:

{ "href": "/users/john/posts“ },
{ "href": "/users/john“ }
GET /users/john
{

"username":
"bio":

"john",
"Un tipo majísimo, siempre saluda en la
escalera.",
"real_name":
"John Smith”,
"_embedded": { "rs:addresses": [] },
"_links": {
"self": { "href": "/users/john” },
"curies": [{
"name":
"rs",
"href":
"http://api.acme.com/docs/rels/{rel}",
"templated": true
}],

}

}

"rs:posts": { "href": "/users/john/posts“ },
"rs:follow”: { "href": "/users/john“ }
Más cosas
Versiones

En la URI

/api/v1/recurso
En el content-type
application/vnd.acme+json;v=1

application/vnd.acme-1+json
Seguridad

Autenticación HTTP: Basic, Digest

Sistema propio basado en tokens
OAuth

Gateways: Layer7, apigee enterprise, 3scale...
+ HTTPs (no es opcional)
Operaciones asíncronas

Callback URLs

Notificaciones PUSH
Inbound email parsing
Disponibilidad de formatos

Request
GET /recurso
Accept: application/xml
Response (formato disponible)
GET /recurso
Content Type: application/xml
200

Response (formato no disponible)
GET /recurso
406 Not acceptable
Uso de Etiquetas HTTP
Request

Request

PUT /recurso
If-Match: “XXXX”

PUT /recurso
If-Match: “XXXX”

Response

Response

PUT /recurso
200
Etag: “YYYY”

PUT /recurso
412 Precondition Failed
Etag: “YYYY”
Descripción de errores
Request

Request

POST /users

POST /users

Response

Response

POST /users
201 Created

POST /users
400 Conflict
Content
{
“_errors”: [{
“email”: “email is in use”
}]
}
Utilizando OPTIONS
Request

OPTIONS /users
Response

200
Allow: GET, POST
Content:
{
"POST": {
"description": “Creamos un usuario",
"parameters": {}
},
“GET”: {
"description": “Recuperamos el listado de usuarios“
}
}
BaaS
Backend as a service
BAAS, Backend as a Service

Disponemos de una API de servidor totalmente
funcional en minutos.
Sin problemáticas de infraestructura,
administración de servidores..

Integración con servicios de terceros out of the
box, en algunos casos.
Personalización del código de la API mediante
Javascript y Eventos.
Gracias

@asiermarques

Contenu connexe

En vedette

Rest clase 4 - curso front-end 2014 - open webinars
Rest   clase 4 - curso front-end 2014 - open webinarsRest   clase 4 - curso front-end 2014 - open webinars
Rest clase 4 - curso front-end 2014 - open webinarsOpenWebinars.net
 
BPM Governance: Experiencia en la Introducción de BPM
BPM Governance: Experiencia en la Introducción de BPM BPM Governance: Experiencia en la Introducción de BPM
BPM Governance: Experiencia en la Introducción de BPM EDUTIC
 
1 Introducción a la Arquitectura Empresarial
1  Introducción a la Arquitectura Empresarial1  Introducción a la Arquitectura Empresarial
1 Introducción a la Arquitectura EmpresarialMatersys
 
Representational State Transfer
Representational State TransferRepresentational State Transfer
Representational State TransferAlexei Skachykhin
 

En vedette (7)

Rest schema design
Rest schema designRest schema design
Rest schema design
 
Rest clase 4 - curso front-end 2014 - open webinars
Rest   clase 4 - curso front-end 2014 - open webinarsRest   clase 4 - curso front-end 2014 - open webinars
Rest clase 4 - curso front-end 2014 - open webinars
 
BPM Governance: Experiencia en la Introducción de BPM
BPM Governance: Experiencia en la Introducción de BPM BPM Governance: Experiencia en la Introducción de BPM
BPM Governance: Experiencia en la Introducción de BPM
 
1 Introducción a la Arquitectura Empresarial
1  Introducción a la Arquitectura Empresarial1  Introducción a la Arquitectura Empresarial
1 Introducción a la Arquitectura Empresarial
 
Arquitectura Empresarial 11.0
Arquitectura Empresarial 11.0Arquitectura Empresarial 11.0
Arquitectura Empresarial 11.0
 
Cancer De Prostata
Cancer De ProstataCancer De Prostata
Cancer De Prostata
 
Representational State Transfer
Representational State TransferRepresentational State Transfer
Representational State Transfer
 

Similaire à APIs REST #devfestBilbao

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
 
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
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apisCloudAppi
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera apiCloudAppi
 
144 Rest Web Services
144 Rest Web Services144 Rest Web Services
144 Rest Web ServicesGeneXus
 
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
 
Integración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxIntegración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxLuisTenorio42
 
Introduccion al internet-Html-Css
Introduccion al internet-Html-CssIntroduccion al internet-Html-Css
Introduccion al internet-Html-Cssvhbr3000
 
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...equipo24
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)Daryl Moreno
 
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
 

Similaire à APIs REST #devfestBilbao (20)

REST - deSymfony2012
REST - deSymfony2012REST - deSymfony2012
REST - deSymfony2012
 
RESTful Para todos by Diego Sapriza
RESTful Para todos by Diego SaprizaRESTful Para todos by Diego Sapriza
RESTful Para todos by Diego Sapriza
 
RAML
RAMLRAML
RAML
 
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
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apis
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera api
 
144 Rest Web Services
144 Rest Web Services144 Rest Web Services
144 Rest Web Services
 
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)
 
Integración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxIntegración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptx
 
Tecnologias Web Semantica
Tecnologias Web SemanticaTecnologias Web Semantica
Tecnologias Web Semantica
 
Introduccion al internet-Html-Css
Introduccion al internet-Html-CssIntroduccion al internet-Html-Css
Introduccion al internet-Html-Css
 
Construyendo APIs Seguras y Escalables
Construyendo APIs Seguras y Escalables Construyendo APIs Seguras y Escalables
Construyendo APIs Seguras y Escalables
 
Developers love APIs
Developers love APIsDevelopers love APIs
Developers love APIs
 
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
 
Seminario Twitter Dynamics
Seminario Twitter DynamicsSeminario Twitter Dynamics
Seminario Twitter Dynamics
 
OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
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
 
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)
 

Plus de Asier Marqués

Desarrollo código mantenible en WordPress utilizando Symfony
Desarrollo código mantenible en WordPress utilizando SymfonyDesarrollo código mantenible en WordPress utilizando Symfony
Desarrollo código mantenible en WordPress utilizando SymfonyAsier Marqués
 
Creando Productos SaaS
Creando Productos SaaSCreando Productos SaaS
Creando Productos SaaSAsier Marqués
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPressAsier Marqués
 
Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Asier Marqués
 
Ejecución de servicios digitales y negocios en Internet
Ejecución de servicios digitales y negocios en InternetEjecución de servicios digitales y negocios en Internet
Ejecución de servicios digitales y negocios en InternetAsier Marqués
 
Desarrollo de Mobile Web Apps
Desarrollo de Mobile Web AppsDesarrollo de Mobile Web Apps
Desarrollo de Mobile Web AppsAsier Marqués
 
Presentación de la plataforma abierta Ubiqarama.org
Presentación de la plataforma abierta Ubiqarama.orgPresentación de la plataforma abierta Ubiqarama.org
Presentación de la plataforma abierta Ubiqarama.orgAsier Marqués
 
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1Asier Marqués
 
Albero tech Day - De web a móvil con xamarin
Albero tech Day - De web a móvil con xamarinAlbero tech Day - De web a móvil con xamarin
Albero tech Day - De web a móvil con xamarinAsier Marqués
 
Bilbostack 2014: De web a móvil con Xamarin
Bilbostack 2014: De web a móvil con XamarinBilbostack 2014: De web a móvil con Xamarin
Bilbostack 2014: De web a móvil con XamarinAsier Marqués
 
Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVCAsier Marqués
 
Desarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internetDesarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internetAsier Marqués
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012Asier Marqués
 
4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbao4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbaoAsier Marqués
 
Proyectos fallidos: Rooms.fm en #webdevbilbao
Proyectos fallidos: Rooms.fm en #webdevbilbaoProyectos fallidos: Rooms.fm en #webdevbilbao
Proyectos fallidos: Rooms.fm en #webdevbilbaoAsier Marqués
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Asier Marqués
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesAsier Marqués
 
Sistemas Microsoft Windows
Sistemas Microsoft WindowsSistemas Microsoft Windows
Sistemas Microsoft WindowsAsier Marqués
 

Plus de Asier Marqués (20)

Desarrollo código mantenible en WordPress utilizando Symfony
Desarrollo código mantenible en WordPress utilizando SymfonyDesarrollo código mantenible en WordPress utilizando Symfony
Desarrollo código mantenible en WordPress utilizando Symfony
 
Creando Productos SaaS
Creando Productos SaaSCreando Productos SaaS
Creando Productos SaaS
 
Introducción a Bolt
Introducción a BoltIntroducción a Bolt
Introducción a Bolt
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPress
 
PHP en el 2015
PHP en el 2015PHP en el 2015
PHP en el 2015
 
Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.
 
Ejecución de servicios digitales y negocios en Internet
Ejecución de servicios digitales y negocios en InternetEjecución de servicios digitales y negocios en Internet
Ejecución de servicios digitales y negocios en Internet
 
Desarrollo de Mobile Web Apps
Desarrollo de Mobile Web AppsDesarrollo de Mobile Web Apps
Desarrollo de Mobile Web Apps
 
Presentación de la plataforma abierta Ubiqarama.org
Presentación de la plataforma abierta Ubiqarama.orgPresentación de la plataforma abierta Ubiqarama.org
Presentación de la plataforma abierta Ubiqarama.org
 
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
 
Albero tech Day - De web a móvil con xamarin
Albero tech Day - De web a móvil con xamarinAlbero tech Day - De web a móvil con xamarin
Albero tech Day - De web a móvil con xamarin
 
Bilbostack 2014: De web a móvil con Xamarin
Bilbostack 2014: De web a móvil con XamarinBilbostack 2014: De web a móvil con Xamarin
Bilbostack 2014: De web a móvil con Xamarin
 
Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVC
 
Desarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internetDesarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internet
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012
 
4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbao4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbao
 
Proyectos fallidos: Rooms.fm en #webdevbilbao
Proyectos fallidos: Rooms.fm en #webdevbilbaoProyectos fallidos: Rooms.fm en #webdevbilbao
Proyectos fallidos: Rooms.fm en #webdevbilbao
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalables
 
Sistemas Microsoft Windows
Sistemas Microsoft WindowsSistemas Microsoft Windows
Sistemas Microsoft Windows
 

APIs REST #devfestBilbao