SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Ähnlich wie Interfaces rest

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
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
 
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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
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
 
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
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
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
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 

Kürzlich hochgeladen (15)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
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
 
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
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
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
 
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
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
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
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 

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