SlideShare une entreprise Scribd logo
1  sur  31
INTERFACES REST
Filosofando sobre sentido de REST, el
universo, y todo lo demás…
… Y sí, esta charla durará 42 minutos 
Eduard Tomàs i Avellana
@eiximenis
etomas@pasiona.com
http://geeks.ms/blogs/etomas
?QUIEN SOY?
 Orgulloso poseedor de un Spectrum 48K
 Friki estándar: Amante de los videojuegos, la
música heavy, los juegos de rol de papel con
dados raros, la literatura fantástica y la ciencia
ficción
 Reconocido experto mundial en cervezas
 Trabajo en pasiona consulting
 Voy por ahí hablando de varias cosas gracias a
la fundación Techdencias
 Microsoft MVP en ASP.NET/IIS
¿CÓMO VA A SER ESA CHARLA¿
Pura filosofía 
ANTES DE EMPEZAR…
 … unas sabias palabras
¡¡¡AL LORO!!!!!
¡Que no os embauquen!
¡Que algunos dicen que son REST y NO lo son!
¿QUE ES REST?
 REST es un estilo arquitectónico que persigue la construcción de
sistemas altamente escalables basándose en 6 premisas
 Cliente / Servidor
 Sin estado
 Cacheable
 Sistema basado en capas
 Interfaz unificada
 Code on demand
DE VERDAD… ¿QUÉ ES REST?
Una forma de pensar
PIRÁMIDE DE MADUREZ DE REST
PIRÁMIDE DE MADUREZ REST – NIVEL 0
 Usar HTTP como protocolo de transporte
POST /appointmentService HTTP/1.1
<openSlotRequest date = "2010-01-04" doctor =
"mjones"/>
HTTP/1.1 200 OK
<openSlotList>
<slot start = "1400" end = "1450">
<doctor id = "mjones"/>
</slot>
</openSlotList>
PIRÁMIDE DE MADUREZ REST – NIVEL 1
 Usar recursos
POST /doctors/mjones HTTP/1.1
<openSlotRequest date = "2010-01-04"/>
HTTP/1.1 200 OK
<openSlotList>
<slot id = "1234" doctor = "mjones" start =
"1400" end = "1450"/>
</openSlotList>
POST slots/1234 HTTP/1.1
<appointmentRequest>
<patient name=“jsmith” />
</appointmentRequest>
PIRÁMIDE DE MADUREZ REST – NIVEL 2
 Usar verbos http
GET /doctors/mjones?date=20100104&status=open HTTP/1.1
HTTP/1.1 200 OK
<openSlotList>
<slot id = "1234" doctor = "mjones" start = "1400"
end = "1450"/>
</openSlotList>
POST slots/1234 HTTP/1.1
<appointmentRequest>
<patient name=“jsmith” />
</appointmentRequest>
PIRÁMIDE DE MADUREZ REST – NIVEL 3
 Usar códigos de respuesta HTTP
POST slots/1234 HTTP/1.1
<appointmentRequest>
<patient name=“jsmith” />
</appointmentRequest>
HTTP/1.1 201 Created
Location: /slots/1234/appointment
POST slots/1234 HTTP/1.1
<appointmentRequest>
<patient name=“jsmith” />
</appointmentRequest>
HTTP/1.1 409 Conflict
PIRÁMIDE DE MADUREZ REST – NIVEL
DIOS
 Usar hiperenlaces
GET /doctors/mjones/slots?date=20100104&status=open
HTTP/1.1 200 OK
<openSlotList>
<slot id = "1234" doctor = "mjones" start = "1400"
end = "1450">
<link rel = "/linkrels/slot/book"
uri = "/slots/1234"/>
</slot>
</openSlotList>
DISEÑANDO TU API REST
DECIDE DE QUE PARTE ESTÁS
RESTafari Pragmatico
NOMBRES DE LOS RECURSOS
 URLs representan recursos.
 Recursos son cosas.
 Las cosas tienen nombres
 Usa nombres en las URLs, NO verbos
 /doctors/1234 
 /getDoctor/1234 
NOMBRES DE LOS RECURSOS
 ¿Nombres en plural o en singular?
 GET /doctors/1234 (acceso a un doctor por id)
 GET /doctor/1234 (acceso a un doctor por id)
 Suele usarse más el plural, ya que por norma general
tenemos colecciones de recursos.
 En todo caso evita mezclas
VERBOS HTTP
 Usa los verbos HTTP.
 GET para consultas
 DELETE para eliminar
 PUT (y POST) para editar o añadir
 /GET doctors/1234
 /DELETE doctors/1234
 PUT doctors/1234
