Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!
[NODE JS] HTTP Status Kodlarini Dogru Kullanmak
Merhaba arkadaslar, bugun HTTP status kodlarini dogru kullanmayi ogrenecegiz. Status kodlari, sunucunun client'a "istegini aldim, sonuc su" demesinin standart yoludur. Ben kariyerimde her seyi 200 donduren API'ler gordum ve bunun ne kadar kotu bir pratik oldugunu aci tecrubemle ogrendim. Dogru status kodu kullanmak sadece bir convention degildir, uygulamanizin dogru calismasi icin gereklidir.
Status Kod Kategorileri
HTTP status kodlari 5 kategoride gruplanir. 1xx bilgilendirme, 2xx basari, 3xx yonlendirme, 4xx istemci hatasi ve 5xx sunucu hatasi. Her kategorinin kendine ozgu bir anlami var ve dogru kategoriyi kullanmak API'nizin anlasilabilirligini buyuk olcude arttirir.
Ben ozellikle su kodlari en cok kullaniyorum: 200 (OK), 201 (Created), 204 (No Content), 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found), 409 (Conflict), 422 (Unprocessable Entity) ve 500 (Internal Server Error). Bunlari iyi ogrenirseniz cogu API senaryosunu karsilersiniz.
JavaScript:
const http = require('http');
const { URL } = require('url');
// Status kodlari referansi
const STATUS_KODLARI = {
// 2xx Basari
200: 'OK - Istek basarili',
201: 'Created - Kaynak olusturuldu',
204: 'No Content - Basarili ama icerik yok',
// 3xx Yonlendirme
301: 'Moved Permanently - Kalici yonlendirme',
302: 'Found - Gecici yonlendirme',
304: 'Not Modified - Degismedi (cache kullan)',
// 4xx Istemci Hatasi
400: 'Bad Request - Hatali istek',
401: 'Unauthorized - Kimlik dogrulama gerekli',
403: 'Forbidden - Erisim yetkisi yok',
404: 'Not Found - Kaynak bulunamadi',
405: 'Method Not Allowed - Metod desteklenmiyor',
409: 'Conflict - Cakisma (ornegin: ayni email ile kayit)',
422: 'Unprocessable Entity - Veri gecersiz',
429: 'Too Many Requests - Cok fazla istek (rate limit)',
// 5xx Sunucu Hatasi
500: 'Internal Server Error - Sunucu hatasi',
502: 'Bad Gateway - Arka uc sunucu hatasi',
503: 'Service Unavailable - Hizmet kullanilamaz'
};
// Kullanici verileri
let kullanicilar = [
{ id: 1, email: 'ahmet@test.com', ad: 'Ahmet' }
];
async function bodyOku(req) {
const chunks = [];
for await (const chunk of req) chunks.push(chunk);
const raw = Buffer.concat(chunks).toString();
return raw ? JSON.parse(raw) : {};
}
function json(res, kod, veri) {
res.writeHead(kod, { 'Content-Type': 'application/json; charset=utf-8' });
res.end(JSON.stringify(veri, null, 2));
}
const sunucu = http.createServer(async (req, res) => {
const url = new URL(req.url, `http://${req.headers.host}`);
const yol = url.pathname;
const metod = req.method;
try {
// 200 OK - Basarili veri getirme
if (yol === '/api/kullanicilar' && metod === 'GET') {
json(res, 200, { veri: kullanicilar });
}
// 201 Created - Yeni kaynak olusturma
else if (yol === '/api/kullanicilar' && metod === 'POST') {
const body = await bodyOku(req);
if (!body.email || !body.ad) {
json(res, 400, { hata: 'email ve ad zorunlu' });
return;
}
// 409 Conflict - Ayni email ile kayit
if (kullanicilar.find(k => k.email === body.email)) {
json(res, 409, { hata: 'Bu email zaten kayitli' });
return;
}
const yeni = { id: kullanicilar.length + 1, ...body };
kullanicilar.push(yeni);
json(res, 201, { veri: yeni }); // 201!
}
// 204 No Content - Basarili silme
else if (yol.match(/^\/api\/kullanicilar\/\d+$/) && metod === 'DELETE') {
const id = parseInt(yol.split('/').pop());
const index = kullanicilar.findIndex(k => k.id === id);
if (index === -1) {
json(res, 404, { hata: 'Kullanici bulunamadi' });
return;
}
kullanicilar.splice(index, 1);
res.writeHead(204);
res.end(); // Body yok!
}
// 301 Redirect
else if (yol === '/eski-sayfa') {
res.writeHead(301, { 'Location': '/yeni-sayfa' });
res.end();
}
// 405 Method Not Allowed
else if (yol === '/api/kullanicilar' && !['GET', 'POST'].includes(metod)) {
res.writeHead(405, {
'Allow': 'GET, POST',
'Content-Type': 'application/json'
});
res.end(JSON.stringify({ hata: 'Bu endpoint sadece GET ve POST destekler' }));
}
// 404 Not Found
else {
json(res, 404, { hata: 'Endpoint bulunamadi' });
}
} catch (error) {
// 500 Internal Server Error
console.error('Sunucu hatasi:', error);
json(res, 500, { hata: 'Dahili sunucu hatasi' });
}
});
sunucu.listen(3000, () => {
console.log('Sunucu calisiyor: http://localhost:3000');
});
En Cok Yapilan Hatalar
Birincisi: her seyi 200 dondurmek. Bazi gelisitiriciler hata durumlarinda bile 200 dondurur ve hatay body icine yazar. Bu cok yanlis cunku HTTP client'lari ve araclari status kodlarina gore davranir. Ikincisi: 401 ve 403 karistirmak. 401 "sen kimsin bilmiyorum, giris yap" demek, 403 ise "seni taniyorum ama buna erisim yetkin yok" demek. Bu ikisini dogru kullanmak guvenlik acisindan onemli.
Tecrubeme gore API gelistirirken tutarli olmak cok onemli. Her basarili islem icin ayni format, her hata icin ayni format kullanin. Boylece client tarafinda tek bir error handler yazilir ve her endpoint icin ozel hata yonetimi yapilmak zorunda kalinmaz. Neyse, sonraki konumuz HTTP headers!
Emeğiniz ve katkınız için teşekkür ederiz!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!
Konunuz gerekli incelemelerden geçerek onaylandı. Topluluğumuza katkılarınızın devamını bekliyoruz.
İyi forumlar!

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 5
- Görüntüleme
- 176
- Cevaplar
- 1
- Görüntüleme
- 78
- Cevaplar
- 2
- Görüntüleme
- 61
- Cevaplar
- 2
- Görüntüleme
- 50
