← Volver a la lista de posts

¿Qué es un API?

Un API (Application Programming Interface) es la interfaz que un software utiliza para interactuar con otro software. Empecemos con una analogía. Observa la siguiente lavadora:

Lavadora

Los botones, las perillas, el tambor y el dispensador exponen la funcionalidad que nos permite lavar la ropa.

Genial ¿no? Esta máquina soluciona un problema específico: lavar la ropa. Pero para poder usarla necesitas saber dónde ubicar la ropa, dónde echar el jabón y qué secuencia de botones oprimir para que lave.

Los botones, las perillas, el tambor y el dispensador son la interfaz del usuario, que es lo que te permite interactuar con la máquina. Estoy seguro que sabes cómo oprimir un botón o girar una perilla, pero igual necesitas aprender a utilizar la lavadora.

Piensa ahora en un automóvil. ¿Cuáles es su interfaz? ¿Qué necesitas aprender para manejar?

Lo realmente importante de estas interfaces es que nos permiten usar la lavadora o el automóvil sin conocer los detalles internos. Es lo que en computación llamamos una abstracción. Aunque es necesario aprender algo muy específico para lavar o conducir, es preferible a lavar la ropa a mano o caminar hasta el destino.

Los API’s son lo que hacen a la programación interesante. Por ejemplo, Android tiene un API que permite crear aplicaciones móviles con Java. Y a pesar de que he programado en Java por muchos años, tendría que estudiar el API de Android para construir algo interesante. ¿Cómo mostrar un botón en la pantalla? ¿Cómo prender la cámara y capturar video? ¿Cómo obtener la posición con el GPS?1

Eso significa que aprender a programar no es solo aprender a crear variables, condicionales, ciclos, etc. Esas son las bases que te van a permitir utilizar API’s para construir algo interesante.

Todos los lenguajes de programación traen un API que nos permite manipular archivos, crear aplicaciones concurrentes, utilizar la red y trabajar con colecciones (arreglos, mapas, conjuntos, etc.), entre otros. Busca el API de Ruby o el de Java para que te des una idea.

Los navegadores también tienen su propio API para JavaScript que nos permite manipular el código HTML/CSS, mostrar alertas, escuchar eventos (del mouse, teclado, etc.) y hacer llamados AJAX, entre otros. Hoy el API de los navegadores está casi estandarizado pero antes existían muchas diferencias entre navegadores, y por eso surgió jQuery, una librería con un API unificado y simple que “normaliza” esas diferencias.

Web API’s

Cuando estaba construyendo mi primera empresa, elibom.com, creía que lo más importante era la interfaz Web que le permitiría a los usuarios enviar mensajes de texto SMS desde el navegador. Pero rápidamente nos dimos cuenta que el potencial estaba en permitir que otras aplicaciones se conectaran a nuestro servicio para enviar, por ejemplo, alertas bancarias de forma automatizada sin necesidad de conocer cómo funciona la conexión y el enrutamiento de los mensajes a los operadores móviles.

Así aprendí la importancia y el potencial que tienen los API’s, pero en especial los Web API’s.

Un Web API es un API que se invoca a través del protocolo HTTP. La ventaja de usar HTTP es que es posible hacer peticiones desde cualquier lenguaje de programación, lo que hace a la Web un medio ideal para conectar aplicaciones.

Es posible encontrar Web API’s para casi cualquier cosa: conocer el estado del tiempo, las tasas de cambio, enviar emails, recibir pagos, entre miles de ejemplos más.

Muchos sitios y aplicaciones Web (Facebook, Twitter, Github, Trello, Google Maps, LinkedIn, Youtube, etc.) exponen gran parte de su funcionalidad a través de API’s permitiendo extender su funcionalidad en formas que ni los autores originales imaginaban (con el impacto positivo o negativo que eso implique).

Existen empresas exitosas que se dedican a integrar estos servicios como IFTTT o Zapier.

