¿Qué es una API? Explicación de las interfaces de programación de aplicaciones

API significa interfaz de programación de aplicaciones, un concepto que se aplica en todas partes, desde herramientas de línea de comandos hasta código Java empresarial y aplicaciones web Ruby on Rails. Una API es una forma de interactuar mediante programación con un componente o recurso de software independiente.

A menos que escriba cada línea de código desde cero, interactuará con componentes de software externos, cada uno con su propia API. Incluso si escribe algo completamente desde cero, una aplicación de software bien diseñada tendrá API internas para ayudar a organizar el código y hacer que los componentes sean más reutilizables. Y existen numerosas API públicas que le permiten aprovechar la funcionalidad desarrollada en otros lugares de la web.

¿Qué es una API?

Una API se define como una especificación de posibles interacciones con un componente de software. ¿Qué significa eso exactamente? Bueno, imagina que un automóvil fuera un componente de software. Su API incluiría información sobre lo que puede hacer: acelerar, frenar, encender la radio, etc. También incluiría información sobre cómo podría hacer que hiciera esas cosas. Por ejemplo, para acelerar, pisa el acelerador y empuja.

La API no tiene que explicar qué sucede dentro del motor cuando pisa el acelerador. Por eso, si aprendió a conducir un automóvil con motor de combustión interna, puede ponerse al volante de un automóvil eléctrico sin tener que aprender un conjunto completamente nuevo de habilidades. La información de qué y cómo se combina en la definición de API , que es abstracta y está separada del automóvil en sí.

Una cosa a tener en cuenta es que el nombre de algunas API se usa a menudo para referirse tanto a la especificación de las interacciones como al componente de software real con el que interactúa. La frase "API de Twitter", por ejemplo, no solo se refiere al conjunto de reglas para interactuar mediante programación con Twitter, sino que generalmente se entiende como aquello con lo que interactúas, como en "Estamos haciendo un análisis de los tweets que obtuvimos la API de Twitter ".

API como capa de abstracción

Cuando se trata de software, las API están literalmente en todas partes. Las API van de la mano de uno de los conceptos más fundamentales en informática: la abstracción. La abstracción es solo una forma de organizar la complejidad de un sistema para que las acciones complicadas se puedan manejar de una manera simple. Piense en esta abstracción como esos Amazon Dash Buttons, las placas de circuito de botón pulsador que funcionan con baterías que puede usar para pedir grapas de Amazon. Esto es lo que parecen:

Solicita un Dash Button de Amazon y usa una aplicación en su teléfono inteligente para asociarlo con su red Wi-Fi, su cuenta de Amazon y un producto, digamos, su marca favorita de toallas de papel. Luego, cuando quiera pedir más toallas de papel, simplemente presione el botón. El botón Dash se conecta a Internet y envía un mensaje para realizar un pedido en su cuenta. Unos días después, las toallas de papel llegan a su puerta.

Como una API, Dash Button es una interfaz maravillosamente simple que oculta todo tipo de complejidad detrás de escena. El ID del producto que solicitó debe obtenerse de alguna base de datos. Su dirección de entrega debe extraerse de su cuenta. Se debe determinar el centro logístico más cercano que almacena sus toallas de papel, luego se debe notificar que retire un artículo del stock disponible y lo empaque. Finalmente, el paquete debe enrutarse a través de alguna combinación de aviones, camiones y camionetas junto con otros paquetes de manera que se asegure que todos los paquetes lleguen a sus destinos de manera eficiente.

Ahora imagine que tiene que coordinar todas estas cosas como cliente. Nunca pediría toallas de papel porque es demasiado complicado y requiere mucho tiempo y tiene mejores cosas que hacer. Afortunadamente, toda la terrible experiencia se abstrae de ti. Existe una cadena larga e interconectada de sistemas informáticos y procesos humanos que hacen que esas toallas de papel aparezcan en la puerta de su casa, pero todo lo que tiene que pensar es presionar un botón.

Así son las API para los programadores. Toman una gran cantidad de complejidad y definen un conjunto relativamente simple de interacciones que puede utilizar en lugar de hacerlo todo usted mismo. En cualquier proyecto de software, es probable que esté utilizando decenas, si no cientos, de API directamente, y cada una de esas API se basa en otras API y así sucesivamente.

API públicas e integración de API

