Я вызываю веб-службу с помощью fetch, но тем же, что и я, могу сделать с помощью axios. Так что теперь я смущен. Должен ли я использовать либо аксиомы, либо выборку?
Это библиотеки запросов HTTP...
В итоге у меня возникают те же сомнения, но таблица в этой post заставляет меня пойти с isomorphic-fetch
. Это fetch
, но работает с NodeJS.
Fetch и Axios очень похожи по функциональности, но для большей обратной совместимости Axios, кажется, работает лучше (например, fetch не работает в IE 11, посмотрите этот пост)
Кроме того, если вы работаете с JSON-запросами, ниже приведены некоторые различия, с которыми я столкнулся.
Получить запрос JSON
let url = 'https://someurl.com';
let options = {
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
body: JSON.stringify({
property_one: value_one,
property_two: value_two
})
};
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
let data = await response.json();
// do something with data
}
Почтовый запрос Axios JSON
let url = 'https://someurl.com';
let options = {
method: 'POST',
url: url,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
data: {
property_one: value_one,
property_two: value_two
}
};
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
let data = await response.data;
// do something with data
}
Так:
Надеюсь это поможет.
Согласно mzabriskie на GitHub:
В целом они очень похожи. Некоторые преимущества аксиомов:
Трансформаторы: позволяют выполнять преобразования данных перед выполнением запроса или после получения ответа
Перехватчики: позволяют полностью или частично изменять запрос или ответ (заголовки также). также выполнять асинхронные операции перед выполнением запроса или до того, как будет достигнуто соглашение Promise
Встроенная защита XSRF
Я думаю, вы должны использовать аксиомы.
Интересно было об этом, нашел здесь свой вопрос, а затем нашел этот средний пост, который может оказаться полезным. Fetch кажется немного более подробным и неумолимым: https://medium.com/@shahata/why-i-wont-be-using-fetch-api-in-my-apps-6900e6c6fe78#.wxtu3qnte
axios и fetch часто используются в приложениях React для управления сетевыми запросами и управления некоторым объемом данных.
axios - это автономный сторонний пакет, который можно легко установить в проект React с помощью NPM.
Другой вариант, который вы упомянули, это функция выборки. Это не пакет, это особая функция, встроенная в большинство современных браузеров. С fetch вам не нужно устанавливать сторонний пакет.
Таким образом, объем кода немного меньше, если вы используете fetch over axios. Однако выборка - это более простая и низкоуровневая функция, используемая для извлечения данных. Это не самая плохая вещь в мире, но если вы используете fetch, вы в конечном итоге напишите много кода, который уже написан для вас в axios.
Так что это выбор между "сделай сам" с извлечением и, возможно, испорченным, если вы не знаете, что делаете, или просто используете аксиосы, и все гайки и болты позаботятся о вас.
Я лично использую axios во всех моих проектах, потому что axios обрабатывает сетевые запросы предсказуемым образом, в отличие от некоторых угловых случаев с fetch, которые не дают большого опыта.
Кроме того... Я играл с различными библиотеками в своем тесте и замечал их различную обработку запросов 4xx. В этом случае мой тест возвращает объект json с ответом 400. Вот как обрабатываются 3 популярных libs:
// request-promise-native
const body = request({ url: url, json: true })
const res = await t.throws(body);
console.log(res.error)
// node-fetch
const body = await fetch(url)
console.log(await body.json())
// Axios
const body = axios.get(url)
const res = await t.throws(body);
console.log(res.response.data)
Интересно, что request-promise-native
и axios
выбрасывают ответ 4xx, а node-fetch
- нет. Кроме того, fetch
использует обещание для разбора json.
t
и как работает t.throws
?
.throws
для проверки .throws
ошибок. В этом случае я тестировал отклонения от всех 3 библиотек и заметил разницу в данных, которые были возвращены.
https://medium.com/@thejasonfile/fetch-vs-axios-js-for-making-http-requests-2b261cdd3af5
Я думаю, что эта ссылка будет полезна.
Преимущества аксиомов: