¿Múltiples API o una API con un parámetro "selector"?

8

Supongamos que tiene un servicio web, que agrega lógica empresarial sobre una fuente de datos. El aspecto de cada API de este servicio es bastante: dado un conjunto de restricciones, dame los elementos de la fuente de datos que satisfacen estas restricciones. Puede decir que obtiene una "vista" de la fuente de datos desde la API.

Ahora, con el tiempo, se le pedirá que devuelva diferentes tipos de vistas sobre la fuente de datos. Tiene la opción de agregar nuevas API para cada vista "suficientemente distinta", o cambiar de marcha y proporcionar una API getFooDataView (), que toma un parámetro que especifica qué tipo de vista desea. Tienes varias presiones competitivas para decidir qué camino tomar:

  • El gran cliente existente de su servicio preferiría ser flojo y no tener que codificar hasta nuevas API cuando se necesiten nuevas vistas sobre los datos.
  • Pero, algunos de sus parámetros de solicitud (restricciones) solo tienen sentido para algunas vistas, y no para otras; tendría que hacer que su contrato de API sea más flexible al decir "bueno, si desea una vista XYZ, establecer el parámetro" foo "tendrá sin efecto ", con el desafortunado efecto secundario de que no puede hacer que" foo "sea un parámetro requerido, incluso si es así para algunas de las vistas.
  • Cada vez más, los nuevos clientes quieren aprovechar su servicio. No puede decidir cuál sería más confuso para ellos: tener que elegir entre API diferentes, pero más definidas, y una API donde tienen que saber qué combinación de parámetros realmente les da lo que quieren.

Para resumir esto, ¿cuándo trazas la línea de que algo debería ser su propia API en lugar de una variación de una API existente? Las diferentes personas con las que tiene que trabajar tienen diferentes puntos de vista sobre lo que hace que las solicitudes de dos clientes sean semánticamente distintas, por lo que puede ser difícil generar consenso sobre este asunto. También debe asegurarse de que su servicio no sea prohibitivamente difícil de consumir para futuros clientes. ¿Cuáles son algunas de las mejores prácticas para hacer este tipo de elección?

RuslanD
fuente

Respuestas:

4

Personalmente, me inclinaría hacia API más pequeñas y ajustadas. No creo que se deduzca que tener una API única para todos hace que algo sea más fácil de usar; de hecho, tal vez sea lo contrario, ya que debes encontrar la combinación correcta de "ju-ju" de tipo suelto para obtener lo que desea, mientras que una API más estricta puede hacerse más clara. Simplemente está ocultando la complejidad en lugar de hacerlo explícito.

También es probable que su única API se vuelva cada vez más compleja a medida que envuelve más y más funcionalidad, mientras que las API más estrictas permanecen enfocadas y esbeltas.

Esto huele al principio de segregación de interfaz en una escala mayor.

Siempre hay otras formas (como una buena orientación) para ayudar a los clientes a elegir el enfoque correcto.

James World
fuente
Estoy de acuerdo en principio, pero ¿cómo versionas tu API? A su manera, debe crear nuevas interfaces a medida que se agrega funcionalidad o adaptadores. A la manera del OP, simplemente puede agregar otro "comando" (a pesar de la magia mágica de eso). Es la API del OP la que será más estricta, más ágil y más enfocada, no la tuya.
Robert Harvey
1
No sigo tu razonamiento para la última oración por las razones que he dado. Para versionar, SomeApiVersion1y SomeApiVersion2... etc. funciona de maravilla. De esta manera, usted tiene control total sobre la migración y la degradación. Varias versiones sobre la misma interfaz se ven bien el día 1, pero pagará el precio durante mucho tiempo.
James World el
Sin duda, ese es un enfoque sensato, pero no hay forma posible de llamarlo estricto, delgado o enfocado. Terminas con una proliferación de interfaces y adaptadores.
Robert Harvey
2
Estoy llamando a cada API ajustada y centrada, no todo. Estoy diciendo que la complejidad de todo es constante, ya sea que tenga una API dividida o no, y que cada cliente solo tiene que asumir la complejidad que necesita con un enfoque dividido.
James World el
2
Mira, creo que es una ilusión (disculpas por un lenguaje fuerte). La complejidad sigue ahí, pero la acabas de ocultar. He visto que se manifiesta una y otra vez en una espiral de costos de mantenimiento. Es un camino de fuego seguro hacia una gran bola de arquitectura de barro.
James World el