En una aplicación principal REST API que cubre varios dominios relacionados, ¿tiene más sentido dividir los recursos en 'áreas' en función del dominio empresarial al que pertenecen o es mejor mantener un solo modelo?
Por ejemplo, hay subdominios de 'Ventas' e 'Inventario'. Los usuarios del sistema generalmente solo se preocupan por un dominio a la vez, pero son posibles las excepciones. Existe un concepto de "elemento" en ambos dominios para que podamos implementar el recurso "elemento" de dos maneras diferentes.
tener diferentes recursos para representar el concepto en cada dominio, cada recurso contiene solo los datos relevantes:
/ sales / items /: id
/ inventario / artículos /: id
tener un único recurso con todos los datos que se utilizarán en todos los contextos:
/ items /: id
También hay muchos recursos que solo pertenecen a uno de los dominios.
pros de 'áreas'
- La API es más fácil de entender para los usuarios que solo se preocupan por un solo dominio
- Recursos más fáciles de implementar (menos cosas para leer / actualizar a la vez)
- los recursos pueden ser más especializados / optimizados para cada dominio en particular
- capacidad de controlar el acceso a los recursos a un nivel más granular
Ventajas de un solo modelo unificado
- sin recursos duplicados para conceptos que pertenecen a más de un dominio
- Si un usuario necesita trabajar con múltiples dominios, solo tendrá que usar una única API que cubra todas sus necesidades
¿Es la partición API como se describió anteriormente una forma válida de reducir la complejidad tanto del contrato API como de la implementación? No lo he visto mencionar mucho en ningún lado.
¿Hay más cosas que deben considerarse para tomar una decisión a favor de cualquiera de los enfoques?
fuente
Creo que la regla general debería ser la siguiente.
Si un artículo en sí mismo es impensable sin estar relacionado con las ventas o el inventario, debe optar por la opción 1.
Si un artículo puede existir sin ninguna relación con las ventas / inventario o si esta relación no es realmente sólida en su arquitectura, puede optar por la opción 2.
fuente