SlideShare una empresa de Scribd logo
1 de 27
Aplicaciones
RestFul con
Asp.net Core
Germán Küber
.Net Developer
http://germankuber.com.ar
@germankuber
@netbaires
Net-Baires
http://slack.net-baires.com
https://www.meetup.com/es-ES/Net-Baires
https://github.com/Net-Baires
@netbaires
Representational State Transfer pretende evocar una imagen de
cómo se comporta una aplicación web bien diseñada: Una red de
páginas web.
...... donde el usuario avanza a través de una aplicación
seleccionando enlaces (transiciones de estado)
...... que da como resultado la siguiente página (que representa el
siguiente estado de la aplicación) que se transfiere al usuario y se
procesa para su uso
Roy Fielding
http://bit.ly/1rbtZik
¿ Que es Rest ?
• Rest es un estilo de arquitectura
• No es un estándar
• Nosotros usamos estándares para
implementarlo
• Rest es agnóstico al protocolo
Restricciones de Rest
• REST está definido por 6
restricciones (una opcional)
• Una restricción es una
decisión de diseño que
puede tener impactos
positivos y negativos
Restricciones de Rest
Client-Server
Cliente y servidor están
separados
(Cliente y servidor
pueden evolucionar por
separado)
Statelessness
Estado está contenido
dentro de la solicitud
Cacheable
Cada
respuesta/mensaje
debe indicar
explícitamente si se
puede almacenar en
caché o no
Restricciones de Rest
Layered System
El cliente no puede
saber a qué capa está
conectado
Code on
Demand (optional)
Servidor puede
extender la
funcionalidad del
cliente
Uniform Interface
API y los consumidores
comparten una sola
interfaz, técnica: URI,
Method, Media Type
Interface Uniforme
• Un recurso está conceptualmente separado de su
representación
• Tipos de medios de representación:
• application / json
• application / xml
• Custom
• ...
Interface Uniforme
Manipulación de recursos a través de representaciones
• Representación + metadatos deberían ser
suficientes para modificar o borrar el recurso
Interface Uniforme
Mensaje auto descriptivo
• Cada mensaje debe incluir información suficiente
para describir cómo procesar el mensaje
Interface Uniforme
Hipermedia como el motor del estado de aplicación
(HATEOAS)-
• Hypermedia es una generalización de hipertexto
(enlaces)
• Conduce cómo consumir y usar la API
• Permite una API auto-documentada
• La mayoría de las APIs "RESTful" no son realmente
REST
• ...... pero eso no los hace malas APIs, siempre y
cuando usted entienda los posibles trade-offs
Un sistema sólo se considera RESTful cuando se
adhiere a todas las restricciones requeridas
El modelo de Richardson Maturity
POST (Solicito data)
http://host/myapi
POST (Creo un recurso)
http://host/myapi
El protocolo HTTP se utiliza para la
interacción remota
El resto del protocolo no se utiliza
como debe ser
Implementación estilo RPC (SOAP, a
menudo visto cuando se utiliza
WCF)
Nivel 0 (The Swamp of POX)
El modelo de Richardson Maturity
POST
http://host/api/authors
POST
http://host/api/authors/{id}
Cada recurso se asigna a un URI
Los métodos HTTP no se utilizan
como deben ser
Resultados en la reducción de la
complejidad
Nivel 1 (Resources)
El modelo de Richardson Maturity
GET
http://host/api/authors 200
Ok (authors)
POST (author representation)
http://host/api/authors 201
Created (author)
Se utilizan los verbos HTTP
correctos
Se utilizan códigos de estado
correctos
Elimina variaciones innecesarias
Nivel 2 (Verbs)
El modelo de Richardson Maturity
GET
http://host/api/authors
200 Ok (authors + links that
drive application state)
La API admite Hypermedia como el
motor del estado de aplicación
(HATEOAS)
Introduce la posibilidad de
descubrir su contenido
Nivel 3 (Hypermedia)
Asp.net Core
• Open Source
• Multi plataforma
• Escalable
• Provee middleware
• No provee una api RestFul out of
the box
Nombre de recursos
Recursos no verbos
• api/getauthors
• GET api/authors
• GET api/authors/{authorId}
Sustantivos significativos
Nombre de recursos
Representar jerarquía al nombrar los recursos
• api/authors/{authorId}/books
• api/authors/{authorId}/books/{bookId}
Nombre de recursos
Filters, sorting orders, ... No son recursos
• api/authors/orderby/name
• api/authors?orderby=name
Nombre de recursos
Rest nos habla del contrato externo
• El resto de las capas carece de importancia
• El recurso es conceptualmente diferente al
que esta almacenado en la DB
Como interactuar con nuestros recursos
Nombre de recursos
Modelos externos
!=
Entity Model
Nombre de recursos
Modelos externos
!=
Business Model
!=
Entity Model
Http Status Code
Level 400 – Error de cliente
400 – Bad request
401 –Unauthorized
403 – Forbidden
404 – Not found
Nivel 200 Success
200 – Ok
201 – Created
204 – No content
Http Status Code
Nivel 500 Error
servidor
500 – Internal server
error
Nivel 400 – Error de cliente
405 – Method not allowed
406 – Not acceptable
409 - Conflict
415 – Unsupported media type
422 – Unprocessable entity
Nombre de recursos
Retornar formato predeterminado
Utilizar siempre la representación
conveniente
Return 406 – Not acceptable
El formato se solicita mediante Accept
header
- application/json
- application/xml
- …

