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?
SomeApiVersion1
ySomeApiVersion2
... 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.