Адаптер HTTP-клиентов Испытание курса: JS: Полиморфизм

В JavaScript для запросов по сети обычно используется один из HTTP-клиентов - fetch или axios. Они появились в разное время и имеют разные интерфейсы и форматы ответов. В этом упражнении нам предстоит разработать свой адаптер над этими клиентами. Его интерфейс будет от axios, а формат ответов от fetch.

Важно: решите это упражнение без использования классов

import createHttpClient from './src/index.js';

const httpClient = createHttpClient('axios');
// клиент создаётся как инстанс axios
const instance = httpClient({ baseURL: 'http://localhost:8080' }); // axios.create(config)
// клиент содержит методы, подобно axios
const response = await instance.post('/students', { username: 'hello', password: 'world' }); // axios.post(url, data)
// get-запрос с query string на http://site.com/user?username=hello
const userNames = await instance.get('/students', { params: { partOfName: 'hel' } }); // axios.get(url, params)
// ошибки с сайта не выбрасываются, а считаются валидным ответом. Как в fetch
const failedRequest = await instance.post('/students', { username: 'foo' }, { returnUsers: true }); // axios.post(url, data, params)

// ответы от клиента подобны fetch
console.log(response.ok); // => true
console.log(response.status); // => 201
console.log(userNames.ok); // => true
console.log(userNames.status); // => 200
await userNames.json(); // ['hello']

console.log(failedRequest.ok); // => false
console.log(failedRequest.status); // => 400
await failedRequest.text(); // "Не указано имя или пароль"

src/index.js

Реализуйте и экспортируйте по умолчанию функцию, возвращающую адаптер HTTP-клиента по его названию.

src/axiosAdapter.js

Реализуйте обработчик ответа для axios и два метода HTTP-клиента: post, patch.

Обработчик ответа должен возвращать объект, аналогичный ответу fetch, со следующими свойствами:

  • ok - результат выполнения запроса
  • status - код HTTP-ответа
  • json() - функция, возвращающая Promise. После его разрешения отдаётся JSON-ответ ресурса (body)
  • text() - функция, возвращающая Promise. После его разрешения отдаётся текстовый ответ ресурса (body)

src/fetchAdapter.js

Реализуйте обработчик параметров запроса для fetch и два метода HTTP-клиента: post, patch.

Каждый метод принимает параметры запроса по интерфейсу axios, необходимо взять из него нужные данные, корректно сформировать query string, body и устанавливать правильный HTTP-метод.

Подсказки

В коде оставлены комментарии, которые помогут в решении.

Документация:

Успешных завершений: 76%

Для полного доступа к испытанию нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Последние код-ревью

Автор Дата обновления Версий
denis-bondarenko 23 нояб., 19:25 2
big_gun 12 нояб., 10:18 1
msmyslov 07 нояб., 16:55 1
deltaspb 06 нояб., 11:28 1
slavakaderkin 04 нояб., 11:31 2