Las API son un concepto de larga data en la programación de computadoras y han sido parte de los conjuntos de herramientas de los desarrolladores durante años. Tradicionalmente, las API se usaban para conectar componentes de código que se ejecutaban en la misma máquina. Con el auge de las redes ubicuas, se encuentran disponibles más y más API públicas, a veces llamadas API abiertas . Las API públicas están orientadas hacia el exterior y son accesibles a través de Internet, lo que le permite escribir código que interactúa con el código de otros proveedores en línea; este proceso se conoce como integración API.

Este tipo de mashups de código permiten a los usuarios mezclar y combinar funcionalidades de diferentes proveedores en sus propios sistemas. Por ejemplo, si utiliza el software de automatización de marketing Marketo, puede sincronizar sus datos allí con la funcionalidad de Salesforce CRM.

“Abierto” o “público” no debe interpretarse en el sentido de “sin cargo” en este contexto. Aún debe ser cliente de Marketo y Salesforce para que esto funcione. Pero la disponibilidad de estas API hace que la integración sea un proceso mucho más simple de lo que sería de otra manera. ( tiene una gran lista de API públicas que debe conocer).

Servicios web y API

Quizás recuerde el término servicios web de principios de la década del 2000 y piense que la idea de una API abierta suena bastante similar. De hecho, un servicio web es un tipo específico de API abierta, que cumple con un conjunto bastante rígido de especificaciones, incluido el que se especifique en el Lenguaje de descripción de servicios web (WSDL), una variante XML.

Los servicios web estaban destinados a ser utilizados como parte de una arquitectura orientada a servicios (SOA). Como explica el blog de las API nórdicas, eso le dio a los servicios web una mala reputación, ya que las SOA nunca alcanzaron su potencial. Los avances en las técnicas utilizadas para las comunicaciones de servicio a servicio, notablemente REST más liviano y flexible, también han dejado a los servicios web algo atrás en el mundo de las API públicas.

API REST

Los servicios web se diseñaron originalmente para comunicarse mediante SOAP (Protocolo simple de acceso a objetos), un protocolo de mensajería que envía documentos XML a través de HTTP. Sin embargo, hoy en día, la mayoría de las API basadas en web utilizan REST (Representational State Transfer) como estilo arquitectónico.

REST fue presentado formalmente por Roy Fielding en su tesis doctoral en 2000. Es un conjunto de componentes arquitectónicos, principios de diseño e interacciones que se utilizan para construir sistemas distribuidos que involucran medios de cualquier tipo (texto, video, etc.). En esencia, REST es un estilo de sistemas de construcción que permite la comunicación flexible y la visualización de información en la web al tiempo que proporciona la estructura necesaria para construir fácilmente componentes de propósito general.

En una API REST, un recurso podría ser prácticamente cualquier cosa, pero los ejemplos incluyen un usuario, una lista de tweets y los resultados actuales de una búsqueda de tweets. Cada uno de estos recursos es direccionable en un identificador de recurso , que en el caso de las API REST basadas en web suele ser una URL, como //api.twitter.com/1.1/users/show?screen_name=twitterdev. Cuando una aplicación solicita un recurso usando el identificador, la API entrega la representación actual de ese recurso a la aplicación en un formato que la aplicación puede consumir, como una imagen JPEG, una página HTML o JSON.

Uno de los grandes diferenciadores de REST es que implica enviar datos a la aplicación solicitante. Si bien esto proporciona una gran flexibilidad, lo que permite que la aplicación haga lo que quiera con los datos, tiene un costo de eficiencia. Enviar datos a través de la web para su procesamiento es bastante lento en comparación con realizar el procesamiento donde residen los datos y luego enviar los resultados.

Por supuesto, el problema con el enfoque "eficiente" es que los sistemas que alojan los datos necesitarían saber qué aplicaciones quieren hacer con ellos con anticipación. Por lo tanto, para construir una API que tenga usabilidad y flexibilidad de propósito general, REST es el camino a seguir.

Ejemplos de API