Más contenido relacionado

La actualidad más candente (8)

Rest
RestRest
Rest
 
Simplemente REST
Simplemente RESTSimplemente REST
Simplemente REST
 
Android web services - Spring Android
Android web services - Spring AndroidAndroid web services - Spring Android
Android web services - Spring Android
 
Java Web Services - REST
Java Web Services - RESTJava Web Services - REST
Java Web Services - REST
 
Desarrollo web con_asp.net 2.1
Desarrollo web con_asp.net 2.1Desarrollo web con_asp.net 2.1
Desarrollo web con_asp.net 2.1
 
Java Web Services - Introduccion
Java Web Services - IntroduccionJava Web Services - Introduccion
Java Web Services - Introduccion
 
Introducción a las API's Rest
Introducción a las API's RestIntroducción a las API's Rest
Introducción a las API's Rest
 
Anypoint b2b
Anypoint b2bAnypoint b2b
Anypoint b2b
 

Similar a RestFul con Asp.net Core

Documertar APIs - Meetup.js
Documertar APIs - Meetup.jsDocumertar APIs - Meetup.js
Documertar APIs - Meetup.jsEzequiel Rial
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con RESTAlex Puig
 
Rest clase 4 - curso front-end 2014 - open webinars
Rest   clase 4 - curso front-end 2014 - open webinarsRest   clase 4 - curso front-end 2014 - open webinars
Rest clase 4 - curso front-end 2014 - open webinarsOpenWebinars.net
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 
Arquitectura de una Apis Rest en C.pptx
Arquitectura de una Apis  Rest en C.pptxArquitectura de una Apis  Rest en C.pptx
Arquitectura de una Apis Rest en C.pptxRonaldoJos15
 
Fundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaFundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaLeoWong91
 
Groopify para groopies
Groopify para groopiesGroopify para groopies
Groopify para groopiesGroopify
 
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 ServicesLuis Fernando Aguas Bucheli
 
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring BootSOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring BootDomingo Suarez Torres
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHAlejandro Esquiva Rodriguez
 
Programacion web
Programacion webProgramacion web
Programacion webtaniamar
 
Programacion web
Programacion webProgramacion web
Programacion webosita30
 

Similar a RestFul con Asp.net Core (20)

Documertar APIs - Meetup.js
Documertar APIs - Meetup.jsDocumertar APIs - Meetup.js
Documertar APIs - Meetup.js
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
REST - deSymfony2012
REST - deSymfony2012REST - deSymfony2012
REST - deSymfony2012
 
