Axios JavaScript va TypeScript uchun ochiq kodli HTTP-klient bo'lib, brauzerda ham, Node.js muhitida ham ishlaydi. Kutubxona Promise-ga asoslangan qulay interfeysni taqdim etib, HTTP so'rovlarini yuborish, interceptorlarni qo'llab-quvvatlash, avtomatik JSON serializatsiyasi va so'rovlarni bekor qilish imkoniyatini beradi. GitHub-dagi rasmiy depo ma'lumotlariga ko'ra, loyiha 100 mingdan ortiq yulduzga ega. Axios JavaScript ekotizimida REST API bilan ishlash uchun eng mashhur kutubxonalardan biridir.
Asosiy nuqtalar
Axios brauzerdan va Node.js muhitidan HTTP so'rovlarini bajarish uchun JavaScript kutubxonasidir. U brauzerda XMLHttpRequest va Node.js da http moduli asosida qurilgan bo'lib, ikkala platforma uchun yagona API taqdim etadi.
Axiosning mahalliy fetch-dan asosiy ustunligi avtomatik JSON qayta ishlash, interceptorlarni qo'llab-quvvatlash va xatolar bilan qulayroq ishlashdir. Fetch-dan farqli o'laroq, Axios javobning JSON tanasini olish uchun ikkita .then chaqiruvini talab qilmaydi va HTTP xatolarida (4xx, 5xx) avtomatik ravishda istisno tashlaydi.
Kutubxona barcha asosiy HTTP metodlarini qo'llab-quvvatlaydi: GET, POST, PUT, DELETE, PATCH va HEAD. Ham oddiy loyihalarda, ham kuniga yuz minglab so'rovlar bilan katta korporativ ilovalarda ishlatilishi mumkin.
Axios arxitekturasi adapterlar (adapters) konsepsiyasiga asoslanadi. Kutubxona transport qatlamini abstraktsiyalaydi: brauzerda XMLHttpRequest, Node.js da http yoki https moduli ishlatiladi. Bu bajarish muhitidan qat'i nazar yagona interfeysni ta'minlaydi.
Har bir so'rov so'rov yoki javob konfiguratsiyasini o'zgartirishi mumkin bo'lgan interceptorlar zanjiridan o'tadi. Interceptorlardan so'ng so'rov haqiqiy HTTP chaqiruvini bajaradigan adapterga uzatiladi. Javob keyin ilova kodiga yetib borishdan oldin javob interceptorlaridan o'tadi.
Axios mobil va veb ilovalarda HTTP bilan ishlash uchun uni qulay tanlovga aylantiradigan ko'plab o'rnatilgan imkoniyatlarni o'z ichiga oladi. Keling, ulardan eng muhimlarini ko'rib chiqaylik.
So'rov yuborishda Axios avtomatik ravishda JavaScript obyektini JSON.stringify yordamida JSON satriga aylantiradi. Javobni qabul qilishda kutubxona JSON-ni yana obyektga tahlil qiladi. Bu dasturchini qo'lda serializatsiya va deserializatsiyadan xalos qiladi.
Brauzer muhitida Axios avtomatik ravishda cookie-dan XSRF-TOKEN sarlavhalarini qo'shadi, ilovani saytlararo so'rov qalbakilashtirishdan himoya qiladi. Buning uchun serverdan XSRF-TOKEN nomli cookie-da token yuborishni sozlash kifoya.
Kutubxona timeout parametri orqali vaqt cheklovini o'rnatishni va AbortController orqali so'rovni bekor qilishni qo'llab-quvvatlaydi. Bu, ayniqsa, beqaror ulanishga ega mobil ilovalarda muhim, chunki to'xtab qolgan so'rovlar batareya va trafikni sarflaydi.
Axiosni o'rnatish har qanday paket menejeri orqali amalga oshiriladi. Kutubxona npm reestrida mavjud va Node.js da ham, brauzer loyihalarida ham ulanishi mumkin. TypeScript uchun tiplar asosiy paketga kiritilgan, qo'shimcha bog'liqliklar talab qilinmaydi.
O'rnatishdan so'ng asosiy konfiguratsiya bilan namuna yaratish mumkin: asosiy URL, standart taymout, umumiy sarlavhalar. Bu har bir so'rovda bir xil parametrlarni takrorlamaslik va HTTP-klient sozlamalarini markazlashtirilgan holda boshqarish imkonini beradi.
# npm orqali o'rnatish
npm install axios
# yarn orqali o'rnatish
yarn add axios
# pnpm orqali o'rnatish
pnpm add axios
Har bir API xizmati uchun alohida Axios namunasini yaratish tavsiya etiladi. Bu ushbu namunaning barcha so'rovlariga qo'llaniladigan asosiy URL, standart sarlavhalar va taymoutni o'rnatish imkonini beradi.
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.example.com/v1',
timeout: 10000,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
So'rov namunalari Axiosdan foydalanishning asosiy naqshlarini ko'rsatadi. Barcha namunalar async/await sintaksisidan foydalanadi, bu asinxron kodni .then() zanjirlariga nisbatan o'qish osonroq qiladi.
Serverdan ma'lumot olish uchun axios.get metodi ishlatiladi. So'rov parametrlari params obyekti orqali uzatiladi, u avtomatik ravishda query-string ga aylantiriladi. Javob data maydonida ma'lumotlarni, status da holatni va headers da sarlavhalarni o'z ichiga oladi.
interface User {
id: number;
name: string;
email: string;
}
async function getUsers() {
try {
const response = await api.get<User[]>('/users', {
params: { page: 1, limit: 10 }
});
return response.data;
} catch (error) {
console.error('Foydalanuvchilarni yuklash xatosi', error);
throw error;
}
}
Serverga ma'lumot yuborish uchun axios.post ishlatiladi. Ikkinchi argument Axios avtomatik ravishda JSON ga serializatsiya qiladigan ma'lumotlar obyektidir. Content-Type turi sukut bo'yicha application/json ga o'rnatiladi.
interface CreateUserDto {
name: string;
email: string;
role: string;
}
async function createUser(data: CreateUserDto) {
const response = await api.post<User>('/users', data);
return response.data;
}
Interceptorlar har bir so'rov yoki javob uchun bajariladigan middleware funksiyalardir. Ular avtorizatsiya tokenlarini qo'shish, so'rovlarni loglash, xatolarni markazlashtirilgan holda boshqarish imkonini beradi. So'rov interceptor saqlash joyidan olingan token bilan Authorization sarlavhasini qo'shadi.
// So'rov interceptor — avtorizatsiya tokenini qo'shadi
api.interceptors.request.use(
(config) => {
const token = getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
);
// Javob interceptor — 401 xatolarini boshqaradi
api.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
redirectToLogin();
}
return Promise.reject(error);
}
);
Xatolarni boshqarish Axiosda istisno mexanizmiga asoslanadi. Fetch-dan farqli o'laroq, Axios avtomatik ravishda HTTP xatolarini (4xx, 5xx) ushlaydi va ularni catch blokiga uzatadi. Xato obyekti server javobi, so'rov va bajarish konteksti haqida ma'lumotni o'z ichiga oladi.
Uch turdagi xatolarni farqlash muhim: server javob xatosi (response), so'rov xatosi (request) va konfiguratsiya xatosi (config). Birinchisi xato kodi bilan muvaffaqiyatli HTTP chaqiruvi paytida, ikkinchisi serverdan javob bo'lmaganda, uchinchisi so'rovning noto'g'ri konfiguratsiyasi paytida yuz beradi.
import axios, { AxiosError } from 'axios';
async function safeRequest() {
try {
return await api.get('/data');
} catch (error) {
if (error instanceof AxiosError) {
if (error.response) {
console.warn('Javob xatosi', error.response.status);
} else if (error.request) {
console.warn('Serverdan javob yo'q');
} else {
console.warn('Konfiguratsiya xatosi');
}
}
}
}
| HTTP metodi | Axios metodi | Tavsif |
|---|---|---|
| GET | axios.get(url, config) | Ma'lumotlarni olish |
| POST | axios.post(url, data, config) | Resurs yaratish |
| PUT | axios.put(url, data, config) | Resursni yangilash |
| DELETE | axios.delete(url, config) | Resursni o'chirish |
| PATCH | axios.patch(url, data, config) | Qisman yangilash |
Axiosni solishtirish mahalliy Fetch API bilan har bir texnologiya qachon mos kelishini tushunishga yordam beradi. Fetch o'rnatishni talab qilmaydigan brauzerga o'rnatilgan API. Axios qo'shimcha imkoniyatlarga ega uchinchi tomon kutubxonasidir. Oddiy so'rovlar uchun fetch yetarli, murakkab ilovalar uchun interceptorlar va markazlashtirilgan xato boshqaruvi bilan Axios qulayroq.
Fetch HTTP xatolarini (4xx, 5xx) istisno deb hisoblamaydi — response.ok ni tekshirish kerak. Fetch JSON olish uchun ikkita .then() chaqiruvini talab qiladi: response.json() keyin ma'lumotlar bilan Promise qaytaradi. Axios buni avtomatik bajaradi. Fetch qo'shimcha polyfillsiz fayl yuklash jarayonini qo'llab-quvvatlamaydi. Axios o'rnatilgan onUploadProgress va onDownloadProgress ga ega.
Node.js da Fetch 18-versiyadan boshlab eksperimental funksiya sifatida mavjud, Axios esa Node.js 10 dan boshlab barqaror ishlaydi. Eski Node.js versiyalarini qo'llab-quvvatlaydigan loyihalar uchun tanlov Axios foydasiga aniq. Murakkab so'rovlarni qayta ishlashsiz zamonaviy brauzer loyihalari uchun fetch yetarli bo'lishi mumkin.
Tez-tez so'raladigan savollar
Axios avtomatik ravishda JSON ni tahlil qiladi, HTTP xatolarida istisno tashlaydi va interceptorlarni qo'llab-quvvatlaydi. Fetch JSON uchun ikkita .then chaqiruvini talab qiladi va 4xx/5xx ni xato deb hisoblamaydi. Axiosni sozlamalar obyekti orqali konfiguratsiya qilish ham osonroq.
Yo'q, TypeScript tiplari asosiy axios paketiga kiritilgan. @types/axios kabi qo'shimcha bog'liqliklar talab qilinmaydi — axios ni o'zi nomli paketdan import qilish kifoya.
AbortController dan foydalaning: AbortController namunasini yarating va uning signal ni so'rov konfiguratsiyasiga uzating. controller.abort() chaqirilganda so'rov bekor qilinadi va Promise tegishli xato xabari bilan rad etiladi.
Ha, Axios React Native bilan to'liq mos keladi. Kutubxona React Native muhitida mavjud bo'lgan o'rnatilgan XMLHttpRequest dan foydalanadi. Barcha funksiyalar, jumladan interceptorlar va so'rovlarni bekor qilish, qo'shimcha sozlashlarsiz ishlaydi.
Authorization sarlavhasini markazlashtirilgan holda qo'shish uchun so'rov interceptor dan foydalaning. Bu har bir so'rovda alohida token ko'rsatish zaruratini bartaraf qiladi va tokenning amal qilish muddati tugashini yagona tartibda boshqarish imkonini beradi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.