Que es una API?
Una Interfaz de Programación de Aplicaciones (API), es un mecanismo con el cual dos aplicaciones pueden comunicarse entre si mediante solicitudes y respuestas. Así como la interfaz que ve el usuario atreves del monitor sirve para la comunicación humano-software, las APIs sirven para que programas desarrollados con tecnologías completamente diferente, puedan comunicarse entre si.
Es una capa de abstracción intermediaria entre dos sistemas donde ninguno conoce como esta implementado el otro, pero si puede hacer uso de lo que cada sistema brinda y mantener una interacción entre si.
Las APIs pueden ser locales o remotas. Locales son aquellas que son utilizadas en un mismo entorno, como por ejemplo en el desarrollo de una aplicación android y necesito hacer que se prenda el flash, solo consumo la api interna que realiza la acción de prenderlo. Remotas son aquellas que se encuentran en otro lugar físico al del dispositivo que realizo la solicitud. Es acá donde nuestro proyecto empieza a crecer ya que al poder hacer uso de muchas APIs que fueron desarrolladas por otros programadores, evita grandes tiempos de desarrollo y en algunos casos grandes sumas de dinero.
Por ejemplo, para ver la información meteorológica en un dispositivo, la aplicación que la muestra, consumirá una API que le otorgara la información necesaria para que luego de procesarla, por la pantalla uno vea la información meteorológica del lugar donde se encuentra.
Que es REST?
La Transferencia de Estado Representacional (REST) es cualquier interfaz entre sistema que utilice el protocolo HTTP para la obtención y manipulación de datos, estableciendo una serie de condiciones de como debe funcionar la API.
Esta arquitectura es normalmente explicada en términos de cliente y servidor, donde el cliente puede ser una persona o un sistema de software, y el servidor será ni mas ni menos que el lugar donde se encuentran los datos, los recursos a los cuales quiero acceder. Entonces una API puede utilizar una arquitectura REST para transformarse así en una API REST, cumpliendo con las siguientes características:
Interfaz Uniforme: Indica que indistintamente de como este representada la información en el lado del servidor, la API podrá representarla como ella desee, entregando normalmente un archivo XML o JSON, estandarizando este formato de entrega de un recurso.
URI: Cada solicitud realizada debe identificar a los recursos de manera única, eso se hace mediante el identificador uniforme de recursos (URI), pudiendo esto ser un recurso en particular o bien una lista de recursos y es la única información que debe conocer el cliente.
Sin estado: significa que sin importar las veces que un mismo cliente realice una solicitud, esta procesara la petición por completo cada vez, sin guardar ningún dato sobre quien realizo una petición. Esto influye en el tiempo de respuesta, lo cual vino a solventar el almacenamiento en cache. La cache es normalmente implementada del lado del cliente para mejorar la experiencia de interacción con el sistema. Por ejemplo, si visito frecuentemente un sitio donde siempre existen las mismas imágenes, para agilizar la carga es que se guardara en el dispositivo que se haya conectado el cliente estas imágenes y cargándolas sin tener que realizar la petición para ello.
Separación por capas: donde el cliente puede conectase a otros servicios intermediarios autorizados. Por ejemplo, al querer acceder a un recurso, este necesita que seamos un cliente valido, entonces puede existir otra capa que será una API que valide nuestros datos como clientes y así darnos el permiso necesario para obtener el recurso.
Cumpliendo con todas ellas, REST creara una petición basada en el protocolo HTTP la cual contendrá toda la información necesaria (request) que solicita un servidor y únicamente espera una respuesta (response). Utilizando los métodos HTTP como: POST (crear),GET(obtener),PUT (editar), DELETE (eliminar).
Algunas ventajas de utilizar API REST son:
La manipulación de archivos en formato JSON resulta mucho mas fácil de entender para el ojo humano que otros formatos como XML
Poder hace hacer uso de diferentes APIs que fueron desarrolladas por otros programadores, evita grandes tiempos de desarrollo y en algunos casos grandes sumas de dinero.
Optimiza la interacción entre el cliente y el servidor, gracias a que no maneja estado, elimina la carga del servidor ya que no tiene que retener ningún tipo de información por solicitudes anteriores
Poder utilizar el almacenamiento de cache, ayuda a administrar mucho mejor las interacciones entre el cliente y el servidor eliminando algunas de estas interacciones.
Al realizar esa separacion entre cliente y servidor, desacopla las tecnologias que se esten utilizando de un lado o del otro, pudiendo asi estas tecnologias evolucionar o bien reemplazarse por otra y la comunicación entre ambos seguiria existiendo de igual manera.