Estoy escribiendo una aplicación react-redux. Al principio, llama a un punto final único, que devuelve una buena cantidad de datos como un JSON muy anidado. Luego lo normalizo y lo pongo en mi esquema redux-orm.
Me parece una tontería crear los datos anidados en el backend solo para recorrer los datos anidados en el frontend para normalizarlos, considerando que provienen de una base de datos PostgreSQL normalizada.
Database = Normalized --> API = Denormalized --> Frontend = Normalized¿Es una buena práctica simplemente enviar una respuesta API normalizada?
No estoy seguro de que haya una "buena" manera de hacerlo. Si tiene que lidiar con una API existente, hágalo y use proxy/analizadores en su código de interfaz para mapear su carga útil de back-end en su tienda redux-orm, y en el otro lado también.
No pretendo dar aquí una respuesta, sino una retroalimentación, después de casi un año de producción de nuestra aplicación React/Redux/Redux-orm Wisembly Jam .
Cuando comenzamos desde cero, elegimos usar la especificación JsonAPI para nuestra API. Nos gustó eso, ya que expuso objetos y relaciones de una manera que encajaba bien con nuestro esquema PostgreSQL, y también con nuestro esquema redux-orm.
De esa manera, no se necesita anidar la relación del modelo en ambos sentidos, solo los objetos simples se manejan en el campo de data , las relaciones included . Parecía funcionar muy bien juntos.
Puede inspeccionar la pestaña Red de nuestra aplicación para ver nuestras respuestas de carga útil de API, y también nuestra tienda redux-orm (usando la extensión Redux Chrome).
Espero que haya ayudado un poco, a pesar de mi inglés y de no ser una respuesta adecuada :)
Eso puede ayudar; como dijiste, se recomienda tener datos normalizados en estado: https://redux.js.org/faq/organizing-state#how-do-i-organize-nested-or-duplicate-data-in-my-state
Si aún desea enviar datos anidados desde la API, por ejemplo, para enviar solo lo que se necesita o si es una API existente, puede normalizar en el lado del cliente antes de agregar los datos a la tienda. Por ejemplo, con esta biblioteca: https://redux.js.org/faq/organizing-state#how-do-i-organize-nested-or-duplicate-data-in-my-state
No entiendo por qué alguien normalizaría en el frente. La única razón por la que hago la normalización es para deshacerme de la repetición. En lugar de enviar los mismos datos anidados, digamos objeto de usuario, varias veces, anido la identificación del usuario y en una propiedad separada llamada "usuarios", enviaría a todos los usuarios necesarios con sus identificaciones como claves para un acceso rápido y fácil de la siguiente manera :
"users": { "1": { "id": "1", "name": "user_name", ...rest_of_user_details}, ... }Después de todo, es más fácil para el frente manejar datos no normalizados. Se necesita menos código para enumerar los datos con objetos anidados tal como están en lugar de acceder a esos objetos dentro de otras propiedades usando los identificadores de objeto.