A medida que avanza la tecnología y al ver que cada día tenemos más equipos y servicios interconectados, no nos detenemos a pensar ¿cómo lo hacen?, simplemente hacemos uso de estos equipos y servicios. Sin embargo, ¿qué si queremos crear una red de equipos y servicios interconectados para una empresa, nuestro producto o simplemente para simplificar su estructura? El análisis e investigación de cómo lograr este objetivo conllevan al mismo término: Las API’s Restful o cómo de forma general es conocido: API. En esto básicamente se basa el estándar restful.
Ahora bien, en este artículo se lleva a cabo la explicación de dos conceptos fundamentales para entender de lo que realmente se trata este tema. El primer concepto será el de las APIs, y el segundo será el tipo de API de servicios web específico, REST. Asimismo, se contrasta el API SOAP que es muy común entre los desarrolladores en conjunto con el API RESTful.
¿Qué es una API?
La Figura muestra un ejemplo del cómo funciona una API, en este caso se muestra la misma como un proveedor de acceso universal a cualquiera de los recursos de datos y software denominados como también Assets, para que el desarrollador construya según su criterio una aplicación web o móvil, como se aprecia en la figura, de tal modo que pueda ser usada por usuarios finales que tendrán la experiencia de tener acceso a información de distintos sitios, solo en una app.
Ilustremos otro ejemplo de una aplicación web. Digamos que se necesita hacer peticiones HTTP. En lugar de desarrollar todo el código para hacer una petición HTTP, se puede utilizar una API que se encargue de esto, como por ejemplo si se necesita utilizar archivos .yaml, se puede usar la API Yaml de Ruby.
Ahora, cada API está diseñada en un lenguaje de programación concreto y con unas especificaciones distintas que la definen (las APIs pueden incluir especificaciones para estructura de datos y rutinas, clases de objetos o variables, a partir de las cuales se basa el uso de tal interfaz). Además, suele ser habitual que cada una de ellas disponga de documentación completa y eficaz (un conjunto de tutoriales, manuales y reglas de buenas prácticas para esa interfaz de programación).
Tipos de API
APIs de servicios web
Ahora bien, existen cuatro tipos de APIs de servicios web que se deben abordar y que son habituales en los desarrolladores: SOAP (Simple Object Access Protocol), un protocolo estándar de intercambio de información y de datos en XML entre dos objetos; XML-RPC, un protocolo de llamada a procedimiento remoto que usa XML como formato de datos y llamadas HTTP como sistema de comunicación; JSON-RPC, mismo sistema de comunicación pero en formato JSON; y REST (Representational State Transfer), arquitectura de software para sistemas hipermedia en la World Wide Web (www); una API REST usa el protocolo HTTP.
APIs basadas en bibliotecas
APIs basadas en clases
APIs de funciones en sistemas operativos
Para efectos de este artículo, se aborda básicamente el tema referente a las APIs web services (servicios web) en específico el REST.
¿Qué es REST?
Es considerada una técnica de arquitectura de software, es decir, un conjunto de principios y patrones de comunicación que ayudan a crear una forma de pensar y construir las APIs. Este tipo de arquitectura se define por un conjunto de restricciones entre los elementos, componentes, conectores y datos usados.
La definición formal de la técnica se describe de la siguiente forma:
- Un modelo cliente-servidor, es una interfaz uniforme que separa a cliente y servidor. Haciendo que ambas partes sean completamente independiente, pudiendo ser reemplazadas de forma transparente para la otra parte.
- Un protocolo sin estado (o stateless), cada petición HTTP realizada debe contener toda la información necesaria para poder resolverla, esto permite que ni el cliente ni servidor necesiten recordar ningún estado previo. Sin embargo, existen algunas excepciones y existen algunas aplicaciones HTTP que incorporan la memoria caché, para que así, el cliente pueda ejecutar en un futuro la misma respuesta para peticiones idénticas. Además debe ser idempotente, por lo que la misma petición, con los mismos parámetros, debería devolver el mismo resultado. Cabe destacar, que el hecho de que sea sin estado implica que no se puede llamar un servicio REST y suministrarle datos y esperar que “nos recuerde” en la siguiente petición. El estado lo mantiene el cliente, y es el mismo quién debe pasar el estado en cada petición. Si se quiere que un servicio REST recuerde ciertos datos, debo suministrarle la identidad de quién pide el servicio en cada llamada. Eso puede ser un usuario y una contraseña, un token o cualquier otro tipo de credenciales
- Cacheable, y donde cada petición debe indicar si el resultado de la misma puede ser o no cacheado. Un sistema correcto de cacheo, tanto parcial como completo, ayudará en gran medida a la escalabilidad y rendimiento.
- Las operaciones más importantes relacionadas con los datos en cualquier sistema REST y la especificación HTTP son cuatro: POST (crear), Get (leer y consultar), PUT (modificar) y DELETE (borrar).
- Una interfaz uniforme que represente de forma única los recursos, por ejemplo mediante el uso de URIs [2] únicas, y que permita la manipulación de dichos recursos a través de dichas representaciones. Además esta interfaz debe incorporar mensajes autos descriptivos junto con un uso correcto de los códigos de estado HTML.
- Una técnica basada en el uso de hipermedios como motor para poder indicar las diferentes acciones. El uso de estos sirve para explicar la capacidad de una interfaz de desarrollo de aplicaciones para proporcionar al cliente y al usuario los enlaces adecuados, y ejecutar acciones concretas sobre los datos.
Asimismo es una extensión del concepto de hipertexto. Ese concepto llevado al desarrollo de páginas web es lo que permite que el usuario pueda navegar por el conjunto de objetos a través de enlaces HTML.
Para cualquier API REST es obligatorio disponer del principio HATEOAS (Hypermedia As The Engine Of Application State – Hipermedia Como Motor del Estado de la Aplicación) para ser una verdadera API REST. Este principio es el que define que cada vez que se hace una petición al servidor y éste devuelve una respuesta, parte de la información que contendrá serán los hipervínculos de navegación asociada a otros recursos del cliente.
Devolución de una petición a una API REST según el principio HATEOAS (link a un tutorial explicativo del concepto de hipermedia en API REST con un ejemplo práctico de una petición a una base de datos de automóviles). También se puede observar este VIDEO
Figura donde se muestra una petición aplicando el principio descrito anteriormente.
Ahora ya descritos ambos conceptos por separado, podremos entonces realizar una conceptualización de lo que son las APIs RESTful. Cabe destacar que REST básicamente es una arquitectura que se ejecuta sobre HTTP y las APIs RESTful hacen referencia a un servicio web que implementa la arquitectura REST.
¿Qué es una API RESTful?
Al consultar una API se deben especificar parámetros de consulta para que el servicio sepa lo que queremos consultar, basado en una estructura previamente definida provista por el API por medio de una documentación.
La arquitectura REST al trabajar sobre el protocolo HTTP, los procedimientos o métodos de comunicación son los mismos que HTTP, siendo los principales: GET, POST, PUT, DELETE. Otros métodos que se utilizan en RESTful API son OPTIONS y HEAD. Este último se emplea para pasar parámetros de validación, autorización y tipo de procesamiento, entre otras funciones.
Otro componente de un RESTful API es el “HTTP Status Code”, que le informa al cliente o consumidor del API que debe hacer con la respuesta recibida. Estos son una referencia universal de resultado, es decir, al momento de diseñar un RESTful API toma en cuenta utilizar el “Status Code” de forma correcta.
Por ejemplo, el código 200 significa OK, que la consulta ha recibido respuesta desde el servidor o proveedor del API. Los códigos de estado más utilizado son:
§ 200 OK
§ 201 Created (Creado)
§ 304 Not Modified (No modificado)
§ 400 Bad Request (Error de consulta)
§ 401 Unauthorized (No autorizado)
§ 403 Forbidden (Prohibido)
§ 404 Not Found (No encontrado)
§ 422 (Unprocessable Entity (Entidad no procesable)
§ 500 Internal Server Error (Error Interno de Servidor)
Ejemplo de una respuesta de una RESTful API:
Por lo general y mejor práctica, el cuerpo (Body) de la respuesta de un API es una estructura en formato JSON. Aunque también puede ser una estructura XML como la usada por defecto en las APIs que usan SOAP, o incluso puede ser usadas estructuras personalizadas. Sin embargo, como el objetivo es permitir que cualquier cliente pueda consumir el servicio de un API, lo ideal es mantener una estructura estándar, por lo que JSON es la mejor opción.
Un ejemplo de una respuesta en JSON está dada como sigue:
La respuesta anterior se obtiene al consultar un API por medio de una ruta o método especifico vía URL. Por ejemplo: http://localhost/api/v1/autos utilizando el método HTTP GET.
SOAP VS REST
Las APIs representan un punto importante al momento de realizar alguna petición en cualquier formato específico del servicio que se solicite. En general, son un avance en todos los sentidos pues permiten ahorro de código a implementar y tiempo a utilizar para llevar a cabo la tarea. Es una modalidad que debe estar siempre presente en cualquier aplicación web, pues se ha vuelto ya algo básico e imprescindible al momento de realizar una petición o utilizar datos de otra aplicación.
Publicado el 18 de septiembre de 2019