VERBOS HTTP: PUT VS POST
 PUT para añadir y POST para modificar.
 POST para añadir y PUT para modificar.
 PUT para añadir y modificar
 POST para añadir y modificar
 Entonces… ¿Cuando usar PUT y POST?
 Respuesta: PUT debe ser idempotente. POST no tiene por qué.
¡NOOOO!
¡NOOOO!
SIMPLIFICA LAS ASOCIACIONES
 Limita la longitud de tu URL
 Intenta evitar URLs más largas que /recurso/identificador/recurso
 Oculta toda la complejidad en la QueryString
 GET /doctors/1245/appointments/20130706/refused
 GET /doctors/1245/appointments?date=20130706&status=refused
 GET /doctors/1235/patients/2341/appointments
 GET /patients/2341/appointments
GESTIÓN DE ERRORES
 Usar códigos HTTP (y opcionalmente devolver info en el payload)
 Usar siempre HTTP 200 y devolver información en el payload
 La primera es más REST, pero la segunda es más compatible con
ciertos clientes que pueden no tratar bien ciertos códigos de error
(¿alguien dijo Flash?)
 Recomendación: Usa los códigos HTTP, pero ofrece una
alternativa para no usarlos y devolver el error en el paylaod.
CÓDIGOS HTTP
 3 grandes grupos de códigos
 2xx: Todo ha ido bien.
 4xx: Algo en la petición del cliente hace que haya habido un error. El
cliente debe modificar su petición
 5xx: Algo en el servidor hace que haya habido un error. El cliente NO
tiene por que modificar su petición
CÓDIGOS HTTP
 200 (OK)
 Úsalo como genérico de que todo ha ido bien
 201 (Created)
 Devuélvelo para notificar que se ha creado un elemento (insert)
 204 (No Content)
 Úsalo para indicar que todo ha ido bien y NO quieres enviar
respuesta alguna al cliente. Suele usarse en modificaciones o
borrados para indicar que han ido bien.
CÓDIGOS HTTP
 400 (Bad Request)
 Úsalo para indicar al cliente que debe modificar la petición. Añade
info en el payload.
 401 (Unauthorized)
 Úsalo para indicar que el cliente NO está autenticado y que el
recurso requiere de clientes autenticados. Que se autentique y lo
pruebe de nuevo.
 403 (Forbidden)
 Úsalo para indicar que aunque el cliente está autenticado, no
puede acceder al recurso. ¡Que no lo intente de nuevo!
CÓDIGOS HTTP
 404 (Not Found)
 Úsalo para informar que no se ha encontrado el recurso
especificado. Puede que la URL sea correcta y el recurso no se
encuentre.
 409 (Conflict)
 Úsalo para indicar casos de concurrencia en modificaciones o
borrados.
 410 (Gone)
 Úsalo para informar al cliente que aunque antes había un recurso
en esta URL ya no está (ni estará).
CÓDIGOS HTTP
 500 (Internal server Error)
 Úsalo para indicar que el servidor ha encontrado un error. Añade
info en el payload.
VERSIONAJE
 GET /doctors/123
 Qué versión de la API usa esta URL? ¿La primera? ¿La última más
actul?
 Si haces la versión opcional
 Y es la primera, los clientes antiguos no se benefician de
correcciones o mejoras de las nuevas versiones
 Y es la última, los clientes antiguos pueden dejar de funcionar
 Y alguna vez decides que deje de ser opcional, los clientes antiguos
dejarán de funcionar
VERSIONAJE
 No hagas la versión opcional
 Especificada en URL
 GET /v1/doctors/1234
 GET /2013-04-01/doctors/1234
 GET /doctors/1234?v=1
 …
 Especificada en header HTTP
 Evita demasiadas versiones
 GET /v1.2.1/doctors/1234
RESPUESTAS PARCIALES
 GET /doctors/1234
 Toda la información del doctor
 GET /doctors:(name, appointments)/1234
 GET /doctors/1234&fields=name,appointments
 Solo nombre, citas del doctor
 Ofrece un mecanismo para devolver parte de la respuesta y/o
añadir campos adicionales opcionales
MÚLTIPLES FORMATOS
 Hazle caso a “Accept”…
 … pero ofrece un mecanismo para “sobreescribir” accept
 GET /doctors.json/12345
 GET /doctors/12345?type=json
 GET /doctors/12345.json
AUTORIZACIÓN Y SEGURIDAD
 Usa OAuth para autorizar las llamadas a tu api.
 No reinventes la rueda
 Si además de la API tienes una aplicación web que la consume