Rest clase 4 - curso front-end 2014 - open webinars
Rest   clase 4 - curso front-end 2014 - open webinarsRest   clase 4 - curso front-end 2014 - open webinars
Rest clase 4 - curso front-end 2014 - open webinars
 
T final modulo_1
T final modulo_1T final modulo_1
T final modulo_1
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
API como SaaS
API como SaaSAPI como SaaS
API como SaaS
 
Arquitectura de una Apis Rest en C.pptx
Arquitectura de una Apis  Rest en C.pptxArquitectura de una Apis  Rest en C.pptx
Arquitectura de una Apis Rest en C.pptx
 
Fundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmáticaFundamentos para el diseño de una RESTful API pragmática
Fundamentos para el diseño de una RESTful API pragmática
 
Groopify para groopies
Groopify para groopiesGroopify para groopies
Groopify para groopies
 
Unidad5actividdad1
Unidad5actividdad1Unidad5actividdad1
Unidad5actividdad1
 
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
 
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring BootSOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
SOA Latam Workshop: Comparison Dropwizard, ratpack & Spring Boot
 
Introducción a ASP.NET Web API
Introducción a ASP.NET Web APIIntroducción a ASP.NET Web API
Introducción a ASP.NET Web API
 
S7-DAW-2022S1.pptx
S7-DAW-2022S1.pptxS7-DAW-2022S1.pptx
S7-DAW-2022S1.pptx
 
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
 
Programacion web
Programacion webProgramacion web
Programacion web
 
Programacion web
Programacion webProgramacion web
Programacion web
 
Programacion web
Programacion webProgramacion web
Programacion web
 
Programacion web
Programacion webProgramacion web
Programacion web
 

Más de Germán Küber

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustGermán Küber
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptxGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidityGermán Küber
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architectureGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentationGermán Küber
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#Germán Küber
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Germán Küber
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescateGermán Küber
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresGermán Küber
 

Más de Germán Küber (20)

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en Rust
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
Mev Rapido.pptx
Mev Rapido.pptxMev Rapido.pptx
Mev Rapido.pptx
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptx
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidity
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architecture
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentation
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Defensive code
Defensive codeDefensive code
Defensive code
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Defensive code C#
Defensive code C#Defensive code C#
Defensive code C#
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
C sharp 8
C sharp 8C sharp 8
C sharp 8
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescate
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para Desarrolaldores
 

Último

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
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
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
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
 
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
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
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
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
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
 

Último (15)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
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
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
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
 
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
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
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
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
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
 

