desarrollar sistemas distribuidos. Se basa en definir SERVICIOS que encapsulan la lógica de negocio para que un CONSUMIDOR externo pueda presentar la información al CIUDADANO.
flujos de negocio. Segmentación de funcionalidad en SERVICIOS independientes. Respuesta ágil a cambios y solución de errores. El CIUDADANO puede decidir entre distintas presentaciones de información de forma transparente.
respuestas mediante una interfaz y estructura de información bien definida conocida como CONTRATO. No dependen del estado de otras funciones o procesos.
automatizada o a petición de un CIUDADANO. El SERVICIO y el ciudadano son independientes y pueden estar escritos en distintos lenguajes de programación por lo que el CONTRATO define cómo pueden interactuar.
negocio para una aplicación. Crear nuevas versiones es la única forma permitida de alterar o mejor dicho crear nuevos contratos para un servicio publicado.
servicios diferenciados por los VERBOS HTTP. Cada recurso se encarga de un único componente y en la mayoría de los casos son implementaciones CRUD mediante REST de componentes de negocio.
consumo y un verbo http. La petición debe contener toda la información necesaria para realizar el servicio y la respuesta debe contener toda la información necesaria para su uso, reutilización y acceso. Incluyendo información de cabecera como CORS.
representa un recurso rest. La ruta y el recurso se relacionan de forma biunívoca de forma que distintas rutas corresponden a distintos recursos y viceversa. e.g. api/v1/tiendas/<tienda_id>/empleados/<empledo_id>/ausencias
empiezan devolviendo el código de estado de HTTP con lo que se determina el éxito de una petición. Respuestas con el mismo código de estado deben seguir la misma estructura aunque distintos códigos pueden devolver distintas estructuras
al limitar su enfoque a servicios web HTTP, optando siempre por las tecnologías soportadas por defecto y las soluciones más simples. Los servicios ROA son comúnmente más fáciles de consumir y desarrollar debido a estos motivos.
desde distintos protocolos a veces en el mismo servicio. e.g. un servicio que soporta RSS y que también soporta HTTP. ROA Enfocado a la web y al protocolo HTTP/1.1 Cada servicio es accesible sólo por este medio.
para ser consumidos. e.g. instalar un cliente SOAP o WSDL y por lo tanto sólo poder utilizar lenguajes que los soportan. ROA Debe bastar con soportar HTTP/1.1
autodescriptiva y contener la acción a realizar. users/getList ROA La ruta representa un recurso y la acción se representa mediante el verbo de HTTP. users [GET]
distintas formas en distintos protocolos y servicios por lo que es necesario tener un control de mensajes de las respuestas de cada servicio. e.g. recibir “usuario creado con éxito” o “sucess:true” ROA Los códigos de HTTP determinan la respuesta para todos los servicios. e.g. 201 significa CREATED en cualquier servicio.
distinta interfaz de respuesta por lo que la interfaz forma parte del contrato. Algunos protocolos son muy rígidos y sólo soportan un formato de respuesta, por lo general XML. ROA Se usa HATEOAS y JSON Hypermedia como interfaz de forma unificada por lo que la estructura puede ser más flexible y reducida, además de soportar formatos JSON y XML según lo solicite el consumidor
reducir el enfoque de los servicios. Esto ofrece menos libertad al escoger tecnologías pero más agilidad y menor tiempo de respuesta para el desarrollo y una menor curva de aprendizaje.
Puede recibir los identificadores mediante parámetros GET. La misma acción puede soportar varios verbos http. ROA La ruta representa de forma única a un recurso, distintas rutas apuntan a distintos recursos. Los identificadores son parte de la ruta. Información que no pertenece a un identificador se envía por parámetros GET Cada acción soporta exactamente un verbo.
lo tanto también representa los descendientes del recurso de forma que las subrutas también deben ser recursos accesibles. Es decir si puedo acceder a: tienda/1/producto/1 también puedo acceder a: tienda/1/producto [GET] tienda/1 [GET] tienda [GET]
Los límites de consumo se determinan mediante métodos como CSRF La sesión depende del navegador. ROA No existen cookies ni sesiones. La autentificación se realiza mediante tokens enviados por un parámetro GET o cabecera Authentication. Los límites de consumo se definen mediante métodos como CORS y RateLimiter. Independiente del navegador.
representados en la misma vista con el mismo código HTTP ya que así lo espera un navegador. e.g. Devolver 200 cuando hay un error de validación al crear un elemento y mostrar los errores en la vista. ROA Al no depender de un navegador ni soportar vistas las respuestas REST declaran el resultado de una petición mediante el código HTTP de modo que distintos resultados devuelven distintos códigos y viceversa. e.g Devolver 422 cuando hay un error de validación al crear un elemento
sesiones y cookies. Las rutas pertenecen a exactamente un recurso. El resultado de una petición se interpreta mediante el código de estado HTTP de la respuesta.