Hay muchas API públicas con las que puede interactuar, muchas de ellas gigantes de la industria. La capacidad de acceder al código de alguna empresa de plataforma mediante programación a través de una API es lo que las convierte en una plataforma, en esencia. Algunos ejemplos destacados de API incluyen:

  • API de Google , que le permiten conectar su código a toda la gama de servicios de Google, desde Maps hasta Translate. Las API son tan importantes para Google que adquirieron Apigee, una plataforma de gestión de API líder.
  • API de Facebook , que le permiten acceder mediante programación a las herramientas de marketing y gráficos sociales de Facebook. (La compañía ha estado restringiendo a qué datos de usuario puede acceder a través de estas API en las consecuencias de Cambridge Analytica y otros escándalos).

Para tener una idea real de cómo funcionan las API, profundicemos en dos: la API de Java, que los desarrolladores de Java utilizan para interactuar con la plataforma Java, y la API de Twitter, una API pública que usaría para interactuar con las redes sociales. servicio de networking.

La API de Java

La API de Java es una biblioteca de componentes de software disponible "lista para usar" para cualquiera que haya instalado el Kit de desarrollo de Java. Estos componentes implementan tareas comunes y generalmente aumentan la productividad porque los programadores no tienen que comenzar desde cero cada vez. Uno de los componentes básicos que se utilizan en el software es algo llamado Lista, que, como es de esperar, realiza un seguimiento de una lista de elementos. La API de Java define lo que puede hacer con una lista: agregar elementos, ordenar la lista, determinar si un elemento está en la lista, etc. También especifica cómo realizar esas acciones. Para ordenar la Lista, debe especificar cómo desea ordenar la Lista: alfabéticamente, numéricamente descendente, de color más brillante a más apagado, etc.

La API de Twitter

La API de Twitter es una API JSON basada en web que permite a los desarrolladores interactuar mediante programación con los datos de Twitter. A diferencia de la API de Java, que se incluye en el kit de desarrollo de Java, la API de Twitter es una API basada en web. Se debe acceder mediante solicitudes a través de Internet a los servicios que aloja Twitter.

Con una API basada en web como la de Twitter, su aplicación envía una solicitud HTTP, al igual que lo hace un navegador web. Pero en lugar de que la respuesta se entregue como una página web, para la comprensión humana, se devuelve en un formato que las aplicaciones pueden analizar fácilmente. Existen varios formatos para este propósito, y Twitter usa un formato popular y fácil de usar llamado JSON. (Si no está familiarizado con JSON, es posible que desee dedicar unos minutos a leerlo aquí).

Uno de los elementos básicos de Twitter es un tweet. La API de Twitter le dice lo que puede hacer con los tweets: buscar tweets, crear un tweet, marcar como favorito un tweet. También le indica cómo realizar estas acciones. Para buscar tweets, debe especificar sus criterios de búsqueda: términos o hashtags a buscar, geolocalización, idioma, etc.

Diseño de API

El diseño de API es el proceso mediante el cual se formulan el "qué" y el "cómo" de una API. Al igual que con cualquier otra cosa que se pueda crear, se ponen diferentes niveles de pensamiento y cuidado en el diseño de la API, lo que resulta en diferentes niveles de calidad de la API. Las API bien diseñadas tienen un comportamiento coherente, tienen en cuenta su contexto y tienen en cuenta las necesidades de sus usuarios.

El comportamiento constante dentro de una API tiene un gran impacto en la velocidad a la que se puede aprender y en la probabilidad de que los programadores cometan errores al usarla. Generalmente, las API que realizan acciones similares deben comportarse de manera similar, independientemente de sus diferencias técnicas. Para ver un ejemplo de una API inconsistente, veamos las dos formas de agregar un elemento a una lista en Java:

Aunque los dos métodos para agregar elementos a una lista hacen lo mismo, sus tipos de retorno (booleano y vacío) son diferentes. Los desarrolladores que usan esta API ahora deben realizar un seguimiento de qué método devuelve qué tipo, lo que hace que la API sea más difícil de aprender y su uso sea más propenso a errores. También significa que el código que usa estos métodos se vuelve menos flexible, porque tiene que cambiar si desea cambiar la forma en que agrega elementos.

Tener en cuenta el contexto es otra forma de coherencia, aunque tiene que ver con factores externos a la API. Un gran ejemplo de esto, que no es software, es cómo la regla de la carretera (tráfico por la derecha o por la izquierda) influye en los diseños de automóviles para diferentes países. Los diseñadores de automóviles toman en cuenta ese factor ambiental al ubicar el asiento del conductor en el lado derecho o izquierdo del automóvil.