Tenemos como 20-30 módulos / soluciones independientes. Cada uno de estos tiene entre 7 y 10 proyectos con diferentes clases, componentes, etc. Todos estos se utilizan internamente en nuestra empresa.
Nuestro problema es que cuando hacemos un cambio en un módulo, debemos asegurarnos de actualizar todos los demás módulos que acceden a este código. Esto es difícil de saber porque está en diferentes bases de código.
¿Cómo podemos documentar dónde están todos los usos externos de una API? ¿O de lo contrario evitará que pequeños cambios rompan otros módulos?
documentation
api
configuration-management
change-management
Matemáticas
fuente
fuente
Respuestas:
La solución más simple, IMO, es tener un número decente de pruebas automatizadas para cada producto. Cuando actualiza una biblioteca, ejecuta el conjunto de pruebas para cada producto. Si las pruebas fallan, entonces sabrá qué productos deben actualizarse.
fuente
Sugeriría que no intente documentar esto (al menos manualmente) ya que si requiere que las personas lo actualicen, requerirá un alto nivel de precisión para funcionar correctamente. Pero nunca obtendrá ese nivel de precisión porque agregar este tipo de documentación ... no sería divertido y nadie lo hará.
Algunas mejores opciones:
También puede considerar refactorizar lentamente las API para que no sean tan frágiles, pero espero que eso esté fuera del alcance de lo que razonablemente puede lograr si es un individuo y tiene más de 20 módulos de gran escala para trabajar.
fuente
En primer lugar, una API con usos externos no debería cambiar.
Como mencionó @BryanOakley, el uso de pruebas unitarias automatizadas es muy importante y salva vidas en tales situaciones. Más allá de eso, algunas sugerencias que pueden (o no, según la situación) ayudarlo
Muchos lenguajes (como Java y C #) ofrecen
Function/Method Overriding
. Los lenguajes como Python le ofrecen pasar (número ilimitado de) argumentos y argumentos de palabras clave a una función:Java:
Pitón
Muchos idiomas ofertas
public
,private
yprotected
métodos. Puede manejar la llamada de función en unapublic
función y hacer el trabajo enprivate/protected
funciones.En python, no existe una definición pública / privada para métodos y funciones, pero un guión bajo (
_
) indica que un método es privado y no debe usarse externamente. Las llamadas API externas se realizan mediante un método abierto al mundo exterior y todas las tareas se realizan en las llamadas funciones locales :Como dije, una definición de API que (también) es utilizada por aplicaciones externas no debería cambiar con tanta frecuencia. Puede buscar formas de hacer que sus funciones externas sean más flexibles para que pueda cambiar cómo funciona la API sin romper el estado actual.
fuente
Sugeriría que esto es imposible de saber.
Usted es responsable de los Componentes y sus Interfaces.
Usted no es responsable de nada y de todo lo que pueda hacer uso de ellos.
¿Respuesta corta? Pruebas
Escribir pruebas que ejerciten las interfaces publicadas. Vuelva a ejecutarlos cada vez que realice un cambio. Mientras las pruebas "Pasen", no has roto nada. Cuando una prueba se rompe (y lo hará) ya sea (a) encontrar y solucionar el problema o (b) si puede justificar el cambio como legítimo, luego vuelva a escribir la prueba para acomodarlo.
fuente
He visto y codificado API con números de versión en las rutas y / o nombres de funciones.
De esta manera, puede tener diferentes versiones de API disponibles: API completas y diferentes versiones de las funciones dentro de una API.
Esto pone el trabajo de mantener todas las versiones de API en el código para la API; no es necesario cambiar el código de otras aplicaciones que no sea para el que se produjo la nueva instalación de API.
Creo que esto es especialmente importante al escribir API que serán utilizadas por aplicaciones fuera de su organización.
Como ejemplo, aquí hay una muestra de código para enviar un SMS usando la api de bulksms:
http://developer.bulksms.com/eapi/code-samples/csharp/send_sms/
a partir de ahí está la línea:
donde el 2 y el 2.0 son números de versión de la API.
Como esta API está destinada a ser utilizada por muchos clientes de SMS masivos, un cambio en esta API podría romper muchas aplicaciones y hacer que el teléfono de soporte suene sin problemas.
fuente