considera:
 Poner ambas en el mismo origen web
 Usar JSONP
 Usar CORS
¿PREGUNTAS, DUDAS, CERVEZAS?
Eduard Tomàs i Avellana
@eiximenis
etomas@pasiona.com
http://geeks.ms/blogs/etomas

Contenu connexe

Similaire à Interfaces rest

Similaire à Interfaces rest (20)

Desarrollando con APIs
Desarrollando con APIsDesarrollando con APIs
Desarrollando con APIs
 
Seguridad en web
Seguridad en webSeguridad en web
Seguridad en web
 
Introducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLCIntroducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLC
 
Http[1]
Http[1]Http[1]
Http[1]
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Rest
RestRest
Rest
 
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
 
Http
HttpHttp
Http
 
Introducció a les Aplicació Web
Introducció a les Aplicació WebIntroducció a les Aplicació Web
Introducció a les Aplicació Web
 
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
 
APACHE MYSQL SAMBA
APACHE MYSQL SAMBAAPACHE MYSQL SAMBA
APACHE MYSQL SAMBA
 
Charla REST API
Charla REST APICharla REST API
Charla REST API
 
Open Source Modern Web Development
Open Source Modern Web DevelopmentOpen Source Modern Web Development
Open Source Modern Web Development
 
trabajo de informatica
trabajo de informaticatrabajo de informatica
trabajo de informatica
 
REST, JERSEY & SOAP
REST, JERSEY & SOAPREST, JERSEY & SOAP
REST, JERSEY & SOAP
 
Presentacion HTTP/HTTPS/DNS
Presentacion HTTP/HTTPS/DNSPresentacion HTTP/HTTPS/DNS
Presentacion HTTP/HTTPS/DNS
 
Introducción a PHP5
Introducción a PHP5Introducción a PHP5
Introducción a PHP5
 
html
htmlhtml
html
 
Protocolos de internet
Protocolos de internetProtocolos de internet
Protocolos de internet
 
[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
 

Plus de Eduard Tomàs

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sEduard Tomàs
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAEduard Tomàs
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEduard Tomàs
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nuncaEduard Tomàs
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDAEduard Tomàs
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessEduard Tomàs
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y RendimientoEduard Tomàs
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Eduard Tomàs
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Eduard Tomàs
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Eduard Tomàs
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundoEduard Tomàs
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aksEduard Tomàs
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Eduard Tomàs
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosEduard Tomàs
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbEduard Tomàs
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menosEduard Tomàs
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?Eduard Tomàs
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your deviceEduard Tomàs
 

Plus de Eduard Tomàs (20)

Kubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why'sKubernetes: Do's, don'ts and why's
Kubernetes: Do's, don'ts and why's
 
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDAKCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
 
Escalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con KedaEscalando workloads serverless en Kubernetes con Keda
Escalando workloads serverless en Kubernetes con Keda
 
C#9 - Más C# que nunca
C#9 - Más C# que nuncaC#9 - Más C# que nunca
C#9 - Más C# que nunca
 
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDACollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
 
Keda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en ServerlessKeda o como convertir Kubernetess en Serverless
Keda o como convertir Kubernetess en Serverless
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)Containers en .NET (Dot Net 2018 - Spain)
Containers en .NET (Dot Net 2018 - Spain)
 
Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)Esos contenedores, ¡a producción! (Commit Conf 2018)
Esos contenedores, ¡a producción! (Commit Conf 2018)
 
Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++Codemotion 2015 - Bienvenido de nuevo c++
Codemotion 2015 - Bienvenido de nuevo c++
 
El "peor" lenguaje del mundo
El "peor" lenguaje del mundoEl "peor" lenguaje del mundo
El "peor" lenguaje del mundo
 
Containerize a netcore application with aks
 Containerize a netcore application with aks Containerize a netcore application with aks
Containerize a netcore application with aks
 
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
 
Aplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramosAplicaciones de consola fáciles? Más quisieramos
Aplicaciones de consola fáciles? Más quisieramos
 
Serverless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDbServerless with Azure Functions and CosmosDb
Serverless with Azure Functions and CosmosDb
 
Docker y todo eso... más o menos
Docker y todo eso... más o menosDocker y todo eso... más o menos
Docker y todo eso... más o menos
 
Microservices: Yes or not?
Microservices: Yes or not?Microservices: Yes or not?
Microservices: Yes or not?
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
Azure functions
Azure functionsAzure functions
Azure functions
 
