¿Qué es una API? en Español, por favor. By Petr Gazarov

Artwork by Phillip Blackowl

Antes de aprender desarrollo de software, API sonaba como cerveza para mi.

Ultimamente uso ese termino tan seguido que de hecho hace poco trate de ordenar una API en un bar.

La respuesta del bartender me arrojo un 404: resource not found.

Tecnicamente, API significa Application Programming Interface (interfaz de programación de aplicaciones). En algún punto la mayoría de las grandes empresas construyen APIs para sus clientes o para uso interno.

Pero, ¿Como explicarías API en español?, ¿Y si hay un significado más amplio que es utilizado en el desarrollo y negocios?. Primeramente, iremos hacia atrás y veremos como es que la web funciona.

WWW y los servidores remotos.

Cuando yo pienso en la ‘Web’, me imagino una larga conexión de servidores conectados.

Cada pagina del internet esta almacenada el algún lugar en un servidor remoto. Un servidor remoto no es nada místico ni nada mágico después de todo solo montón de otras computadoras optimizadas para procesar peticiones.

Pongamos las cosas en perspectiva, tu puedes montar un servidor en tu laptop y montar una pagina web (de hecho, un ‘servidor local’ es lo que los ingenieros de software utilizamos para desarrollar paginas web antes de montarlas en un servidor remoto y mostrarlas al publico).

Cuando tu escribes www.facebook.com en tu navegador, una petición va a los servidores remotos de Facebook. Una vez que el navegador obtiene la respuesta del servidor interpreta el código y nos muestra la pagina.

El navegador, también conocido como cliente, los servidores de Facebook son una API, esto significa que cada vez que tu visitas una pagina en el internet, tu(cliente) interactúas con alguna API en un servidor remoto.

Una API no es lo mismo que un servidor remoto — si no que es la parte del servidor que recibe las solicitudes y la que envía las repuestas.

API como una manera de servir a tus clientes.

Probablemente has escuchado que algunas compañías ofrecen sus APIs como productos. Por ejemplo, Weather Underground vende el acceso a su API (Weather Data API).

Ejemplo: La pagina de tu pequeña empresa tiene un formulario que es usado para que el usuario cree una cita en tu empresa. Tu quieres que tus clientes tengan la manera de que esta cita se agregué automáticamente en su calendario de Google como un evento con todos los detalles de la cita.

Uso de la API: La idea es que tu pagina web se comunique directamente con los servidores de Google con una petición de crear un evento en el calendario de el usuario. Tu servidor entonces debería recibir una respuesta de Google, procesarla, y mandarle de regreso información relevante al navegador, tal y como un mensaje de confirmación al usuario.

Por otra parte, tu navegador a menudo puede enviar solicitudes a la API directamente al servidor de Google sin pasar por tu servidor.

¿Cuál es la diferencia de la API de Google Calendar con todas las demás APIs que existen de diferentes servidores remotos?

En términos técnicos, las diferencias entre las APIs es el formato de la petición y la repuesta.

Para desplegar una pagina web completa, tu navegador espera una repuestas en HTML que contiene el código que puede interpretar para desplegarlo de una manera la cual el usuario pueda entender, mientras que una petición la API de Google Calendar debería regresar información en formato JSON

Si tu servidor esta haciendo una petición a una API, entonces tu servidor es el cliente (muy similar a como tu navegador era el cliente para navegar entre paginas webs)

Desde la perspectiva del usuario: las APIs nos dejan completar acciones sin tener que salir de el mismo website.

La mayoría de las paginas web modernas consumen al menos alguna Third-Party API (Es decir una API que es de un tercero, que no nos pertenece)

Muchos problemas ya tienen alguna solución con una ‘Third-Party API’, en ocaciones es mucho mas fácil y da mas confianza usar una solución ya existente. (Aveces)

No es tan raro que los equipo de desarrollo rompan su aplicación en multiples servidores que hablan entre si por medio de APIs, los servidores que realizan funciones de ayuda para el servidor principal de la aplicación se refieren comúnmente como microservicios

Para resumir, cuando una compañía ofrece una API a sus clientes, esto solo significa que ellos construyeron un set de URls dedicadas a responder información pura — es decir, las repuestas no contendrán el tipo de información de presentación que tu esperarías en una interfaz de usuario como un website.

¿Puedes hacer alguna de estas peticiones directamente en tu navegador?, Por lo general si. Desde que el protocolo actual de transmisión HTTP pasa en texto plano, tu navegador ara todo lo posible para mostrarte la repuesta

Por ejemplo tu puedes acceder ala API de Github directamente en tu navegador sin necesidad de tener un token de acceso. Aqui tienes una muestra de un JSON que responde la API Github cuando tu visitas esta ruta en tu navegador (https://api.github.com/users/gvsdan):

{
"login": "gvsdan",
"id": 9144571,
"avatar_url": "https://avatars.githubusercontent.com/u/9144571?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/gvsdan",
"html_url": "https://github.com/gvsdan",
"followers_url": "https://api.github.com/users/gvsdan/followers",
"following_url": "https://api.github.com/users/gvsdan/following{/other_user}",
"gists_url": "https://api.github.com/users/gvsdan/gists{/gist_id}",
"starred_url": "https://api.github.com/users/gvsdan/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/gvsdan/subscriptions",
"organizations_url": "https://api.github.com/users/gvsdan/orgs",
"repos_url": "https://api.github.com/users/gvsdan/repos",
"events_url": "https://api.github.com/users/gvsdan/events{/privacy}",
"received_events_url": "https://api.github.com/users/gvsdan/received_events",
"type": "User",
"site_admin": false,
"name": "Dan Garcia ",
"company": "Hectic.io",
"blog": "http://www.hectic.io",
"location": "Guadalajara",
"email": "dan@hectic.io",
"hireable": true,
"bio": "CEO of Hectic.io on Tuesdays & Full Stack Engineer at @MilleniumStudio ",
"public_repos": 42,
"public_gists": 8,
"followers": 49,
"following": 176,
"created_at": "2014-10-11T00:49:59Z",
"updated_at": "2016-08-20T05:45:13Z"
}

El navegador parece que le va bien al mostrar JSON como la respuesta. Un JSON como este esta listo para ser usado en tu código y es muy fácil extraer datos de este texto. Después puedes hacer lo que se te de tu gana con estos datos.

A es de “Aplicación”

Para cerrar el tema, mostremos un par de ejemplo de lo que puede ser una API.

“Application” puede referirse a muchas cosas, aquí hay algunas de ellas en el contexto de API.

  1. Una pieza de software con distintas funciones.
  2. Un servidor completo, una app completa, o simplemente una pequeña parte de una app.

Básicamente una pieza de software que se puede separar claramente de su entorno puede ser una “A” en “API” y es probable que esta tenga algún tipo de API.

Digamos que estas usando una ‘Third-Party Library” en tu codigo, una vez incorporada esto en tu código, la librería se convierte en parte de tu app (dependencia). Al ser una pieza de software, la librería tiene una API que te permitirá interactuar con el resto de tu código.

Otro ejemplo: En Diseño Orientado a Objetos, el código esta organizado en objetos, tu aplicación puede ser que tenga cientos de objetos definidos que pueden interactuar unos con otros.

Cada uno de esos objetos tiene una API — un set de metodos públicos y propiedades que puedes usar para interactuar con otros objetos en tu aplicación.

Un objeto puede tener también lógica que es privada, esto significa que esto esta escondido para el exterior (Y esto no es una API).

Por lo que hemos visto, espero que tengan un sentido mas amplio de lo que significa API, así como los usos mas comunes del termino hoy en dia.