Creando un API en Net Core - Intro
Tags: csharp, api, dotnet, rest
Published: 2021-02-02 04:59:53

Hace tiempo que no publicaba nada y me pareció una buena idea repasar a que estamos llamando **API** y más precisamente a un **API REST**. Cuáles son las consideraciones que debemos tener en cuenta al momento de crearla y finalmente cuáles son las herramientas que **_Net Core_** nos provee para desarrollarla.

El objetivo principal de este grupo de artículos es para los desarrolladores que recién están dando sus primeros pasos puedan comprender de una manera simple y directa que es un API y cómo hacer una implementación completa utilizando **_Net Core_**. Desarrolladores más experimentados pueden tomar esto como una guía/checklist o mejor aún ayudarme con posibles olvidos, correcciones o lo que deseen aportar para ayudar a los que recién comienzan 💪🤙

# ¿Qué es un API?
Antes de comenzar a tirar código como bien techies que somos sentemos una base sobre lo que entendemos que es un **API**.

> **API**: Interfaz de programación de aplicaciones o bien en inglés Application programming interface.

Ya solo con el nombre nos está dando una pista, es un interfaz para interactuar con componentes de un software sin necesidad de conocer su implementación concreta. Entonces, es una abstracción para el desarrollador que utiliza el **API**. Toda **API** provee un contrato donde estipula la forma en que se la puede utilizar.

***

# ¿Dónde podemos ver ejemplos de APIs?

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/da922k2ju75m8r5of5xf.png)

Hay muchos ejemplos de **APIs**, veamos algunos:

- **_Net Core_** y **_C#_** proveen un API con el cual desarrollamos las aplicaciones
- **_Google Maps_** nos provee un **API** con el cual podemos insertar su mapa en nuestra aplicación
- Hay **APIs** web públicas para por ejemplo obtener el clima de una ciudad o realizar conversiones de moneda e integrarlas en nuestras aplicaciones
- **_Amazon_**, **_eBay_** o **_Mercado Libre_** proveen un **API** público de búsqueda para su catálogo
- Los **_sistemas operativos_** proveen **APIs para** que sus componentes internos puedan interactuar
- **_Kubernetes_** provee un **API** para su administración

Como se puede ver, hay muchos tipos de **APIs**. Algunas son _internas_ (como por ejemplo las del **_SOs_** o **_Net Core_**) y otras son para _consumirlas remotamente_ (por ejemplo el API de clima). Son estas últimas las que nos vamos a estar enfocando en estos artículos y son las que comúnmente los desarrolladores les llamamos **API** en el sentido amplio de la palabra.

> _Pregunta para conversar en los comentarios_: El tablero del auto ¿es el API del vehículo hacia el conductor? 🤔 

***

# APIs Remotas
Hablamos que lo que nos interesa son las **APIs remotas**, excelente. Una **API remota** requiere que 2 puntos no conectados de manera directa necesiten comunicarse y el medio utilizado es la red (Internet). El caso más visible es el de **_Gmail_** donde el Frontend que se ejecuta en el browser local de nuestra PC llama a una **API remota** localizada en los servidores en **_Google_** para buscar los emails. Se puede extender a comunicación entre sistemas y aplicaciones de cualquier índole diferentes que pertenezcan o no a una misma empresa.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/69yh9pleli7kyk8gkvm4.jpg)

Lo más común o la norma general es que la comunicación que mencionamos en el párrafo anterior (o llamadas a las **APIs**) se realice por medio del protocolo _HTTP/HTTPs_ y podemos dividirlos de la siguiente manera:

- **_RPC_** _(Remote Procedure Call)_, es la ejecución de una función de un proceso en una máquina de la red interna o de internet. Por lo general su forma de comunicación es binaria y existe desde antes del auge de Internet. Como variantes aparecieron _XML-RPC_ y _JSON-RPC_. En los últimos años tomó mucho auge _GRPC_ que convierte _RPC_ a web nativo.
- **_SOAP_** _(Simple Object Access Protocol)_, donde la comunicación está predefinida por medio de XML estándar y es la base de las _arquitecturas SOA_
- **_REST_** _(REpresentational State Transfer)_, donde la comunicación se basa en _HTTP_ y utiliza todos sus features para generar las **_APIs_**

Estas últimas, en específico, son las que nos vamos a enfocar. Cuando los devs hablan de **APIs** generalizamos la palabra a este tipo de **API**.

> _Pregunta para conversar en los comentarios_: Cuando usamos el control remoto de la TV y cambiamos de canal. ¿Estamos llamando a una API remota? 🤔 


***

Este artículo solo fue la introducción al mundo de las API. 

Te invito a dejar tu comentario sobre las preguntas que aparecieron a lo largo del artículo y vamos conversando entre todos 😀💪


***