SlideShare una empresa de Scribd logo
REST 
REpresentational State Transfer 
Ignacio Muñoz Vicente @imunoz_
¿Qué es REST? 
❖ Es una técnica de arquitectura software para sistemas 
hipermedia distribuidos como la World Wide Web 
Wikipedia
¿Qué no es REST? 
❖ REST no es un servicio web ni una tecnología
¿Qué son servicios RESTful? 
❖ Son aquellos servicios web que cumplen los principios 
de REST
Características 
❖ Sin estado - Cada mensaje HTTP contiene toda la información necesaria! 
❖ Operaciones HTTP - Uso de POST, GET, PUT, DELETE y otros! 
❖ Sintaxis universal: URI - Cada recurso queda identificado por su URI! 
❖ Hipermedios - Relación entre recursos mediante hipervínculos! 
❖ Códigos de estado HTTP - Usa los códigos HTTP para indicar el resultado de la 
petición
Características 
Sin estado 
- Sin sesión ni cookies! 
! 
- Cada petición es independiente! 
! 
- Cada petición debe tener toda la 
información necesaria para que el 
servidor la entienda y devuelva la 
respuesta correcta
Características 
Operaciones HTTP 
Utiliza los métodos HTTP de forma 
explicita para las operaciones a realizar:! 
! 
- GET: obtener un recurso del servidor! 
! 
- POST: Crear un recurso en el servidor! 
! 
- PUT: Actualizar un recurso en el servidor! 
! 
- DELETE: Eliminar un recurso del servidor! 
! 
- Hay más métodos pero estos son los 
más frecuentes: CRUD
Características 
GET /usuarios Nos permite acceder al listado de 
usuarios. 
! 
POST /usuarios Nos permite crear un usuario nuevo. Se 
envía en la petición la información que se necesite para la 
creación (mediante JSON o XML): 
<usuario> 
<nombre>Ignacio</nombre> 
<apellido>Muñoz</apellido> 
</usuario> 
! 
GET /usuarios/12 Nos permite acceder al detalle del usuario 
con id 12. 
! 
PUT /usuarios/12 Permite editar el usuario con id 12. Al 
igual que en POST se pasan los datos necesarios como 
cuerpo de la petición: 
<usuario> 
<apellido>Vicente</apellido> 
</usuario> 
! 
DELETE /usuarios/12 Eliminar el usuario con id 12. 
Operaciones HTTP 
Utiliza los métodos HTTP de forma 
explicita para las operaciones a realizar:! 
! 
- GET: obtener un recurso del servidor! 
! 
- POST: Crear un recurso en el servidor! 
! 
- PUT: Actualizar un recurso en el servidor! 
! 
- DELETE: Eliminar un recurso del servidor! 
! 
- Hay más métodos pero estos son los 
más frecuentes: CRUD
Características 
Sintaxis universal 
- Cada recurso se identifica con su URI única! 
! 
- Nombres mejor que verbos (excepto cuando son operaciones)! 
! 
- Nombres mejor en plural: http://______/usuarios/! 
! 
- Normalmente dos URLs similares: para listado (collection) y para ítem! 
! 
- Versión de la API en la URL ! 
! 
- CRUD a través de su URI y una operación HTTP
Características 
Hipermedia 
- HATEOAS: Hypermedia As The Engine Of Application State! 
! 
- Una respuesta debe ofrecer toda la información necesaria! 
! 
- Dado un punto de entrada a la API REST, es posible descubrir todos sus recursos a partir 
sólo de las respuestas del servidor .La respuesta devuelta por el servidor puede contener 
hipervínculos a otros recursos 
{ 
"id": 12, 
"nombre": "Ignacio", 
"apellido": "Muñoz", 
"dispositivos": [ 
{ "id": 1033 }, 
{"id": 3889 } 
] 
} 
{ 
"id": 12, 
"nombre": "Ignacio", 
"apellido": "Muñoz", 
"dispositivos": [ 
{ "dispositivo": http://…/usuarios/12/dispositivos/1033 }, 
{"dispositivo": http://…/usuarios/12/dispositivos/3889 } 
] 
}
Características 
Códigos de estado 
ALGUNOS CÓDIGOS 
200 - Petición correcta. 
201 - Petición completada y recurso creado correctamente. 
202 - Petición aceptada pero no completada. 
304 - No modificado. 
400 - Solicitud incorrecta. 
401 - No autorizado. 
403 – Prohibido. 
404 - No encontrado. 
405 - Método no permitido. 
406 - No aceptable. El servidor no puede devolver la información 
en el formato solicitado en la petición. 
500 - Error interno del servidor. 
501 - No implementado. 
- Indican el resultado de la operación! 
! 
- Hay que tener cuidado con:! 
! 
! 401 “Unauthorized” ! 
! ! significa realmente “Unauthenticated”! 
! 
! 403 “Forbidden” ! 
! ! significa realmente “Unauthorized”! 
! 
- Si se quiere dar más info de un error:! 
! - Errores internos (complementan al código de error de HTTP)! 
! - Descripción
Características 
MediaTypes 
! 
- En la arquitectura REST no existe un formato de intercambio de información 
predefinido! 
! 
- Se indica en las cabeceras / headers:! 
! 
! ! ! - Header Accept en la petición! 
! 
! ! ! - Header Content-Type en la respuesta! 
! 
- Ejemplo: application/json! 
! 
- Valores múltiples: Accept: application/json, text/plain
Ejemplo petición
Recomendaciones 
❖ Número de versión de la API en la URL! 
❖ http://<URL>/v3/usuarios! 
❖ Unificar JSON y JavaScript ! 
❖ camelCase (así nos ahorraremos ‘mapear’ luego el JSON)! 
❖ Paginación con 2 valores: offset + limit! 
❖ http://<URL completa>?offset=X&limit=Y! 
❖ Seguridad por recurso, no por URL: ! 
❖ OAuth2! 
❖ Basic (SSL) Auth! 
❖ hmac
Recomendaciones 
❖ Si son acciones que no requieren recursos (por ejemplo hacer un cálculo 
numérico, mejor utilizar verbos en el nombre)! 
❖ http://<URL>/sumar?valor1=X&valor2=Y! 
❖ Búsqueda: método search, parámetro q (URL encoded)! 
❖ http://<URL completa>?q=cualquier%20palabra! 
❖ Para conocer métodos HTTP disponibles! 
❖ Usar OPTIONS —> Allow header: HEAD, GET, PUT, POST, DELETE, OPTIONS, …! 
❖ Fechas mediante ISO 8601 (UTC)! 
❖ año-mes-díaThora:minutos:segundos,nanosegundosZ! 
❖ Versión también en los datos! 
❖ Accept: application/vnd.github.v3+json
Cacheo 
Cacheo en servidor 
! 
- Hay que evitar a toda costa accesos a base de datos —> muy costosos! 
! 
- Las peticiones de recursos más solicitadas deben cachearse en memoria! 
! 
- Muchas soluciones:! 
! 
! - REDIS: cache en memoria, clave-valor. http://redis.io/! 
! 
! - Varnish: https://www.varnish-cache.org/! 
! 
! - Otros muchos
Cacheo 
Cacheo en cliente 
El campo ETag indica la versión del recurso:! 
!! 
! 1- Cliente solicita un recurso! 
! 2- El servidor devuelve:! 
! ! ! - Código 200! 
! ! ! - Body: el recurso solicitado! 
! ! ! - Header: cabeceras habituales y el ETag: ETag: “64233457696a7c876b7e"! 
! 3- Cliente vuelve a solicitar el recurso, enviado la siguiente cabecera:! 
! ! ! If-None-Match: “64233457696a7c876b7e"! 
! 
Si el recurso ha cambiado el servidor devolverá el recurso actualizado, nuevo ETag y código 200.! 
! 
Si el recurso no ha cambiado el servidor devolverá:! 
! ! - Código 304! 
! ! - Body: vacío! 
! ! - Header: cabeceras habituales y el mismo ETag
¿Por qué usar REST? 
❖ Es sencillo de entender e implementar! 
❖ Escalabilidad, independencia, seguridad, encapsulación, etc.! 
❖ Mola, es lo más parecido a un estándar
¿Por qué usar REST? 
❖ Es sencillo de entender e implementar! 
❖ Escalabilidad, independencia, seguridad, encapsulación, etc.! 
❖ Mola, es lo más parecido a un estándar
¿Cuando NO usar REST? 
❖ Cuando es un servicio muy personalizado: seguridad, 
transacciones, vocabulario y nomenclatura específica, 
etc.! 
❖ Necesidad de respuesta asíncrona en la petición
Ignacio Muñoz Vicente @imunoz_ 
REST 
REpresentational State Transfer 
Fuentes:! 
! 
http://es.wikipedia.org/wiki/Representational_State_Transfer! 
http://www.adwe.es/general/colaboraciones/servicios-web-restful-con-http-parte-ii-ejemplos! 
http://rest.elkstein.org/! 
http://haciendo.minube.com/usar-etags-109!

Más contenido relacionado

La actualidad más candente

REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & Development
Ashok Pundit
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | Edureka
Edureka!
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
Bruno Catão
 
Rest API
Rest APIRest API
What is Swagger?
What is Swagger?What is Swagger?
What is Swagger?
Philip Senger
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
07.pallav
 
Lets make a better react form
Lets make a better react formLets make a better react form
Lets make a better react form
Yao Nien Chung
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
Professor José de Assis
 
Laravel introduction
Laravel introductionLaravel introduction
Laravel introduction
Simon Funk
 
RESTful API - Best Practices
RESTful API - Best PracticesRESTful API - Best Practices
RESTful API - Best Practices
Tricode (part of Dept)
 
What Is Express JS?
What Is Express JS?What Is Express JS?
What Is Express JS?
Simplilearn
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Helder da Rocha
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding REST
Nitin Pande
 
Best Practices in Web Service Design
Best Practices in Web Service DesignBest Practices in Web Service Design
Best Practices in Web Service DesignLorna Mitchell
 
Apresentação rest api
Apresentação rest apiApresentação rest api
Apresentação rest api
Matheus Petroni
 
Web api
Web apiWeb api
RESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web APIRESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web API
💻 Spencer Schneidenbach
 
Web container and Apache Tomcat
Web container and Apache TomcatWeb container and Apache Tomcat
Web container and Apache Tomcat
Auwal Amshi
 

La actualidad más candente (20)

REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & Development
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | Edureka
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Rest API
Rest APIRest API
Rest API
 
What is Swagger?
What is Swagger?What is Swagger?
What is Swagger?
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
Lets make a better react form
Lets make a better react formLets make a better react form
Lets make a better react form
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Laravel introduction
Laravel introductionLaravel introduction
Laravel introduction
 
RESTful API - Best Practices
RESTful API - Best PracticesRESTful API - Best Practices
RESTful API - Best Practices
 
Codeigniter
CodeigniterCodeigniter
Codeigniter
 
What Is Express JS?
What Is Express JS?What Is Express JS?
What Is Express JS?
 
Soap vs rest
Soap vs restSoap vs rest
Soap vs rest
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding REST
 
Best Practices in Web Service Design
Best Practices in Web Service DesignBest Practices in Web Service Design
Best Practices in Web Service Design
 
Apresentação rest api
Apresentação rest apiApresentação rest api
Apresentação rest api
 
Web api
Web apiWeb api
Web api
 
RESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web APIRESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web API
 
Web container and Apache Tomcat
Web container and Apache TomcatWeb container and Apache Tomcat
Web container and Apache Tomcat
 

Destacado

Rest Conf Rails
Rest Conf RailsRest Conf Rails
Rest Conf Rails
Joaquín Salvachúa
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
Ignacio Muñoz Vicente
 
Instalacion Apache Cordova Tecnologías Moviles
Instalacion Apache Cordova Tecnologías MovilesInstalacion Apache Cordova Tecnologías Moviles
Instalacion Apache Cordova Tecnologías Moviles
Bruno Gutierrez
 
Introduccion a los Servicios Web Rest
Introduccion a los Servicios Web RestIntroduccion a los Servicios Web Rest
Introduccion a los Servicios Web Rest
David J. Brenes
 
Introducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLCIntroducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLC
Miguel Ángel Sánchez Chordi
 
Desarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaDesarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache Cordova
Software Guru
 
Desarrollo de aplicaciones móviles con Ionic y Apache Cordova
Desarrollo de aplicaciones móviles con Ionic y Apache CordovaDesarrollo de aplicaciones móviles con Ionic y Apache Cordova
Desarrollo de aplicaciones móviles con Ionic y Apache Cordova
Alián Rigñack Quevedo
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
Ignacio Muñoz Vicente
 
Desarrollo de aplicaciones moviles
Desarrollo de aplicaciones movilesDesarrollo de aplicaciones moviles
Desarrollo de aplicaciones moviles
Roberto Perales
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2
Ignacio Muñoz Vicente
 
JSON and REST
JSON and RESTJSON and REST
JSON and REST
Robert MacLean
 

Destacado (11)

Rest Conf Rails
Rest Conf RailsRest Conf Rails
Rest Conf Rails
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Instalacion Apache Cordova Tecnologías Moviles
Instalacion Apache Cordova Tecnologías MovilesInstalacion Apache Cordova Tecnologías Moviles
Instalacion Apache Cordova Tecnologías Moviles
 
Introduccion a los Servicios Web Rest
Introduccion a los Servicios Web RestIntroduccion a los Servicios Web Rest
Introduccion a los Servicios Web Rest
 
Introducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLCIntroducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLC
 
Desarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaDesarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache Cordova
 
Desarrollo de aplicaciones móviles con Ionic y Apache Cordova
Desarrollo de aplicaciones móviles con Ionic y Apache CordovaDesarrollo de aplicaciones móviles con Ionic y Apache Cordova
Desarrollo de aplicaciones móviles con Ionic y Apache Cordova
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
 
Desarrollo de aplicaciones moviles
Desarrollo de aplicaciones movilesDesarrollo de aplicaciones moviles
Desarrollo de aplicaciones moviles
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2
 
JSON and REST
JSON and RESTJSON and REST
JSON and REST
 

Similar a Rest

REST - deSymfony2012
REST - deSymfony2012REST - deSymfony2012
REST - deSymfony2012
Asier Marqués
 
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
Alejandro Esquiva Rodriguez
 
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
 
Developers love APIs
Developers love APIsDevelopers love APIs
Developers love APIs
Debora Gomez Bertoli
 
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
LuisTenorio42
 
APIs REST #devfestBilbao
APIs REST #devfestBilbaoAPIs REST #devfestBilbao
APIs REST #devfestBilbao
Asier Marqués
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera api
CloudAppi
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDayAsier Marqués
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apis
CloudAppi
 
Protocol HTTP
Protocol HTTPProtocol HTTP
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
Alex Puig
 
Charla REST API
Charla REST APICharla REST API
introduccion a Ajax
introduccion a Ajaxintroduccion a Ajax
introduccion a Ajax
Yair Ambrocio
 
Http al descubierto
Http al descubiertoHttp al descubierto
Http al descubierto
Alan Resendiz
 
Http al descubierto
Http al descubiertoHttp al descubierto
Http al descubierto
Jorge Ivan Zs
 
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
BEEVA_es
 
APIs REST con NodeJS y MongoDB
APIs REST con NodeJS y MongoDBAPIs REST con NodeJS y MongoDB
APIs REST con NodeJS y MongoDB
Jorge Zaccaro
 
5.2. api-rest
5.2. api-rest5.2. api-rest
5.2. api-rest
xavazque2
 

Similar a Rest (20)

REST - deSymfony2012
REST - deSymfony2012REST - deSymfony2012
REST - deSymfony2012
 
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
 
RESTful Para todos by Diego Sapriza
RESTful Para todos by Diego SaprizaRESTful Para todos by Diego Sapriza
RESTful Para todos by Diego Sapriza
 
Developers love APIs
Developers love APIsDevelopers love APIs
Developers love APIs
 
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
 
APIs REST #devfestBilbao
APIs REST #devfestBilbaoAPIs REST #devfestBilbao
APIs REST #devfestBilbao
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera api
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDay
 
Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apis
 
Seguridad en web
Seguridad en webSeguridad en web
Seguridad en web
 
Protocol HTTP
Protocol HTTPProtocol HTTP
Protocol HTTP
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Charla REST API
Charla REST APICharla REST API
Charla REST API
 
RESTful APIs con Tastypie
RESTful APIs con TastypieRESTful APIs con Tastypie
RESTful APIs con Tastypie
 
introduccion a Ajax
introduccion a Ajaxintroduccion a Ajax
introduccion a Ajax
 
Http al descubierto
Http al descubiertoHttp al descubierto
Http al descubierto
 
Http al descubierto
Http al descubiertoHttp al descubierto
Http al descubierto
 
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
 
APIs REST con NodeJS y MongoDB
APIs REST con NodeJS y MongoDBAPIs REST con NodeJS y MongoDB
APIs REST con NodeJS y MongoDB
 
5.2. api-rest
5.2. api-rest5.2. api-rest
5.2. api-rest
 

Último

Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
durangense277
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 

Último (20)

Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 

Rest

  • 1. REST REpresentational State Transfer Ignacio Muñoz Vicente @imunoz_
  • 2. ¿Qué es REST? ❖ Es una técnica de arquitectura software para sistemas hipermedia distribuidos como la World Wide Web Wikipedia
  • 3. ¿Qué no es REST? ❖ REST no es un servicio web ni una tecnología
  • 4. ¿Qué son servicios RESTful? ❖ Son aquellos servicios web que cumplen los principios de REST
  • 5. Características ❖ Sin estado - Cada mensaje HTTP contiene toda la información necesaria! ❖ Operaciones HTTP - Uso de POST, GET, PUT, DELETE y otros! ❖ Sintaxis universal: URI - Cada recurso queda identificado por su URI! ❖ Hipermedios - Relación entre recursos mediante hipervínculos! ❖ Códigos de estado HTTP - Usa los códigos HTTP para indicar el resultado de la petición
  • 6. Características Sin estado - Sin sesión ni cookies! ! - Cada petición es independiente! ! - Cada petición debe tener toda la información necesaria para que el servidor la entienda y devuelva la respuesta correcta
  • 7. Características Operaciones HTTP Utiliza los métodos HTTP de forma explicita para las operaciones a realizar:! ! - GET: obtener un recurso del servidor! ! - POST: Crear un recurso en el servidor! ! - PUT: Actualizar un recurso en el servidor! ! - DELETE: Eliminar un recurso del servidor! ! - Hay más métodos pero estos son los más frecuentes: CRUD
  • 8. Características GET /usuarios Nos permite acceder al listado de usuarios. ! POST /usuarios Nos permite crear un usuario nuevo. Se envía en la petición la información que se necesite para la creación (mediante JSON o XML): <usuario> <nombre>Ignacio</nombre> <apellido>Muñoz</apellido> </usuario> ! GET /usuarios/12 Nos permite acceder al detalle del usuario con id 12. ! PUT /usuarios/12 Permite editar el usuario con id 12. Al igual que en POST se pasan los datos necesarios como cuerpo de la petición: <usuario> <apellido>Vicente</apellido> </usuario> ! DELETE /usuarios/12 Eliminar el usuario con id 12. Operaciones HTTP Utiliza los métodos HTTP de forma explicita para las operaciones a realizar:! ! - GET: obtener un recurso del servidor! ! - POST: Crear un recurso en el servidor! ! - PUT: Actualizar un recurso en el servidor! ! - DELETE: Eliminar un recurso del servidor! ! - Hay más métodos pero estos son los más frecuentes: CRUD
  • 9. Características Sintaxis universal - Cada recurso se identifica con su URI única! ! - Nombres mejor que verbos (excepto cuando son operaciones)! ! - Nombres mejor en plural: http://______/usuarios/! ! - Normalmente dos URLs similares: para listado (collection) y para ítem! ! - Versión de la API en la URL ! ! - CRUD a través de su URI y una operación HTTP
  • 10. Características Hipermedia - HATEOAS: Hypermedia As The Engine Of Application State! ! - Una respuesta debe ofrecer toda la información necesaria! ! - Dado un punto de entrada a la API REST, es posible descubrir todos sus recursos a partir sólo de las respuestas del servidor .La respuesta devuelta por el servidor puede contener hipervínculos a otros recursos { "id": 12, "nombre": "Ignacio", "apellido": "Muñoz", "dispositivos": [ { "id": 1033 }, {"id": 3889 } ] } { "id": 12, "nombre": "Ignacio", "apellido": "Muñoz", "dispositivos": [ { "dispositivo": http://…/usuarios/12/dispositivos/1033 }, {"dispositivo": http://…/usuarios/12/dispositivos/3889 } ] }
  • 11. Características Códigos de estado ALGUNOS CÓDIGOS 200 - Petición correcta. 201 - Petición completada y recurso creado correctamente. 202 - Petición aceptada pero no completada. 304 - No modificado. 400 - Solicitud incorrecta. 401 - No autorizado. 403 – Prohibido. 404 - No encontrado. 405 - Método no permitido. 406 - No aceptable. El servidor no puede devolver la información en el formato solicitado en la petición. 500 - Error interno del servidor. 501 - No implementado. - Indican el resultado de la operación! ! - Hay que tener cuidado con:! ! ! 401 “Unauthorized” ! ! ! significa realmente “Unauthenticated”! ! ! 403 “Forbidden” ! ! ! significa realmente “Unauthorized”! ! - Si se quiere dar más info de un error:! ! - Errores internos (complementan al código de error de HTTP)! ! - Descripción
  • 12. Características MediaTypes ! - En la arquitectura REST no existe un formato de intercambio de información predefinido! ! - Se indica en las cabeceras / headers:! ! ! ! ! - Header Accept en la petición! ! ! ! ! - Header Content-Type en la respuesta! ! - Ejemplo: application/json! ! - Valores múltiples: Accept: application/json, text/plain
  • 14. Recomendaciones ❖ Número de versión de la API en la URL! ❖ http://<URL>/v3/usuarios! ❖ Unificar JSON y JavaScript ! ❖ camelCase (así nos ahorraremos ‘mapear’ luego el JSON)! ❖ Paginación con 2 valores: offset + limit! ❖ http://<URL completa>?offset=X&limit=Y! ❖ Seguridad por recurso, no por URL: ! ❖ OAuth2! ❖ Basic (SSL) Auth! ❖ hmac
  • 15. Recomendaciones ❖ Si son acciones que no requieren recursos (por ejemplo hacer un cálculo numérico, mejor utilizar verbos en el nombre)! ❖ http://<URL>/sumar?valor1=X&valor2=Y! ❖ Búsqueda: método search, parámetro q (URL encoded)! ❖ http://<URL completa>?q=cualquier%20palabra! ❖ Para conocer métodos HTTP disponibles! ❖ Usar OPTIONS —> Allow header: HEAD, GET, PUT, POST, DELETE, OPTIONS, …! ❖ Fechas mediante ISO 8601 (UTC)! ❖ año-mes-díaThora:minutos:segundos,nanosegundosZ! ❖ Versión también en los datos! ❖ Accept: application/vnd.github.v3+json
  • 16. Cacheo Cacheo en servidor ! - Hay que evitar a toda costa accesos a base de datos —> muy costosos! ! - Las peticiones de recursos más solicitadas deben cachearse en memoria! ! - Muchas soluciones:! ! ! - REDIS: cache en memoria, clave-valor. http://redis.io/! ! ! - Varnish: https://www.varnish-cache.org/! ! ! - Otros muchos
  • 17. Cacheo Cacheo en cliente El campo ETag indica la versión del recurso:! !! ! 1- Cliente solicita un recurso! ! 2- El servidor devuelve:! ! ! ! - Código 200! ! ! ! - Body: el recurso solicitado! ! ! ! - Header: cabeceras habituales y el ETag: ETag: “64233457696a7c876b7e"! ! 3- Cliente vuelve a solicitar el recurso, enviado la siguiente cabecera:! ! ! ! If-None-Match: “64233457696a7c876b7e"! ! Si el recurso ha cambiado el servidor devolverá el recurso actualizado, nuevo ETag y código 200.! ! Si el recurso no ha cambiado el servidor devolverá:! ! ! - Código 304! ! ! - Body: vacío! ! ! - Header: cabeceras habituales y el mismo ETag
  • 18. ¿Por qué usar REST? ❖ Es sencillo de entender e implementar! ❖ Escalabilidad, independencia, seguridad, encapsulación, etc.! ❖ Mola, es lo más parecido a un estándar
  • 19. ¿Por qué usar REST? ❖ Es sencillo de entender e implementar! ❖ Escalabilidad, independencia, seguridad, encapsulación, etc.! ❖ Mola, es lo más parecido a un estándar
  • 20. ¿Cuando NO usar REST? ❖ Cuando es un servicio muy personalizado: seguridad, transacciones, vocabulario y nomenclatura específica, etc.! ❖ Necesidad de respuesta asíncrona en la petición
  • 21. Ignacio Muñoz Vicente @imunoz_ REST REpresentational State Transfer Fuentes:! ! http://es.wikipedia.org/wiki/Representational_State_Transfer! http://www.adwe.es/general/colaboraciones/servicios-web-restful-con-http-parte-ii-ejemplos! http://rest.elkstein.org/! http://haciendo.minube.com/usar-etags-109!