RestFul con Asp.net Core

  • 1. Aplicaciones RestFul con Asp.net Core Germán Küber .Net Developer http://germankuber.com.ar @germankuber @netbaires
  • 3. Representational State Transfer pretende evocar una imagen de cómo se comporta una aplicación web bien diseñada: Una red de páginas web. ...... donde el usuario avanza a través de una aplicación seleccionando enlaces (transiciones de estado) ...... que da como resultado la siguiente página (que representa el siguiente estado de la aplicación) que se transfiere al usuario y se procesa para su uso Roy Fielding http://bit.ly/1rbtZik
  • 4. ¿ Que es Rest ? • Rest es un estilo de arquitectura • No es un estándar • Nosotros usamos estándares para implementarlo • Rest es agnóstico al protocolo
  • 5. Restricciones de Rest • REST está definido por 6 restricciones (una opcional) • Una restricción es una decisión de diseño que puede tener impactos positivos y negativos
  • 6. Restricciones de Rest Client-Server Cliente y servidor están separados (Cliente y servidor pueden evolucionar por separado) Statelessness Estado está contenido dentro de la solicitud Cacheable Cada respuesta/mensaje debe indicar explícitamente si se puede almacenar en caché o no
  • 7. Restricciones de Rest Layered System El cliente no puede saber a qué capa está conectado Code on Demand (optional) Servidor puede extender la funcionalidad del cliente Uniform Interface API y los consumidores comparten una sola interfaz, técnica: URI, Method, Media Type
  • 8. Interface Uniforme • Un recurso está conceptualmente separado de su representación • Tipos de medios de representación: • application / json • application / xml • Custom • ...
  • 9. Interface Uniforme Manipulación de recursos a través de representaciones • Representación + metadatos deberían ser suficientes para modificar o borrar el recurso
  • 10. Interface Uniforme Mensaje auto descriptivo • Cada mensaje debe incluir información suficiente para describir cómo procesar el mensaje
  • 11. Interface Uniforme Hipermedia como el motor del estado de aplicación (HATEOAS)- • Hypermedia es una generalización de hipertexto (enlaces) • Conduce cómo consumir y usar la API • Permite una API auto-documentada
  • 12. • La mayoría de las APIs "RESTful" no son realmente REST • ...... pero eso no los hace malas APIs, siempre y cuando usted entienda los posibles trade-offs Un sistema sólo se considera RESTful cuando se adhiere a todas las restricciones requeridas
  • 13. El modelo de Richardson Maturity POST (Solicito data) http://host/myapi POST (Creo un recurso) http://host/myapi El protocolo HTTP se utiliza para la interacción remota El resto del protocolo no se utiliza como debe ser Implementación estilo RPC (SOAP, a menudo visto cuando se utiliza WCF) Nivel 0 (The Swamp of POX)
  • 14. El modelo de Richardson Maturity POST http://host/api/authors POST http://host/api/authors/{id} Cada recurso se asigna a un URI Los métodos HTTP no se utilizan como deben ser Resultados en la reducción de la complejidad Nivel 1 (Resources)
  • 15. El modelo de Richardson Maturity GET http://host/api/authors 200 Ok (authors) POST (author representation) http://host/api/authors 201 Created (author) Se utilizan los verbos HTTP correctos Se utilizan códigos de estado correctos Elimina variaciones innecesarias Nivel 2 (Verbs)
  • 16. El modelo de Richardson Maturity GET http://host/api/authors 200 Ok (authors + links that drive application state) La API admite Hypermedia como el motor del estado de aplicación (HATEOAS) Introduce la posibilidad de descubrir su contenido Nivel 3 (Hypermedia)
  • 17. Asp.net Core • Open Source • Multi plataforma • Escalable • Provee middleware • No provee una api RestFul out of the box
  • 18. Nombre de recursos Recursos no verbos • api/getauthors • GET api/authors • GET api/authors/{authorId} Sustantivos significativos
  • 19. Nombre de recursos Representar jerarquía al nombrar los recursos • api/authors/{authorId}/books • api/authors/{authorId}/books/{bookId}
  • 20. Nombre de recursos Filters, sorting orders, ... No son recursos • api/authors/orderby/name • api/authors?orderby=name
  • 21. Nombre de recursos Rest nos habla del contrato externo • El resto de las capas carece de importancia • El recurso es conceptualmente diferente al que esta almacenado en la DB
  • 22. Como interactuar con nuestros recursos
  • 23. Nombre de recursos Modelos externos != Entity Model
  • 24. Nombre de recursos Modelos externos != Business Model != Entity Model
  • 25. Http Status Code Level 400 – Error de cliente 400 – Bad request 401 –Unauthorized 403 – Forbidden 404 – Not found Nivel 200 Success 200 – Ok 201 – Created 204 – No content
  • 26. Http Status Code Nivel 500 Error servidor 500 – Internal server error Nivel 400 – Error de cliente 405 – Method not allowed 406 – Not acceptable 409 - Conflict 415 – Unsupported media type 422 – Unprocessable entity
  • 27. Nombre de recursos Retornar formato predeterminado Utilizar siempre la representación conveniente Return 406 – Not acceptable El formato se solicita mediante Accept header - application/json - application/xml - …

Notas del editor

  1. Separa a las buenas aplicaciones de las excelentes aplicaciones Errores de escalabilidad no son intuitivos Una aplicacion escalable comienza en su diseño