Skip to content

Comments

HTTP client#161

Open
SmorodinVik wants to merge 51 commits intomasterfrom
feature/http-client
Open

HTTP client#161
SmorodinVik wants to merge 51 commits intomasterfrom
feature/http-client

Conversation

@SmorodinVik
Copy link
Contributor

@SmorodinVik SmorodinVik commented May 28, 2025

На основании изучения наших проектов, я выделил список того что нам нужно от базового клиента:

✅1. Запросы get, post, patch, put, delete
✅2. Возможность задания базовых настроек (baseUrl, headers, timeout и т.д.)
✅3. Возможность встраивать вызов функции перед запросами и после запроса (аналог интерцепторов)
✅4. Отменяемые запросы
✅5. Типизация возвращаемых ответов и ошибок
✅6. Возможность передавать объект с параметрами запроса которые преобразуются в query params и добавляются к урлу
✅7. Создание запросов по паттерну "строитель"

@@ -0,0 +1,22 @@
export type TValueOrGetter<T> = T extends Function ? never : T | (() => T);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем этот сервис? Работа с токенами должна быть в другом пакете

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

еще не выпилил


const httpClientInstance = new AxiosHttpClient({ baseURL: baseUrl });

const response = await httpClientInstance
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Симпатично.

@sadcitizen
Copy link
Member

Нужно пакет везде переименовать по коду.

@sadcitizen
Copy link
Member

Зачем папка temporary?

@SmorodinVik
Copy link
Contributor Author

temporary - это временная помойка из файлов Дениса из которых я забрал все полезное, плюс код обновления токенов который надо вынести оттуда отдельно

@tolms
Copy link
Contributor

tolms commented Jun 5, 2025

Возможен 2 вариант использования: создать экземпляр запроса, и его уже использовать при каждом обращении
Например:

    // создаем конкретный экземпляр
    const fetchSomethingRequest = httpClient
        .post()
        .url('/get-some-data')
        .headers({ Authorization: 'Bearer token'});

    // добавляем данные в экземпляр и отправляем запрос
    const fetchSomething = async (dto: IDto, signal: string): Promise<IResponse> => await fetchSomethingRequest
        .body(dto)
        .params({ id: 123 })
        .abortSignal(signal)
        .send()
        .then(res => res.data);

В таком случае возможно нужно сбрасывать предыдущие праметры (params), хедеры (headers) и body перезаписать

@SmorodinVik
Copy link
Contributor Author

Возможен 2 вариант использования: создать экземпляр запроса, и его уже использовать при каждом обращении Например:

    // создаем конкретный экземпляр
    const fetchSomethingRequest = httpClient
        .post()
        .url('/get-some-data')
        .headers({ Authorization: 'Bearer token'});

    // добавляем данные в экземпляр и отправляем запрос
    const fetchSomething = async (dto: IDto, signal: string): Promise<IResponse> => await fetchSomethingRequest
        .body(dto)
        .params({ id: 123 })
        .abortSignal(signal)
        .send()
        .then(res => res.data);

В таком случае возможно нужно сбрасывать предыдущие праметры (params), хедеры (headers) и body перезаписать

Тут встает проблема, что методы экземпляра запроса мы можем использовать по несколько раз и независимо от тогда как работает метод - расширяет или переписывает значение (хедера, параметра, боди и тд), мы теряем контроль над значениями параметров экземпляра, так как каждый вызов запрос может их изменять.
Потому такое надо использовать с осторожностью

@SmorodinVik SmorodinVik marked this pull request as ready for review June 10, 2025 15:41
@SmorodinVik SmorodinVik requested a review from sadcitizen June 10, 2025 15:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants