Лучше ли отправить обратно нормализованный или денормализованный ответ API для приложений React+Redux
Я пишу приложение "Реакция-Избыток". В начале он вызывает одну конечную точку, которая возвращает хороший объем данных в виде сильно вложенного JSON. Затем я нормализую его и добавлю в мою схему приставки.
Мне кажется глупым создавать вложенные данные на бэкэнде, чтобы просто перебирать вложенные данные на внешнем интерфейсе для его нормализации, учитывая, что они поступают из нормализованной базы данных PostgreSQL.
Database = Normalized -->
API = Denormalized -->
Frontend = Normalized
Лучше ли просто отправлять обратно нормализованный ответ API?
1 ответ
Это поможет; как вы сказали, рекомендуется иметь нормализованные данные в состоянии: https://redux.js.org/faq/organizing-state
Если вы по-прежнему хотите отправлять вложенные данные из API, например, чтобы отправлять только то, что необходимо, или если это уже существующий API, вы можете выполнить нормализацию на стороне клиента перед добавлением данных в хранилище. Например, с этой библиотекой: https://redux.js.org/faq/organizing-state
Я не уверен, что есть "хороший" способ сделать это. Если вам приходится иметь дело с существующим API, то разберитесь с ним и используйте прокси / парсеры в своем коде внешнего интерфейса, чтобы сопоставить полезную нагрузку бэкэнда с вашим магазином redux-orm, а также с другой стороны.
Здесь я не буду претендовать на ответ, а скорее на обратную связь после почти года выпуска нашего приложения Wactmbly Jam для React / Redux / Redux- orm.
Когда мы начинали с нуля, мы решили использовать спецификацию JsonAPI для нашего API. Нам понравилось это, поскольку оно раскрывало объекты и отношения таким образом, чтобы это подходило как для нашей схемы PostgreSQL, так и для нашей схемы redux-orm.
Таким образом, вложение модельных отношений не требовалось в обоих направлениях, только простые объекты обрабатывались в data
поле, включая отношения в included
поле. Оказалось, очень хорошо работать вместе.
Вы можете проверить вкладку "Сеть" нашего приложения, чтобы посмотреть ответы наших полезных нагрузок API, а также наше хранилище redux-orm (с использованием расширения Redux Chrome).
Надеюсь, что это немного помогло, несмотря на мой английский и не быть должным образом ответ:)
Я не понимаю, зачем кому-то нормализоваться на фронте. Я делаю нормализацию только для того, чтобы избавиться от повторений. Вместо того, чтобы отправлять одни и те же вложенные данные, скажем, объект пользователя, несколько раз, я вкладываю идентификатор пользователя и в отдельное свойство под названием "пользователи", я бы отправил всех необходимых пользователей с их идентификаторами в качестве ключей для быстрого и легкого доступа следующим образом:
"users": {
"1": { "id": "1", "name": "user_name", ...rest_of_user_details},
...
}
В конце концов, фронту легче иметь дело с ненормализованными данными. Требуется меньше кода, чтобы просто перечислить данные с вложенными объектами как есть, а не обращаться к этим объектам внутри других свойств с помощью идентификаторов объектов.