Должен ли я использовать функции преобразователя для данных, которые я получаю из API?Javascript

Форум по Javascript
Ответить
Anonymous
 Должен ли я использовать функции преобразователя для данных, которые я получаю из API?

Сообщение Anonymous »

У меня есть проект в Next JS, и я получаю данные из API с помощью запроса TanStack. Я также использую пакет openapi-typescript для автоматического создания типов ответов API из файла openapi.json. Я могу использовать эти типы в качестве свойств моего компонента и передавать данные из API непосредственно в мои компоненты без каких-либо изменений.

Код: Выделить всё

import { paths } from "@/types/generated/api.types.ts"

type UserAPIResponse = paths['/user']['get']['responses']['content']['application/json']

function getUser(): UserAPIResponse { /* data fetch login goes here */ }

function UserComponent({ user }: { user: UserAPIResponse }) {
return Username: {user.display_name} // suppose api response have display_name property
}
Но когда происходит какое-то изменение типа ответа от API, мне приходится обновлять каждый компонент, использующий эти данные. Поскольку я генерирую типы автоматически, он будет обновлять определения типов API и показывать мне ошибки в моей IDE, но мне также приходится отражать эти изменения в моих компонентах.
По этой причине я думал о создании функций-трансформеров, которые возвращают данные в той структуре, которая нужна моим компонентам. Поэтому всякий раз, когда происходят изменения в типах ответов API, мне не нужно менять имена переменных в каждом компоненте. Мне просто нужно изменить имя свойства ответа API в моей функции преобразователя, и все снова работает нормально.
Это также помогает, когда мой API имеет другую структуру данных, и мне нужна другая структура для моих компонентов.
Другой сценарий заключается в том, что мне нужно создать функцию преобразователя для каждой конечной точки API, из которой я извлекаю данные. И я также не уверен, буду ли я использовать одну и ту же структуру данных для разных компонентов, которые зависят от одних и тех же данных API.
В приведенном выше примере всякий раз, когда обновляется тип ответа API, реквизиты компонента также обновляются, и мне просто нужно обновить имена свойств, которые изменились в определении компонента, и он снова начинает работать. Но мне нужно обновить имена этих свойств во всех компонентах, которые используют данные из этого API. Но если у меня настроены функции преобразователя и если структура ответа API полностью изменится, мне также придется обновить определение компонента и функцию преобразователя. Но, возможно, мне придется делать это независимо от того, какой вариант я выберу, потому что это могут быть изменения в требованиях компонента, этого API или бизнес-логики.
Если я буду хранить типы свойств компонента отдельно от типов ответов API, тогда это будет правильная абстракция, означающая, что компонент будет независим от того, что API возвращает в качестве ответа. Ему просто нужны данные, и он их визуализирует. Не имеет значения, как компонент получает данные. Это задача функции преобразователя, которую мы для него создаем. Но мне нужно создать функции-трансформеры для всех этих API, и, как я уже сказал, я не уверен, буду ли я использовать одну и ту же структуру данных для всех компонентов, которые полагаются на один и тот же ответ API.
Я также не знаю, что делают крупные проекты и компании в этой ситуации.

Подробнее здесь: https://stackoverflow.com/questions/798 ... t-from-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»