He estado explorando el mundo de las API, bajo el estilo de arquitectura REST, lo cual es sumamente interesante y útil, además de ser un tema de motivación personal he decidido aprender sobre esto  y desarrollar algunas API, a modo de practica y diversión. He decidido compartir todo mi entusiasmo por el tema con una serie de artículos, que van desde conocimientos previos, como descargar los programas necesarios para preparar el entorno de trabajo de ASP.Net Core en Visual Studio Code, como crear nuestros modelos y controladores.

Como ya he indicado en el nombre de la serie, estaremos desarrollando un API REST en Asp.Net Core desde cero, vamos a crear nuestras tablas en SQL server, crearemos la App desde consola, será un poco tedioso para los que ya estamos acostumbrados a usar plantillas, pero creo que muy acertado para quienes se encuentran en nivel 100.

Espero que esta serie de artículos sea de mucho provecho para quienes deseen seguirla. Al final de esta serie subiré el proyecto a Github para que puedan descargarlo y probarlo.

Antes de empezar a desarrollar API REST es necesario que tengamos algunos conocimientos previos sobre estos tópicos, saber su origen, porque se utilizan y cuales son sus ventajas versus otros tipos de aplicaciones.

 

Web API

Empecemos por lo más sencillo, me tomo par de ejemplos entender cómo realmente funcionan, pero intentemos   explicarlo de la manera mas sencilla. Qué es un API o web API? Sus siglas quieren decir,  Interfaz de Programa de Aplicación. Pero que implica?, De forma simple podemos decir que, es un conjunto de rutinas y protocolos, que especifican cómo los componentes de distintas aplicaciones, deben interactuar. Podemos considerar a un API como eficiente, cuando esta permite al desarrollador, en este caso usted,  construir una aplicación de forma sencilla  utilizando los recursos que esta provee, para luego ser integrados en una sola solución.

Podemos decir que un API es fundamental para la referenciación e invocación de clases  que ofrecen las  librerías de clases. Pero como podriamos acceder a estas librerías si se encuentran en computadoras diferentes?

Hay una serie de soluciones que se han estado aplicando a través del tiempo para solucionar este problema,  tales como, llamada de procedimiento remoto (RPC) y arquitectura de corredor de solicitud de objeto común (CORBA), etc.

Eventualmente, los desarrolladores insertaron llamadas remotas en servidores web. Esto da como resultado que las bibliotecas de clase residan en el servidor web y expongan la API, de las bibliotecas de clase a través del protocolo HTTP.

Dado que los clientes web siguen llamando a la API de las bibliotecas de clase, pero de forma remota a través de la web, llamamos a este tipo de servicio web, Web API. En resumen, si un servicio web actúa como el contenedor de las bibliotecas de clase y solo expone la capacidad informática remota, lo llamamos API web.

Hay muchos estilos y reglas para diseñar estas API web, entre ellos los mas destacados:

 

  • Simple Object Access Protocol (SOAP) proporciona una convención para representar llamadas y respuestas de procedimientos remotos. Si un servicio web adopta SOAP, llamamos a este servicio web SOAP Web Service o SOAP Web API.

 

  • La transferencia de estado representacional (REST) ​​es un conjunto de restricciones arquitectónicas (NO un protocolo o estándar) para el diseño de aplicaciones web. Como un servicio web es un tipo de aplicación web, podemos aplicar restricciones REST al diseño de servicios web. Una vez que un servicio web adopta los conceptos REST, lo llamamos un servicio web RESTful o API RESTful Web.

 

Qué es una API REST ?
Una API RESTful es una interfaz de programa de aplicación (API) que utiliza solicitudes HTTP para GET, POST, PUT y DELETE datos.

Una API RESTful, también conocida como RESTful web service, se basa en la tecnología de transferencia de estado representacional (REST), un estilo arquitectónico y un enfoque de las comunicaciones que a menudo se utilizan en el desarrollo de servicios web.

Los REST API’s están ligados (altamente acoplados) al protocolo HTTP. La URL se usa para definir el recurso y el verbo HTTP para definir la acción que queremos hacer sobre ese recurso.

 

¿Por qué elegir APIs REST?

Separación entre el cliente y el servidor: el protocolo REST separa totalmente la interfaz de usuario del servidor y el almacenamiento de datos. Eso tiene algunas ventajas cuando se hacen desarrollos. Por ejemplo, mejora la portabilidad de la interfaz a otro tipo de plataformas, aumenta la escalabilidad de los proyectos y permite que los distintos componentes de los desarrollos se puedan evolucionar de forma independiente.

