roadmap.az

Menyu

HTTP sorğuları və JSON

Müştəri və server müqaviləsi

Müştəri serverdən resurs istəyən tərəfdir; brauzer müştəri ola bilər. Server sorğunu emal edib cavab qaytarır. Server uzaq məlumat mərkəzində də, öz kompüterində də işləyə bilər. HTTP bu əlaqənin protokoludur; HTTPS ötürülməni TLS ilə qoruyur.

Sorğuda metod, URL, başlıqlar və bəzən gövdə olur. Cavabda status, başlıqlar və gövdə var. GET adətən oxuyur, POST yaradır, PUT təqdimatı yeniləyir, DELETE silir. Dəqiq davranışı xidmətin sənədi müəyyən edir.

const user = { name: 'Aysel', skills: ['HTML', 'CSS'], active: true };
const text = JSON.stringify(user);
console.log(text);
const restored = JSON.parse(text);
console.log(restored.skills[0]); // HTML
try {
  JSON.parse('{name: Aysel}');
} catch {
  console.log('Etibarlı JSON deyil');
}
Nümunə

JSON və status qrupları

JSON mətn formatıdır: açarlar və sətirlər ikiqat dırnaqla yazılır, şərh və son əlavə vergül qəbul etmir. Funksiya və undefined JSON məlumat tipi deyil. JavaScript obyekti ilə JSON mətnini qarışdırma.

1xx məlumat, 2xx uğur, 3xx yönləndirmə, 4xx sorğu ilə bağlı, 5xx serverlə bağlı vəziyyətləri göstərir. 200 uğur, 201 yaradılma, 204 gövdəsiz uğur, 400 yanlış sorğu, 401 identifikasiya tələbi, 403 icazəsizlik, 404 tapılmama və 500 server xətasıdır. Network panelində bir sorğunun bu hissələrini tap.

Əlavə qeydlər və mənbələr

Müştəri sorğu göndərir, server status, başlıqlar və gövdə ilə cavab verir. HTTP metodlarını və status qruplarını ayır; JSON mətnini parse ilə obyektə, stringify ilə mətnə çevir.

Niyə vacibdir?

API tətbiqlərin bir-biri ilə məlumat mübadiləsi aparması üçün razılaşdırılmış interfeysdir.

Əvvəlki biliklər

Bu mövzuda

  • Müştəri-server və HTTP/HTTPS
  • Sorğu, cavab və status kodları
  • JSON.parse və JSON.stringify

Mövzuya baxış

Uğurlu bağlantı həmişə uğurlu cavab deyil

fetch şəbəkə xətasında rədd edilə bilər, amma HTTP 404 və 500 cavabları üçün ayrıca status yoxlamaq lazımdır. JSON oxumaq da asinxron əməliyyatdır.

async function loadProducts() {
  const response = await fetch('/products.json');
  if (!response.ok) throw new Error('Məlumat yüklənmədi');
  return response.json();
}
Nümunə

Bu funksiyanı çağıran hissədə try/catch ilə xətanı tut və istifadəçiyə mesaj göstər. JSON-un gözlənilən quruluşda olduğunu ayrıca yoxla. Frontend koduna gizli API açarları yerləşdirmə: brauzerə göndərilən kod görünür.

JSON, resurslar və sorğu parametrləri

HTTP cavabı status, başlıqlar və gövdədən ibarətdir. 2xx uğurlu cavabları, 4xx müştəri sorğusu ilə bağlı, 5xx serverlə bağlı xətaları bildirir. HTTPS bağlantını TLS ilə qoruyur. JSON mətn formatıdır: JSON.parse onu dəyərə, JSON.stringify dəyəri JSON mətninə çevirir.

API sənədindən endpoint-i, metodu, gözlənilən parametrləri və cavab quruluşunu oxu. Swagger kimi təsvirlər bu müqaviləni araşdırmağa kömək edir. Sorğu parametrini əl ilə birləşdirmək əvəzinə kodlaşdırılmış URL qur:

const params = new URLSearchParams({ search: 'qırmızı çanta' });
const url = `/api/products?${params}`;
Nümunə

Məlumat yaratmaq, yeniləmək və silmək