React native - Unleash the power of your device
React native - Unleash the power of your deviceReact native - Unleash the power of your device
React native - Unleash the power of your device
 

Dernier

Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 

Dernier (20)

Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 

Interfaces rest

  • 1. INTERFACES REST Filosofando sobre sentido de REST, el universo, y todo lo demás… … Y sí, esta charla durará 42 minutos  Eduard Tomàs i Avellana @eiximenis etomas@pasiona.com http://geeks.ms/blogs/etomas
  • 2. ?QUIEN SOY?  Orgulloso poseedor de un Spectrum 48K  Friki estándar: Amante de los videojuegos, la música heavy, los juegos de rol de papel con dados raros, la literatura fantástica y la ciencia ficción  Reconocido experto mundial en cervezas  Trabajo en pasiona consulting  Voy por ahí hablando de varias cosas gracias a la fundación Techdencias  Microsoft MVP en ASP.NET/IIS
  • 3. ¿CÓMO VA A SER ESA CHARLA¿ Pura filosofía 
  • 4. ANTES DE EMPEZAR…  … unas sabias palabras ¡¡¡AL LORO!!!!! ¡Que no os embauquen! ¡Que algunos dicen que son REST y NO lo son!
  • 5. ¿QUE ES REST?  REST es un estilo arquitectónico que persigue la construcción de sistemas altamente escalables basándose en 6 premisas  Cliente / Servidor  Sin estado  Cacheable  Sistema basado en capas  Interfaz unificada  Code on demand
  • 6. DE VERDAD… ¿QUÉ ES REST? Una forma de pensar
  • 8. PIRÁMIDE DE MADUREZ REST – NIVEL 0  Usar HTTP como protocolo de transporte POST /appointmentService HTTP/1.1 <openSlotRequest date = "2010-01-04" doctor = "mjones"/> HTTP/1.1 200 OK <openSlotList> <slot start = "1400" end = "1450"> <doctor id = "mjones"/> </slot> </openSlotList>
  • 9. PIRÁMIDE DE MADUREZ REST – NIVEL 1  Usar recursos POST /doctors/mjones HTTP/1.1 <openSlotRequest date = "2010-01-04"/> HTTP/1.1 200 OK <openSlotList> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/> </openSlotList> POST slots/1234 HTTP/1.1 <appointmentRequest> <patient name=“jsmith” /> </appointmentRequest>
  • 10. PIRÁMIDE DE MADUREZ REST – NIVEL 2  Usar verbos http GET /doctors/mjones?date=20100104&status=open HTTP/1.1 HTTP/1.1 200 OK <openSlotList> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/> </openSlotList> POST slots/1234 HTTP/1.1 <appointmentRequest> <patient name=“jsmith” /> </appointmentRequest>
  • 11. PIRÁMIDE DE MADUREZ REST – NIVEL 3  Usar códigos de respuesta HTTP POST slots/1234 HTTP/1.1 <appointmentRequest> <patient name=“jsmith” /> </appointmentRequest> HTTP/1.1 201 Created Location: /slots/1234/appointment POST slots/1234 HTTP/1.1 <appointmentRequest> <patient name=“jsmith” /> </appointmentRequest> HTTP/1.1 409 Conflict
  • 12. PIRÁMIDE DE MADUREZ REST – NIVEL DIOS  Usar hiperenlaces GET /doctors/mjones/slots?date=20100104&status=open HTTP/1.1 200 OK <openSlotList> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"> <link rel = "/linkrels/slot/book" uri = "/slots/1234"/> </slot> </openSlotList>
  • 14. DECIDE DE QUE PARTE ESTÁS RESTafari Pragmatico
  • 15. NOMBRES DE LOS RECURSOS  URLs representan recursos.  Recursos son cosas.  Las cosas tienen nombres  Usa nombres en las URLs, NO verbos  /doctors/1234   /getDoctor/1234 
  • 16. NOMBRES DE LOS RECURSOS  ¿Nombres en plural o en singular?  GET /doctors/1234 (acceso a un doctor por id)  GET /doctor/1234 (acceso a un doctor por id)  Suele usarse más el plural, ya que por norma general tenemos colecciones de recursos.  En todo caso evita mezclas
  • 17. VERBOS HTTP  Usa los verbos HTTP.  GET para consultas  DELETE para eliminar  PUT (y POST) para editar o añadir  /GET doctors/1234  /DELETE doctors/1234  PUT doctors/1234
  • 18. VERBOS HTTP: PUT VS POST  PUT para añadir y POST para modificar.  POST para añadir y PUT para modificar.  PUT para añadir y modificar  POST para añadir y modificar  Entonces… ¿Cuando usar PUT y POST?  Respuesta: PUT debe ser idempotente. POST no tiene por qué. ¡NOOOO! ¡NOOOO!
  • 19. SIMPLIFICA LAS ASOCIACIONES  Limita la longitud de tu URL  Intenta evitar URLs más largas que /recurso/identificador/recurso  Oculta toda la complejidad en la QueryString  GET /doctors/1245/appointments/20130706/refused  GET /doctors/1245/appointments?date=20130706&status=refused  GET /doctors/1235/patients/2341/appointments  GET /patients/2341/appointments
  • 20. GESTIÓN DE ERRORES  Usar códigos HTTP (y opcionalmente devolver info en el payload)  Usar siempre HTTP 200 y devolver información en el payload  La primera es más REST, pero la segunda es más compatible con ciertos clientes que pueden no tratar bien ciertos códigos de error (¿alguien dijo Flash?)  Recomendación: Usa los códigos HTTP, pero ofrece una alternativa para no usarlos y devolver el error en el paylaod.
  • 21. CÓDIGOS HTTP  3 grandes grupos de códigos  2xx: Todo ha ido bien.  4xx: Algo en la petición del cliente hace que haya habido un error. El cliente debe modificar su petición  5xx: Algo en el servidor hace que haya habido un error. El cliente NO tiene por que modificar su petición
  • 22. CÓDIGOS HTTP  200 (OK)  Úsalo como genérico de que todo ha ido bien  201 (Created)  Devuélvelo para notificar que se ha creado un elemento (insert)  204 (No Content)  Úsalo para indicar que todo ha ido bien y NO quieres enviar respuesta alguna al cliente. Suele usarse en modificaciones o borrados para indicar que han ido bien.
  • 23. CÓDIGOS HTTP  400 (Bad Request)  Úsalo para indicar al cliente que debe modificar la petición. Añade info en el payload.  401 (Unauthorized)  Úsalo para indicar que el cliente NO está autenticado y que el recurso requiere de clientes autenticados. Que se autentique y lo pruebe de nuevo.  403 (Forbidden)  Úsalo para indicar que aunque el cliente está autenticado, no puede acceder al recurso. ¡Que no lo intente de nuevo!
  • 24. CÓDIGOS HTTP  404 (Not Found)  Úsalo para informar que no se ha encontrado el recurso especificado. Puede que la URL sea correcta y el recurso no se encuentre.  409 (Conflict)  Úsalo para indicar casos de concurrencia en modificaciones o borrados.  410 (Gone)  Úsalo para informar al cliente que aunque antes había un recurso en esta URL ya no está (ni estará).
  • 25. CÓDIGOS HTTP  500 (Internal server Error)  Úsalo para indicar que el servidor ha encontrado un error. Añade info en el payload.
  • 26. VERSIONAJE  GET /doctors/123  Qué versión de la API usa esta URL? ¿La primera? ¿La última más actul?  Si haces la versión opcional  Y es la primera, los clientes antiguos no se benefician de correcciones o mejoras de las nuevas versiones  Y es la última, los clientes antiguos pueden dejar de funcionar  Y alguna vez decides que deje de ser opcional, los clientes antiguos dejarán de funcionar
  • 27. VERSIONAJE  No hagas la versión opcional  Especificada en URL  GET /v1/doctors/1234  GET /2013-04-01/doctors/1234  GET /doctors/1234?v=1  …  Especificada en header HTTP  Evita demasiadas versiones  GET /v1.2.1/doctors/1234
  • 28. RESPUESTAS PARCIALES  GET /doctors/1234  Toda la información del doctor  GET /doctors:(name, appointments)/1234  GET /doctors/1234&fields=name,appointments  Solo nombre, citas del doctor  Ofrece un mecanismo para devolver parte de la respuesta y/o añadir campos adicionales opcionales
  • 29. MÚLTIPLES FORMATOS  Hazle caso a “Accept”…  … pero ofrece un mecanismo para “sobreescribir” accept  GET /doctors.json/12345  GET /doctors/12345?type=json  GET /doctors/12345.json
  • 30. AUTORIZACIÓN Y SEGURIDAD  Usa OAuth para autorizar las llamadas a tu api.  No reinventes la rueda  Si además de la API tienes una aplicación web que la consume considera:  Poner ambas en el mismo origen web  Usar JSONP  Usar CORS
  • 31. ¿PREGUNTAS, DUDAS, CERVEZAS? Eduard Tomàs i Avellana @eiximenis etomas@pasiona.com http://geeks.ms/blogs/etomas