Visibilidad, fiabilidad y escalabilidad. La separación entre cliente y servidor tiene una ventaja evidente y es que cualquier equipo de desarrollo puede escalar el producto sin excesivos problemas. Se puede migrar a otros servidores o realizar todo tipo de cambios en la base de datos, siempre y cuando los datos de cada una de las peticiones se envíen de forma correcta. Esta separación facilita tener en servidores distintos el front y el back y eso convierte a las aplicaciones en productos más flexibles a la hora de trabajar.

La API REST siempre es independiente del tipo de plataformas o lenguajes: la API REST siempre se adapta al tipo de sintaxis o plataformas con las que se estén trabajando, lo que ofrece una gran libertad a la hora de cambiar o probar nuevos entornos dentro del desarrollo. Con una API REST se pueden tener servidores PHP, Java, Python o Node.js. Lo único que es indispensable es que las respuestas a las peticiones se hagan siempre en el lenguaje de intercambio de información usado, normalmente XML o JSON.

 

Protocolo HTTP

(Hypertext Transfer Protocol, Protocolo de transferencia de hipertexto) es el protocolo más utilizado en internet. El propósito de HTTP es permitir la transferencia de archivos. Entre un navegador (el cliente) y un servidor web localizado mediante una cadena de caracteres denominada dirección de URL.

El navegador realiza una solicitud HTTP, y el servidor procesa la solicitud y después envía una respuesta HTTP.  

Fetching_a_page

Clientes y servidores se comunican intercambiando mensajes individuales (en contraposición a las comunicaciones que utilizan flujos continuos de datos). Los mensajes que envía el cliente, normalmente un navegador Web, se llaman peticiones, y los mensajes enviados por el servidor, se llaman respuestas.

Peticiones

HTTP_Request

Una petición de HTTP, está formado  por los siguientes campos:

  1. Un método HTTP,  normalmente pueden ser un verbo, como: GET, POST o un nombre como: OPTIONS o HEAD, que defina la operación que el cliente quiera realizar. El objetivo de un cliente, suele ser una petición de recursos, usando GET, o presentar un valor de un formulario HTML, usando POST, aunque en otras ocasiones puede hacer otros tipos de peticiones.
  2. La dirección del recurso pedido; la URL del recurso, sin los elementos obvios por el contexto, como pueden ser: sin el  protocolo (http://),  el dominio(aquí developer.mozilla.org), o el puerto TCP (aquí el 80).
  3. La versión del protocolo HTTP.
  4. Cabeceras HTTP opcionales, que pueden aportar información adicional a los servidores.
  5. O un cuerpo de mensaje, en algún método, como puede ser POST, en el cual envía la información para el servidor.

Ya hemos mencionado que una petición consta de métodos para indicar la acción que será realizada en determinado recurso.  veamos los métodos más usados:

charity

 

 

Respuestas

HTTP_Response

Las respuestas están formadas por los siguientes campos:

  1. La versión del protocolo HTTP que están usando.
  2. Un código de estado, indicando si la petición ha sido exitosa, o no, y debido a que.
  3. Un mensaje de estado, una breve descripción del código de estado.
  4. Cabeceras HTTP, como las de las peticiones.
  5. Opcionalmente, el recurso que se ha pedido.

 

Diferencia entre Web Services y Web API

Web Services es un grupo de tecnologías muy específicas para integrar aplicaciones utilizando XML y SOAP (Simple Object Access Protocol). Los web services facilitan la interacción entre dos máquinas en la red.

Mientras que una Web API, es un conjunto de rutinas, protocolos y estructuras de datos, provistos por librerías, diseñadas para que dos o más aplicaciones interactúen entre si.

Un API define el método por el cual un software de  aplicación  interactúa con otro. Cuando esta acción implica el envío de datos a través de una red, los servicios web entran en escena. Una API generalmente implica funciones de llamada desde dentro de un programa de software.

 


Conclusiones

El desarrollo de aplicaciones bajo este modelo, trae muchas ventajas, sin embargo no es aplicable a todos los escenarios. Como pudimos notar este tipo de aplicaciones si y solo si, serán posibles si nuestra aplicación estará bajo el modelo de cliente/servidor.

Luego de refrescar nuestros conocimientos o adquirir nuevos con este artículo, en el siguiente artículo de esta serie: Aprenderemos a Preparar Nuestro Entorno de Desarrollo con las herramientas necesarias para poner manos a la obra. Espero sus comentarios  y aportes. Hasta pronto!

Sigue el siguiente enlace al próximo articulo: Serie: Desarrolla tu primer API REST en Asp.Net Core (Prepara tu entorno)