Header Ads Widget

Ticker

6/recent/ticker-posts

Estrategias para la gestión de dependencias de API

 


Cada vez es menos común que una aplicación o un producto digital consuma una única API. Es muy probable que consuma API para todo tipo de habilidades. Para complicar aún más las cosas, cada una de esas API tendrá diferentes permisos y niveles de seguridad. Tratar de recordar cuáles son cuáles con el equivalente de notas adhesivas alrededor de su monitor rápidamente se volverá insostenible. Los desarrolladores deben tener un sistema para realizar un seguimiento de todos estos detalles si esperan que el consumo de API sea escalable en toda la empresa.

Una dependencia es cualquier cosa externa que una aplicación necesita para funcionar. Supongamos que está creando una aplicación de mensajería y desea agregar una capa de privacidad y seguridad, por lo que introduce una capa de cifrado. Esa capa de cifrado sería una dependencia, ya que su aplicación la necesita para funcionar.

Los diferentes aspectos de la gestión de dependencias para sus API y proyectos relacionados con API se incluyen en la gestión de dependencias, un sector de rápido crecimiento del ecosistema de desarrollo actual.

La gestión de la dependencia consta de tres etapas:

  1. Identificando dependencias
  2. Resolviendo dependencias
  3. Parches de dependencias

Echemos un vistazo a cómo funciona la gestión de dependencias con las API.

Gestión de dependencias para API

Para ayudarlo a comprender la administración de dependencias para API, comencemos por mirar Gradle , un marco de código abierto creado específicamente para este propósito. Con Gradle, podría manejar las dependencias en sus proyectos de desarrollo o podría implementar un enfoque similar en su pila.

Identificar dependencias

El primer paso para administrar las dependencias de sus API y proyectos relacionados es saber cuáles son esas dependencias. Para empezar, consulte este gráfico de dependencia de una aplicación de reloj de ajedrez :

Crédito: Niklas Baudy

La gestión de la dependencia es tanto una filosofía como una disciplina técnica. Si bien las herramientas dedicadas de administración de dependencias automatizarán muchos de estos procesos por usted, también es bueno saber cómo pensar en ellos. De esa manera, puede implementar estas prácticas en cualquier entorno que esté utilizando.

La etapa de Identificación de Dependencias nos recuerda que, a veces, una pizarra puede ser la herramienta más poderosa de un programador. Para cada proyecto relacionado con API en el que esté trabajando, debe controlar todas las dependencias que necesita para funcionar, incluidas las API y bibliotecas de terceros .

Si termina usando Gradle o alguna otra solución de administración de dependencias, todas las dependencias se enumerarán automáticamente para todos sus proyectos en un formato de árbol:

Crédito: documentación de Gradle

Mirar estos árboles de dependencia también lo ayudará a tener la mentalidad de visualizar todas las diversas dependencias que ocurren dentro de sus proyectos de desarrollo.

Resolución de dependencias

El siguiente paso para administrar dependencias en Gradle es verificar las resoluciones. Esto se puede personalizar de varias formas, pero el concepto básico es simplemente una lista de verificación de "sí" o "no". Esta etapa durará hasta que se hayan aprobado todas las dependencias.

Por supuesto, esto puede complicarse mucho más, dependiendo de la complejidad de su API o proyecto que consume API. Supongamos que tiene diferentes versiones de su aplicación, que pueden usar varias API de terceros. Es posible que tenga una etapa de resolución diferente para cada iteración, que es un ejemplo de cómo la gestión de dependencias para API puede interactuar con otras prácticas, como el control de versiones de API . En Gradle, también puede crear esquemas de control de versiones personalizados. Puede establecer las dependencias actuales como predeterminadas y luego crear rutas de versiones personalizadas para iteraciones anteriores. Un ejemplo de cómo podría verse esto, en la práctica, se puede ver aquí en la documentación de Gradle:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.version == 'default') {
            def version = findDefaultVersionInCatalog(details.requested.group, details.requested.name)
            details.useVersion version.version
            details.because version.because
        }
    }
}

def findDefaultVersionInCatalog(String group, String name) {
    //some custom logic that resolves the default version into a specific version
    [version: "1.0", because: 'tested by QA']
}