Mi teoría es que gran parte del éxito de Slack es su capacidad de integrarse con otras aplicaciones fácilmente. Nada de eso hubiese sido posible sin Web API’s.

¿Cómo funciona un Web API?

Cuando ingresas a una dirección Web (URL) desde un navegador, el navegador envía una petición HTTP al servidor, que responde con código HTML como se muestra en la siguiente ilustración:

Una petición HTTP

Una petición HTTP que retorna HTML.

Un Web API funciona muy parecido. Se hace una petición HTTP (generalmente desde algún lenguaje de programación), pero en vez de retornar una página HTML, el servidor retorna la información en una representación fácil de manipular en un lenguaje de programación.

Una petición HTTP

Una petición HTTP que retorna JSON.

A las URL's que reciben o retornan información de un Web API se les llama endpoints (solo para que conozcas la jerga que utilizan los programadores). En la imagen http://infinanza.com/api/v1/transactions es un endpoint.

En la imagen anterior, el servidor está retornando la información en una representación (formato) llamado JSON (JavaScript Object Notation). Hace algunos años el formato preferido entre los programadores para intercambiar información era XML (Extensible Markup Language) pero hoy JSON es mucho más popular. En los dos formatos se puede expresar lo mismo, pero JSON es mucho más simple.

Veamos cómo se podría representar la información de un vuelo con XML:

<flight>
  <airline>Oceanic</airline>
  <status>crashed</status>
  <departure>
    <iata>SYD</iata>
    <time>2004-09-22 14:55</time>
  </departure>
</flight>

Y ahora con JSON:

{
  "airline": "Oceanic",
  "status": "crashed",
  "departure": {
    "iata": "SYD",
    "time": "2004-09-22 14:55"
  }
}

Es la misma información, pero el formato JSON es mucho más simple.

¿Web API’s, REST API’s o Web Services?

Actualmente existe mucha confusión entre estos tres términos. Este es mi intento de explicar la diferencia.

REST API’s y Web Services son dos formas específicas de Web API’s.

Si este es tu primer acercamiento con este tema, mi recomendación es que te detengas en este punto porque ahora nos volvemos muy técnicos ;)

El nombre Web Services es muy desafortunado porque es muy genérico y crea confusión. La realidad es que Web Services es un grupo de tecnologías muy específicas para integrar aplicaciones utilizando XML y SOAP (Simple Object Access Protocol).

El siguente ejemplo muestra un llamado SOAP utilizando HTTP como transporte:

POST /usersWS HTTP/1.1
...

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

  <soap:Body xmlns:m="http://www.example.org/usersWS">
    <m:deleteUser>
      <m:userId>23</m:userId>
    </m:deleteUser>
  </soap:Body>

</soap:Envelope>

Ahora veamos un llamado HTTP equivalente utilizando un REST API:

DELETE /users/23 HTTP/1.1

Los REST API’s están ligados (altamente acoplados) al protocolo HTTP. La URL se usa para definir el recurso (en este caso el usuario con identificador 23) y el verbo HTTP para definir la acción que queremos hacer sobre ese recurso (en este caso eliminarlo). SOAP, por el contrario, siempre usa el verbo POST y toda la información viaja dentro del XML.

Muchos argumentan que es mejorar desligar (desacoplar) el llamado al API del protocolo por el que se transporta. Pero al estar ligado (acoplado) se simplifican los llamados como se puede ver en el ejemplo anterior.

Actualmente existe una iniciativa llamada JSON API, que es un Web API usando JSON pero desacoplado del protocolo HTTP.

Conclusión

Un API es la interfaz que un software utiliza para interactuar con otro software. Un Web API es un tipo especial de API que utiliza el protocolo HTTP como transporte.

Actualmente REST API es la forma más popular de Web API y está altamente acoplado a HTTP. Es por eso que es tan importante para un Web Developer aprender del protocolo HTTP.

Más información


Notas

  1. Seguramente la forma de empezar sería seguir algunos tutoriales y después consultar el API para crear aplicaciones diferentes. 

comments powered by Disqus