Код: Выделить всё
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 в моей функции преобразователя, и все снова работает нормально.
Это также помогает, когда мой API имеет другую структуру данных, и мне нужна другая структура для моих компонентов.
Другой сценарий заключается в том, что мне нужно создать функцию преобразователя для каждой конечной точки API, из которой я извлекаю данные. И я также не уверен, буду ли я использовать одну и ту же структуру данных для разных компонентов, которые зависят от одних и тех же данных API.
В приведенном выше примере всякий раз, когда обновляется тип ответа API, реквизиты компонента также обновляются, и мне просто нужно обновить имена свойств, которые изменились в определении компонента, и он снова начинает работать. Но мне нужно обновить имена этих свойств во всех компонентах, которые используют данные из этого API. Но если у меня настроены функции преобразователя и если структура ответа API полностью изменится, мне также придется обновить определение компонента и функцию преобразователя. Но, возможно, мне придется делать это независимо от того, какой вариант я выберу, потому что это могут быть изменения в требованиях компонента, этого API или бизнес-логики.
Если я буду хранить типы свойств компонента отдельно от типов ответов API, тогда это будет правильная абстракция, означающая, что компонент будет независим от того, что API возвращает в качестве ответа. Ему просто нужны данные, и он их визуализирует. Не имеет значения, как компонент получает данные. Это задача функции преобразователя, которую мы для него создаем. Но мне нужно создать функции-трансформеры для всех этих API, и, как я уже сказал, я не уверен, буду ли я использовать одну и ту же структуру данных для всех компонентов, которые полагаются на один и тот же ответ API.
Я также не знаю, что делают крупные проекты и компании в этой ситуации.
Подробнее здесь: https://stackoverflow.com/questions/798 ... t-from-api
Мобильная версия