Otros problemas potenciales con los que podría encontrarse podrían incluir depender de API desactualizadas . Puede incluir un redireccionamiento HTTP para ciertos activos que apunten a la versión actualizada para que sus usuarios puedan actualizar sus proyectos.

Parcheo de dependencias

La gestión de la dependencia no sería tan importante si las cosas no se estropearan. Parchear las dependencias es crucial, ya que significa que aún podrá automatizar las tareas que consumen o monitorean las API. Los parches también lo ayudan a deducir si se trata de un problema con la API, la aplicación o la conexión, lo que también lo ayudará durante la depuración.

Agregar un parche crea una capa de abstracción útil entre su código y una API. Esto hace que sea mucho más difícil romper una aplicación o API si algo cambia. También significa que si algo hace el cambio, después, sólo tendrá que cambiar algunas referencias en lugar de cada llamada a la API única en su código. En lo que respecta a las API, una de las formas más comunes de crear un parche es utilizando un contenedor de API . Un contenedor de API consolida varias funciones de API en una, lo que hace necesarias menos llamadas.

Con respecto a las dependencias, se ha establecido desde hace mucho tiempo que envolver una dependencia es una de las mejores prácticas por varias razones. Para los desarrolladores de API, usar un contenedor de API significa que no necesita alertar a sus consumidores de API cada vez que cambia su código.

Hay muchos recursos sobre cómo escribir un contenedor de API. Si desea probarlo usted mismo, aquí hay una publicación excelente y concisa sobre cómo escribir un contenedor de API en Python y C # . Esto le muestra cómo crear un contenedor de API simple que le permite saber la ubicación actual de la Estación Espacial Internacional, quién está a bordo y cuándo será la próxima vez que pase por una determinada ubicación.

Documentar las dependencias de API en definiciones de API

En Gradle, las dependencias de la API se especifican en la propia API. Cada etapa de un proyecto de Gradle tiene sus propias dependencias, que se definen en una función de configuración . Las configuraciones ofrecen una serie de procesos detallados que se pueden mostrar en una serie de API .

Definir las dependencias de API en el código en sí es beneficioso para los creadores, consumidores y productores por igual. Para el creador de la API, le permite especificar qué dependencias deben satisfacerse. Para los consumidores, especifica qué dependencias deben resolverse. Para los productores, les permite crear una rica fuente de puntos finales valiosos para sus consumidores.

Este método también le permite especificar diferentes recursos para diferentes funciones. Puede exponer recursos específicos durante la fase de prueba, por ejemplo, mientras reserva la pila completa para el tiempo de ejecución. Gradle también ofrece una variedad casi infinita de diferentes formas de crear configuraciones personalizadas. Incluso puede incluir una razón por la que se puede denegar una determinada solicitud, que está escrita en el código mismo.

Por supuesto, Gradle no inventó el concepto de gestión de dependencias de API. Un desarrollador estaba escribiendo sobre esto en 2017 , utilizando una especificación de descubrimiento llamada Pivio . En Pivio, cada servicio contiene un objeto que define sus dependencias, llamado depends_onEn Pivio, eso se ve así:

"service": {
  "depends_on": {
    "internal": [
      "print-service",
      "gateway-service"
    ],
    "external": [
      {
        "why": "Need to sync data with it.",
        "transport_protocol": "tcp",
        "target": "https://api.superdealz.me:443",
        "via": "proxy-service"
      },
      {
        "why": "Get the latest Dealz.",
        "transport_protocol": "tcp",
        "target": "mqtt://192.xxx.xxx.xxx:5028"
      }
    ]
  }

Esta especificación le permite definir dependencias tanto internas como externas para cada servicio. También puede especificar dependencias manuales, que se almacenan en un dependencies.yamlarchivo separado .

Apache Maven también considera las dependencias de API. Apache Maven es una herramienta poderosa para la gestión y comprensión de proyectos, lo que también la convertiría en una buena opción para la gestión de dependencias de API. En Apache Maven, las dependencias de API simplemente se especifican en un punto final dedicado , que es una solución relativamente simple y elegante. También se especifican en un modelo de objeto de proyecto denominado pom.xml.

Sus objetivos también hablan de por qué la gestión de API es tan integral en el mundo del desarrollo actual:

  • Facilitando el proceso de construcción
  • Proporcionar un sistema de construcción uniforme
  • Proporcionar información de calidad sobre el proyecto
  • Fomentar mejores prácticas de desarrollo

Herramientas adicionales para verificar las dependencias de API

Muchas de las técnicas que mencionamos en este artículo tratan con API internas. Pero, la mayoría de las aplicaciones y proyectos relacionados con API involucran al menos algún tipo de API de terceros. ¿Cuáles son algunas formas en las que puede probar y verificar que las API de terceros estén funcionando como deberían? Hay algunas herramientas dedicadas que puede trabajar en su pila de desarrollo que lo ayudarán en este sentido.

Postman Collections es una forma particularmente elegante y útil de garantizar que las API funcionen según lo previsto. Postman Collections le permite realizar un seguimiento de sus solicitudes y comandos de API, que se pueden almacenar en carpetas conocidas como 'colecciones'. No es una solución completa, pero le permite mantener toda la información de sus llamadas API en un solo lugar, lo que es mucho mejor desde el punto de vista de la limpieza. También se presta a las pruebas de API, que de todos modos es un componente de la gestión de dependencias de API. Aún mejor, es fácil compartir y reutilizar colecciones, lo que significa que puede usar su colección de API en un entorno similar a un microservicio. También es fácil compartir colecciones con otras personas usando Postman, ya que puede exportar fácilmente su carpeta de colección.

Algunas soluciones de monitoreo de API también podrían ajustarse a la factura. Estas herramientas le permiten hacer ping a una API y asegurarse de que esté funcionando como debería. Hay APIMetrics , para empezar, que ofrece una solución de monitoreo completa. API Expert también proporciona una descripción general del rendimiento de las API comunes. Ambos incluyen paneles de control detallados también. Estos dos pueden ser excesivos para alguien que busca una herramienta de verificación de API simple. Aún así, podrían ser una buena opción si ha estado buscando un control de API o un panel de visualización.

Algunas herramientas de prueba de API también ofrecen la capacidad de probar API de terceros como parte de un entorno CI / CD. API Fortress , por ejemplo, es un recurso particularmente extenso que le permite probar API de forma masiva, además de ofrecer una serie de otras funciones útiles para las pruebas de API.

Finalmente, si desea una solución que lo haga todo, Moesif puede ser una buena opción . Moesif es también un potente y detallado sistema de gestión y supervisión de API. Ofrece de todo, desde registros extensos de llamadas API recientes hasta monitoreo del rendimiento y el uso.

Cualquiera de estas soluciones es más que adecuada para probar cualquier API de terceros y, para empezar, automatizar el proceso. Tenga en cuenta que cada una de las soluciones mencionadas en esta sección puede costar dinero, pero cada una ofrece al menos un período de prueba, si no una capa gratuita completa, para que pueda probarlas usted mismo y ver si son adecuadas.

Si ya tiene implementada una solución de prueba o monitoreo de API, estas pueden ser un poco exageradas. Pero si necesita recursos de API adicionales y la capacidad de probar sus dependencias de API de terceros, ¡esta podría ser una buena opción!

Aplicación de los principios de gestión de dependencias a las API

La integración de algunos de estos principios en su propio proceso de desarrollo lo ayudará a comprender y visualizar mejor las dependencias de API en sus proyectos y en toda su organización. También puede optimizar en gran medida los procesos comunes de uso intensivo de API, como las pruebas, el monitoreo y la seguridad de API, al tiempo que brinda una experiencia más fluida para sus clientes y consumidores al mismo tiempo.

Terminaremos con una nota alta, con una ventaja final de tomarse el tiempo para comprender las dependencias de API. Estos mismos principios también se pueden aplicar a otros estilos de desarrollo. Las dependencias son una parte importante de los microservicios, por ejemplo, y el seguimiento de dichas dependencias podría ayudar a informar a los desarrolladores cuándo no utilizar las API. Una cosa que debe recordar es que cada llamada a la API agregará tiempo de procesamiento a su producto final. Si ciertos archivos se utilizan de forma habitual y extensa, puede ser mejor alojarlos como archivos locales para reducir al mínimo el tiempo de procesamiento. Puede usar esto como parte de su solución para el control de versiones, el empaquetado de API y probablemente muchas otras aplicaciones para nombrar.


Publicar un comentario

0 Comentarios