Когда дело доходит до обработки HTTP-запросов в JavaScript, Axios и Fetch уже давно являются лучшими инструментами. Однако существует мощная современная альтернатива, которую следует рассмотреть разработчикам — Ky. Легкий и оснащенный расширенными функциями, Ky делает обработку HTTP-запросов проще и эффективнее. В этой статье мы объясним, почему Ky выделяется, проведя прямые сравнения с Axios и Fetch API.
Axios — популярный HTTP-клиент на основе обещаний для JavaScript. Он упрощает HTTP-запросы, предлагая такие функции, как автоматический анализ JSON, перехватчики запросов и настраиваемые тайм-ауты. Однако размер файла может стать недостатком, особенно для легких приложений.
Fetch — это встроенный API браузера для выполнения HTTP-запросов. Несмотря на широкое использование, Fetch имеет некоторые ограничения: он не включает обработку ошибок по умолчанию или встроенные повторные попытки, что требует от разработчиков написания дополнительного кода даже для базовых функций.
Ky — это облегченная (157~ КБ) альтернатива Axios и Fetch, созданная на основе Fetch, но предлагающая более многофункциональный API. Благодаря встроенным повторным попыткам, упрощенной обработке ошибок и настраиваемым перехватчикам запросов Ky обеспечивает баланс между простотой и мощностью.
Почему выбирают Кая?
Это делает Ky отличным выбором для приложений, где производительность и размер пакета имеют решающее значение. Несмотря на легкость, Ky не жертвует такими важными функциями, как повторные попытки и обработка ошибок.
Синтаксис Ky такой же простой, как и у Fetch, но предлагает больше встроенных возможностей. Например, сделать запрос GET с помощью Ky так же просто, как:
import ky from 'ky'; const data = await ky.get('https://api.example.com/data').json();
Почему это лучше, чем Fetch?
Ky имеет встроенную поддержку повторных попыток — важную функцию для обработки ненадежных сетевых условий. Axios также предлагает функцию повторной попытки, но вам необходимо использовать дополнительный плагин или настроить его самостоятельно. Напротив, Ky предоставляет эту функцию по умолчанию с нулевой конфигурацией.
await ky.get('https://api.example.com/data', { retry: 2 });
В этом примере Кай повторит запрос до 2 раз в случае сбоя без какой-либо дополнительной настройки.
Одной из наиболее привлекательных особенностей Ky является система хуков, особенно beforeRequest и afterResponse. Эти перехватчики дают вам полный контроль над вашими HTTP-запросами и ответами без необходимости использования внешнего промежуточного программного обеспечения, которое часто требуется Axios.
С помощью Ky вы можете легко изменять исходящие запросы, используя хук beforeRequest. Если вам нужно добавить токены аутентификации или изменить заголовки, beforeRequest сделает это без труда.
Пример : добавление токена авторизации к каждому запросу.
ky.extend({ hooks: { beforeRequest: [ request => { const token = localStorage.getItem('authToken'); request.headers.set('Authorization', `Bearer ${token}`); } ] } });
Это уменьшает количество повторяющегося кода, упрощая глобальную аутентификацию.
С помощью хука afterResponse вы можете манипулировать ответами во всем приложении. Этот хук особенно полезен для обработки повторных попыток определенных кодов состояния, например обновления токенов с истекшим сроком действия.
Пример: автоматическое обновление токена с истекшим сроком действия при несанкционированном ответе 401.
ky.extend({ hooks: { afterResponse: [ async (request, options, response) => { if (response.status === 401) { const newToken = await refreshAuthToken(); request.headers.set('Authorization', `Bearer ${newToken}`); return ky(request); } } ] } });
Благодаря этой настройке вы можете легко обновлять токены без дублирования логики в приложении.
Axios обеспечивает достойную обработку ошибок с помощью перехватчиков, но ему не хватает простоты, которую Ky предлагает «из коробки». Axios часто требует специальной логики для повторных попыток и обработки кодов ошибок.
Обработка ошибок Fetch по умолчанию ограничена. Он не выдает ошибок для кодов состояния HTTP, таких как 404 или 500, что вынуждает разработчиков проверять статусы ответов вручную.
Кай отлично справляется с обработкой ошибок. Он автоматически выдает ошибки для HTTP-ответов, отличных от 2xx, и обеспечивает функцию повтора для неудачных запросов без необходимости использования дополнительного кода. Это делает Ky надежным решением для элегантной обработки ошибок.
try { const data = await ky.get('https://api.example.com/data').json(); } catch (error) { console.error('Request failed:', error); }
Ky оборачивает весь запрос в обещание, автоматически выдавая ошибку, если код состояния ответа указывает на сбой, что упрощает отладку.
Давайте проверим Ky на нескольких практических примерах, демонстрирующих его простоту и мощь.
const response = await ky.get('https://api.example.com/items').json(); console.log(response);
Ky автоматически обрабатывает анализ JSON и выдает ошибку для любых кодов состояния, отличных от 2xx, чего Fetch не делает.
const response = await ky.post('https://api.example.com/create', { json: { name: 'Ky' }, retry: 3 }).json(); console.log(response);
Ky повторяет запрос POST до 3 раз в случае неудачи, обеспечивая более высокую надежность, чем Fetch или Axios без дополнительной настройки.
Если вы ищете современное , легкое и многофункциональное решение для выполнения HTTP-запросов в JavaScript, Ky — отличный выбор. Хотя Axios и Fetch по-прежнему широко используются, Ky предлагает ключевые преимущества, такие как автоматические повторы, перехватчики для настройки запросов и ответов, а также улучшенная обработка ошибок по умолчанию.
Для разработчиков, которые отдают приоритет простоте , производительности и контролю над HTTP-запросами, Ky определенно стоит рассмотреть в качестве основного инструмента в ваших проектах JavaScript.
Дополнительные примеры и подробную информацию об API можно найти на странице https://www.npmjs.com/package/ky.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3