Diseñar una buena API es un arte. Se aprecia una buena API incluso después de que pase el tiempo. En mi opinión, no debería haber un sesgo general en la línea abstracta-concreta. Algunos parámetros pueden ser tan concretos como los días de la semana, algunos requieren estar diseñados para la extensibilidad (y es bastante estúpido hacerlos concretos, por ejemplo, parte de los nombres de funciones), y otros pueden ir aún más lejos y tener un estilo elegante. API one necesita proporcionar devoluciones de llamada o incluso un lenguaje específico de dominio ayudará a combatir la complejidad.
Raramente ocurren cosas nuevas bajo la Luna. Eche un vistazo a la técnica anterior, especialmente a los estándares y formatos establecidos (por ejemplo, muchas cosas se pueden modelar después de los feeds, las descripciones de los eventos se elaboraron en ical / vcal). Haga su API fácilmente aditiva, donde las entidades frecuentes y omnipresentes son concretas y las extensiones previstas son diccionarios. También hay algunos patrones bien establecidos para tratar situaciones específicas. Por ejemplo, el manejo de solicitudes HTTP (y similares) puede modelarse en la API con objetos de solicitud y respuesta.
Antes de diseñar API, haga una lluvia de ideas sobre aspectos, incluidos aquellos que no se incluirán, pero que debe tener en cuenta. Ejemplos de tales son lenguaje, dirección de escritura, codificación, localización, información de zona horaria y similares. Preste atención a los lugares donde pueden aparecer múltiples: use la lista, no un valor único para ellos. Por ejemplo, si está diseñando API para el sistema de videochat, su API será mucho más útil, si asume N participantes, no solo dos (aunque sus especificaciones en este momento son tales).
A veces, ser abstracto ayuda a reducir drásticamente la complejidad: incluso si diseña una calculadora para agregar solo 3 + 4, 2 + 2 y 7 + 6, puede ser mucho más sencillo implementar X + Y (con límites técnicamente posibles en X y Y, e incluye ADD (X, Y) a tu API en lugar de ADD_3_4 (), ADD_2_2 (), ...
Con todo, elegir una forma u otra es solo un detalle técnico. Su documentación debe describir casos de uso frecuente de manera concreta.
Independientemente de lo que haga en el lado de la estructura de datos, proporcione un campo para una versión de API.
En resumen, la API debe minimizar la complejidad cuando se trata con su software. Para apreciar la API, el nivel de complejidad expuesta debe ser adecuado. Decidir sobre la forma de la API depende mucho de la estabilidad del dominio del problema. Por lo tanto, debería haber alguna estimación en qué dirección crecerá el software y su API, porque esta información puede afectar la ecuación de complejidad. Además, el diseño de API está ahí para que la gente lo entienda. Si hay buenas tradiciones en el área de tecnología de software en la que se encuentra, trate de no desviarse mucho de ellas, ya que esto ayudará a comprender. Ten en cuenta para quién escribes. Los usuarios más avanzados apreciarán la generalidad y la flexibilidad, mientras que aquellos con menos experiencia pueden sentirse más cómodos con la concreción. Sin embargo, cuide a la mayoría de los usuarios de API allí,
Por el lado de la literatura, puedo recomendar a los principales programadores de "Beautiful Code" que expliquen cómo piensan. Por Andy Oram, Greg Wilson, ya que creo que la belleza se trata de percibir la optimización oculta (y la idoneidad para algún propósito).