POST adətən yeni resurs yaradır, PUT resursu verilmiş təqdimatla yeniləyir, DELETE silir. Dəqiq davranışı API müqaviləsindən yoxla. JSON göndərərkən başlıq və gövdə uyğun olmalıdır.

async function createProduct(product) {
  const response = await fetch('/api/products', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(product)
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  return response.status === 204 ? null : response.json();
}
Nümunə

Bu kod /api/products endpoint-i olan ayrıca təlim serverini fərz edir; roadmap.az özü API təqdim etmir. DELETE cavabı gövdəsiz ola bilər: belə cavabı avtomatik JSON kimi oxuma. Tokenin göndərilmə qaydasını API sənədindən götür. Əvvəlki nümunə açarları və başqasına aid tokenləri istifadə etmə.

Promise, taymerlər və paralel sorğular

Promise gözlənilən əməliyyatın nəticəsini təmsil edir: pending, fulfilled və ya rejected. then nəticəni, catch xətanı emal edir; async/await eyni modeli ardıcıl görünən sintaksislə ifadə edir.

const delay = milliseconds => new Promise(resolve => {
  setTimeout(resolve, milliseconds);
});
async function loadTogether() {
  const results = await Promise.all([
    fetch('/products.json').then(readJSON),
    fetch('/categories.json').then(readJSON)
  ]);
  return results;
}
function readJSON(response) {
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  return response.json();
}
Nümunə

Promise.all nəticələri giriş sırası ilə qaytarır; biri rədd edilərsə ümumi Promise rədd edilir, digər əməliyyatlar avtomatik ləğv olunmur. setInterval təkrar işi planlayır; lazım olmadıqda clearInterval ilə dayandır. Taymerin gecikməsi dəqiq icra anına zəmanət vermir.

Mövzu üzrə praktika

Layihəndə products.json faylı yarat və fetch ilə oxu. Məhsul kartları göstər; fayl tapılmayanda anlaşılan xəta mesajı çıxar.

response.ok yoxlanılır, yüklənmə göstəricisi var və sorğu uğursuz olduqda səhifə çökmür.

Mövzunun yoxlama siyahısı

  • GET və POST sorğularını fərqləndir
  • JSON məlumatını oxu
  • async/await və fetch istifadə et
  • Yüklənmə, boş nəticə və xəta vəziyyətlərini göstər
  • JSON.parse, JSON.stringify və HTTP statusları
  • REST, Swagger, ID və query parametrləri
  • POST, PUT, DELETE, başlıqlar və tokenlər
  • Promise.all, setTimeout və setInterval

Mənbələr

Məşqin idarəetməsi
Addım 1 / 3

JSON mətnini dəyərə çevir

Açarı ikiqat dırnaqla yazaraq JSON-u düzəlt.

Hədəf: Girişə {"name":"Aysel"} yaz.

Expected property name or '}' in JSON at position 1 (line 1 column 2)

Özün sına

Bir sorğunun URL, metod, status və cavab gövdəsini Network panelində tap. JSON nümunəsini obyektə çevir və yanlış JSON üçün xətanı tut.

Nəticəni necə yoxlayım?

Sorğu metodu, URL, başlıqlar, cavab statusu və JSON gövdəsini fərqləndirir; yanlış JSON-u xəta kimi emal edirsən.

Gözlənilən nəticə

  • Obyektin name xassəsi Aysel olur; yanlış JSON tətbiqi dayandırmır.
  • Network-də URL, GET, uğur statusu və JSON gövdəsi ayrı sahələrdə görünür.
Aysel
Yanlış JSON
Nümunə həllə bax

Əvvəl özün sına, sonra müqayisə et. Bu, mümkün həllərdən biridir.

Network panelində həqiqi sorğunu ayrıca yoxla. JSON.parse mətnin formatını yoxlayır; yanlış JSON xətası catch ilə tutulur.

main.js

const raw = '{"id":1,"name":"Aysel"}';
const user = JSON.parse(raw);
console.log(user.name);
try { JSON.parse('{invalid}'); }
catch { console.log('Yanlış JSON'); }
// Brauzerdə Network → /examples/frontend/users.json sorğusunu seç.
// URL, GET metodu, status və Response gövdəsini müqayisə et.

Praktikanı bitirdin?Özün qiymətləndirirsən. İrəliləyiş bu brauzerdə saxlanılır.