JavaScript Fetch API Eğitimi: GET, POST, Hata İşleme ve Zaman Aşımları
Fetch, API’leri JavaScript’ten çağırmanın yerleşik yoludur, ancak neredeyse herkesi yakalayan bir sürprizi vardır. İstek göndermeyi, her türlü arızayla başa çıkmayı ve yeniden kullanabileceğiniz küçük bir yardımcı oluşturmayı öğrenin.
fetch(),Responseiçin bir söz verir ve metnin okunması bir saniye sürerawait.- 404 ve 500 gibi HTTP hataları reddetmez, bu nedenle her zaman
response.ok‘yi işaretleyin. - JSON göndermek için
JSON.stringifykullanın veContent-Typebaşlığını ayarlayın. - Getirmenin varsayılan zaman aşımı seçeneği yoktur, bu nedenle
AbortSignal.timeout()kullanın.
Çoğu modern web uygulaması her zaman bir sunucuyla konuşur. JavaScript Fetch API bunu yapmanın standart yoludur ve tarayıcılarda ve Node.js 18 ve sonraki sürümlerinde yerleşik olduğundan yüklenecek bir şey yoktur.
Temel kullanım iki satır alır, ancak birçok eğitim burada durur ve gerçek hatalara neden olan kısmı atlar: arıza yönetimi. Bu kılavuzdaki örnekleri Node.js 24 üzerindeki küçük bir yerel sunucuya karşı test ettik ve gösterilen çıktı bu çalıştırmadan geliyor. Koddaki example.com kendi API’nizin yerine geçer. Vaatler sizin için yeniyse, JavaScript vaatlerinin açıklanması ile başlayın.
Getirme API’si nedir?
Fetch, HTTP istekleri yapmak için söze dayalı bir arayüzdür. Eski, geri arama odaklı XMLHttpRequest‘in yerini aldı ve birçok proje artık basit aramalar için bir kitaplık eklemek yerine onu kullanıyor.
| Özellik | Getir | Axios (kütüphane) |
|---|---|---|
| Kurulum | Dahili | Bağımlılık olarak eklendi |
| JSON gövdesi | Kendiniz dizeleştirin | Otomatik |
| JSON yanıtını ayrıştır | response.json()‘i arayın |
Otomatik |
| HTTP hataları reddediliyor mu? | Hayır | Evet, varsayılan olarak |
| Zaman aşımı | AbortSignal aracılığıyla |
Bir timeout seçeneği |
Bir GET isteği
Fetch, varsayılan olarak bir GET isteğinde bulunur. İki adım vardır ve her birinin await‘e ihtiyacı vardır: önce yanıt başlıkları gelir ve sonra gövdeyi okursunuz.
const response = await fetch("https://example.com/users/1");
const user = await response.json();
console.log(user);
// { id: 1, name: 'Asha' }
İki adım mevcuttur çünkü gövde büyük olabilir ve başlıklardan daha geç gelebilir. Bir tarayıcı betiğinde, üst seviye await‘in bir modüle ihtiyacı vardır, dolayısıyla bunu genellikle bir async fonksiyonunun içine yerleştirirsiniz. JavaScript eşzamansız/beklemede kılavuzumuza bakın.
Yanıt nesnesi
Gövdeyi okumadan önce yanıtı inceleyebilirsiniz:
console.log(response.status, response.ok, response.headers.get("content-type"));
// 200 true application/json
| Özellik veya yöntem | sana verir |
|---|---|
response.ok |
true 200 ila 299 arasındaki durumlar için |
response.status |
404 gibi durum kodu |
response.headers.get(name) |
Bir yanıt başlığı |
response.json() |
Gövde JSON olarak ayrıştırıldı |
response.text() |
Bir ip gibi vücut |
response.blob() |
Görüntü gibi ikili veriler |
Bir gövde yalnızca bir kez okunabilir. json()‘i ikinci kez çağırmak testimizde başarısız oldu:
await res.json();
await res.json();
// TypeError: Body is unusable: Body has already been read
Eğer iki kez okumanız gerekiyorsa, önce response.clone()‘i arayın.
Büyük sürpriz: 404 fırlatmıyor
Bu yazıdaki en önemli şey bu. Var olmayan bir kullanıcıdan talepte bulunduk:
const res = await fetch("https://example.com/users/999");
console.log(res.status, res.ok);
// 404 false
Hiçbir istisna atılmadı. Getirme söz konusu olduğunda istek işe yaradı: sunucuya ulaşıldı ve sunucu yanıtlandı. Söz, ağ arızasında olduğu gibi yalnızca hiçbir kullanılabilir yanıt gelmediğinde reddedilir. Yani bunun gibi bir kodda gizli bir hata var:
try {
const res = await fetch(url);
const data = await res.json(); // may be an error payload
showUser(data); // runs anyway for 404 and 500
} catch (error) {
showError(); // does not run for 404 or 500
}
Her kodun ne anlama geldiğini görmek için HTTP durum kodları yardımcı sayfamıza göz atın.
Yeniden kullanılabilir bir yardımcı
Bu kontrolü her yerde tekrarlamayın. Bir kez sarın:
async function getJson(url, options) {
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`Request failed with status ${response.status}`);
}
return response.json();
}
try {
await getJson("https://example.com/users/999");
} catch (error) {
console.log("caught:", error.message);
}
// caught: Request failed with status 404
Artık hem HTTP hataları hem de ağ hataları aynı sonuçla sonuçlanıyor catch. Bu küçük fonksiyon her projede bulunmaya değerdir. Gerçek bir sürüm ayrıca yanıt gövdesinden bir hata mesajı okuyabilir ve ayrıştırılacak JSON’u olmayan bir 204 No Content yanıtını işleyebilir.
POST JSON verileri
İkinci argüman olarak bir seçenekler nesnesini iletin. JSON için iki şeyi kendiniz yapmanız gerekir: verileri bir dizeye dönüştürmek ve başlığı ayarlamak.
const created = await getJson("https://example.com/users", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ name: "Ben" }),
});
console.log(created);
// { id: 2, name: 'Ben', type: 'application/json' }
Test sunucumuz, aldığı içerik türünü tekrarlayarak başlığın geldiğini doğruladı. Bu başlığın unutulması, kafa karıştırıcı sunucu hatalarının yaygın bir nedenidir, çünkü birçok çerçeve, JSON’u yalnızca bildirildiğinde ayrıştırır. Bir form veya dosya yüklemek için gövde olarak bir FormData nesnesi iletin ve tarayıcının kendisinin bir sınır değeri eklemesi gerektiğinden Content-Type‘ü ayarlamayın.
Diğer yöntemler ve seçenekler
| Seçenek | Örnek | Amaç |
|---|---|---|
yöntem |
"PUT", "PATCH", "DELETE" |
HTTP yöntemi |
başlıklar |
{ Yetkilendirme: "Taşıyıcı ..." } |
Başlıkları iste |
vücut |
JSON.stringify(data) |
Talep eden kuruluş |
sinyal |
AbortSignal.timeout(5000) |
İptal ediliyor |
kimlik bilgileri |
"dahil et" |
Çerezleri çapraz kaynak gönderme |
önbellek |
"mağaza yok" |
Tarayıcı önbellek davranışı |
REST ve diğer API stilleri arasında seçim mi yapıyorsunuz? REST ve GraphQL karşılaştırmamız, getirmenin her birine ne kadar uygun olduğunu gösterir.
Sorgu dizeleri
Özel karakterler bunları bozacağından sorgu dizelerini metni birleştirerek oluşturmayın. URLSearchParams sizin için kodlamayı yönetir:
const params = new URLSearchParams({ q: "red shoes", page: 2 });
console.log(params.toString());
// q=red+shoes&page=2
await getJson(`https://example.com/search?${params}`);
// { q: 'red shoes', page: '2' }
Sunucu, alan geri yüklenerek red shoes‘i doğru bir şekilde aldı.
Zaman aşımları ve iptal etme
Siz aksini söylemediğiniz sürece Fetch, yavaş bir sunucuda uzun süre bekleyecektir. AbortSignal.timeout() bir sınır belirler. Test bitiş noktamız 200 milisaniye sınırına rağmen iki saniye sürdü:
try {
await fetch("https://example.com/slow", { signal: AbortSignal.timeout(200) });
} catch (error) {
console.log(error.name);
}
// TimeoutError
Örneğin bir kullanıcı bir sayfadan ayrıldığında veya yeni bir arama terimi yazdığında manuel olarak iptal etmek için AbortController kullanın:
const controller = new AbortController();
const pending = fetch("https://example.com/slow", { signal: controller.signal });
controller.abort();
try {
await pending;
} catch (error) {
console.log(error.name);
}
// AbortError
Aynı anda birden fazla isteği çalıştırmak için, tek tek beklemekten çok daha hızlı olan Promise.all‘i kullanın:
const [user, search] = await Promise.all([
getJson("https://example.com/users/1"),
getJson("https://example.com/search?q=a&page=1"),
]);
Her türlü başarısızlık
Koşumuzdaki her başarısızlığın neye benzediğini ve bunları nasıl ayıracağımızı burada bulabilirsiniz:
| Durum | Ne olur? | Nasıl tespit edilir |
|---|---|---|
| Sunucu 404 veya 500 değerini döndürüyor | Söz yerine getirilir | response.ok yanlıştır |
| Sunucuya ulaşılamıyor | TypeError ile reddeder |
yakalamak |
| Zaman aşımına ulaşıldı | TimeoutError ile reddeder |
error.name |
| Manuel olarak iptal edildi | AbortError ile reddeder |
error.name |
| Gövde geçerli JSON değil | json() SyntaxError ile reddeder |
yakalamak |
Bu son sıra üretimde yaygındır. 502 döndüren bir proxy genellikle bir HTML hata sayfası gönderir. Bunu çoğalttık ve res.json() bir SyntaxError attı. Ayrıştırmadan önce response.ok‘ün işaretlenmesi, kafa karıştırıcı bir ayrıştırma hatası yerine gerçek sorunu bildirdiğiniz anlamına gelir.
İpucu: Bu hata yollarını bilerek test edin. Tarayıcı geliştirici araçları çevrimdışı olmayı simüle edebilir ve test araçları 500 yanıtı taklit edebilir. Postacı ile API test etme kılavuzumuz, API tarafının kontrol edilmesini kapsar.
CORS ve kimlik bilgileri
Bir tarayıcıda, bir kaynaktan diğerine yapılan istek, kaynaklar arası kaynak paylaşımı kuralları olan CORS‘e tabidir. Access-Control-Allow-Origin‘den bahseden bir hata görürseniz, düzeltme sitenize izin vermesi gereken sunucuya aittir. JavaScript’inizde hata yalnızca genel bir TypeError olarak görünüyor, bu nedenle gerçek nedeni öğrenmek için tarayıcı konsoluna bakın. Node.js, CORS’u zorlamadığından, bir komut dosyasında çalışan bir istek tarayıcıda yine de başarısız olabilir.
Tarayıcılar varsayılan olarak çapraz kaynak istekleri üzerine çerez göndermez. İhtiyacınız varsa credentials: "include"‘i ayarlayın ve sunucunun buna izin verdiğinden emin olun. Herkes okuyabileceği için asla gizli API anahtarlarını tarayıcı JavaScript’ine koymayın. Bunları sunucunuzda tutun.
Yaygın hatalar
- İşaretlenmiyor
response.ok. Hata yanıtları başarılı olarak değerlendirilir. - İkinci
await.response.json()‘ün unutulması da bir söz verir. - Unutmak
JSON.stringify. Vücudun gönderdiği gibi bir nesneyi iletmek[object Object]. Content-Type‘yiFormDataile ayarlamak. Bu, sınırı ihlal eder, bu yüzden onu dışarıda bırakın.- Zaman aşımı yok. Askıya alınan bir istek, sayfanın döndürücüsünün süresiz olarak çalışmasına neden olabilir.
- Boş bir yanıt için JSON ayrıştırılıyor. 204’ün gövdesi yoktur ve
json()fırlatır.
Son sözler
Ana kuralını hatırladığınızda, getirme işlemi basittir: Yanıt ile başarı aynı şey değildir. Küçük yardımcıyı projenize kopyalayın, bir zaman aşımı ekleyin ve hata yollarınızı test edin. Bir sonraki adım olarak, bir API’den veri yükleyen, net bir hata mesajı gösteren ve kullanıcının yavaş aramayı iptal etmesine olanak tanıyan küçük bir sayfa oluşturun.
Sık sorulan sorular
Getirme 404’te hata veriyor mu?
Hayır. fetch yalnızca ağ arızası gibi herhangi bir yanıt alınmadığında reddeder. HTTP hataları için, Response.ok veya Response.status’u kendiniz kontrol edin.
JSON’u fetch ile nasıl gönderirim?
Yöntemi POST olarak ayarlayın, application/json’un İçerik Türü başlığını ekleyin ve verileri gövde olarak JSON.stringify aracılığıyla iletin.
Fetch ile neden iki beklemeye ihtiyacım var?
İlki, yanıt başlıkları geldiğinde çözülür. İkincisi, gövdenin indirilip ayrıştırılmasını bekler; bu daha sonra gerçekleşebilir.
Getirme sırasında zaman aşımını nasıl ayarlayabilirim?
Geçiş sinyali: Seçeneklerde AbortSignal.timeout(5000). Daha sonra istek, bu kadar milisaniyeden uzun sürerse TimeoutError ile reddedilir.
Getirme Node.js’de mevcut mu?
Evet. Fetch, dünya genelinde Node.js 18 ve sonraki sürümlerde kullanılabilir. CORS kuralları yalnızca tarayıcılarda geçerli olsa da eski sürümlerin bir pakete ihtiyacı vardır.
Öğrenmeye devam et
Test, WordPress veya SEO konusunda yardıma mı ihtiyacınız var?
Ekiplerin daha iyi yazılımlar sunmasına ve sitelerini büyütmesine yardımcı oluyoruz. Bize ne üzerinde çalıştığınızı söyleyin, biz de bir sonraki adım için net bir öneride bulunalım.
Daha fazla kılavuz test, yapay zeka ve modern geliştirme
Bu makaleyi beğendiniz mi? Bir konu seçin ve doğrudan en yeni eğitimlerimize geçin.
Yapay Zeka Halüsinasyonları Açıklandı: Dil Modelleri Neden İşleri Düzeltiyor ve Nasıl Azaltılabilir?
Yapay zeka halüsinasyonları açıkladı: ne olduklarını, dil modellerinin bunları neden ürettiğini, yaygın türlerini, temellendirme ve yönlendirmelerle…
Makaleyi okuyun →DevOpsAçıklanan Ortam Değişkenleri: .env Dosyaları, Sırlar ve Yapılandırma Doğru Yapıldı
Çalıştırdığımız Python örnekleriyle açıklanan ortam değişkenleri: bunları okumak ve ayarlamak, neden her değerin bir dize olduğu, .env dosyaları, sü…
Makaleyi okuyun →Yazılım geliştirmeAPI Hız Sınırlamasının Açıklaması: Algoritmalar, Başlıklar ve 429 Hatalarının Ele Alınması
API hızı sınırlaması, çalıştırdığımız bir simülasyonla açıklanmıştır: belirteç kümesi, sabit pencere, kayan pencere, 429 yanıt, hız sınırı başlıklar…
Makaleyi okuyun →Test otomasyonuPython'da alay etme: Unittest.mock, patch ve Testleri Yalan Yapan Hatalar
Unittest.mock ile Python'da alay etme, test edildi: Sahte ve dönüş_değeri, yan_etki, bir adın kullanıldığı yerde yama uygulama, spesifikasyon ve oto…
Makaleyi okuyun →Yazılım testiKod Kapsamının Açıklaması: Hat ve Şube Kapsamı ve %100'ün Gerçek Anlamı
Kod kapsamı gerçek bir kapsama.py çalışmasıyla açıklanmıştır: hat, şube ve durum kapsamı, bir raporun okunması, %100 kapsamın neden hâlâ hataları ka…
Makaleyi okuyun →Veritabanları ve SQLSQL'de DELETE vs TRUNCATE vs DROP: Farklılıklar, Geri Alma ve Her Biri Ne Zaman Kullanılmalı
DELETE vs TRUNCATE vs DROP test edilmiş SQL ile açıklandı: her birinin neyi kaldırdığı, geri aldığı, tetiklediği, kimlik sıfırlaması, hızı ve Postgr…
Makaleyi okuyun →Veritabanları ve SQLAçıklanan SQL Görünümleri: Örneklerle Tuzakları Oluşturun, Kullanın ve Önleyin
Çalıştırdığımız sorgularla açıklanan SQL görünümleri: görünüm oluşturma, canlı sonuçlar, sütunları gizleme, performans, güncellenebilir ve gerçekleş…
Makaleyi okuyun →Yazılım geliştirmeTypeScript Arayüzü ve Tür: Gerçek Farklılıklar, Derleyiciyle Test Edildi
TypeScript arayüzü ve türü, gerçek derleyiciyle kontrol edildi: her ikisinin de yapabileceği, yalnızca birinin yapabileceği, bildirim birleştirme, g…
Makaleyi okuyun →Yazılım geliştirmePython *args ve **kwargs'ın Açıklaması: Açık Örneklerle Esnek Fonksiyonlar
Python *args ve **kwargs çalıştırdığımız kodla açıklanmıştır: paketleme ve paketten çıkarma, parametre sırası, yalnızca anahtar kelime ve yalnızca k…
Makaleyi okuyun →Yazılım geliştirmePython Lambda İşlevleri: Söz Dizimi, Gerçek Kullanımlar ve Ne Zaman Kullanılmaması Gerektiği
Çalıştırdığımız kodla açıklanan Python lambda işlevleri: sözdizimi, anahtarla sıralama, harita ve filtre, kapatmalar, geç bağlama tuzağı ve normal b…
Makaleyi okuyun →Yapay zekâYapay Zeka Ajanları Nelerdir? Çalıştırabileceğiniz Basit Bir Aracı Döngüsüyle Nasıl Çalışırlar?
Yapay zeka ajanları nedir? Aracı döngüsüne, araçlara, belleğe ve korkuluklara ilişkin basit bir kılavuz, çalıştırdığımız küçük bir Python döngüsü, g…
Makaleyi okuyun →DevOpsİzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark
İzleme ve gözlemlenebilirliğin açıklanması: bilinen ve bilinmeyen arızalar, günlükler, ölçümler ve izler, ödeme olayının gözden geçirilmesi, altın s…
Makaleyi okuyun →DevOpsDocker Birimleri ve Bağlama Bağlantıları: Konteyner Verilerini Doğru Şekilde Kalıcılaştırın
Docker birimleri ile bağlama bağlamaları arasındaki karşılaştırma açıklandı: kapsayıcı verilerinin neden kaybolduğu, adlandırılmış birimler, bağlama…
Makaleyi okuyun →Test otomasyonuTDD ve BDD: Temel Farklılıklar, Her İki Şekilde Geliştirilmiş Bir Özellik ve Her Birinin Ne Zaman Kullanılacağı
TDD ve BDD, her iki yönde de oluşturulmuş bir indirim özelliğiyle açıklandı: çalıştırdığımız kodla kırmızı-yeşil-refactor, Verilen-Ne Zaman-O Zaman …
Makaleyi okuyun →Yazılım testiKullanıcı Kabul Testi (UAT): Süreç, Kontrol Listesi ve Gerçek Örnekler
Kullanıcı kabul testi açıklandı: bunu kimin yürüttüğü, QA'dan farkı, yedi adımlı bir süreç, bir UAT test senaryosu şablonu, bir kontrol listesi, otu…
Makaleyi okuyun →Veritabanları ve SQLAçıklanan SQL NULL Değerleri: IS NULL, COALESCE, NULLIF ve Kaçınılması Gereken Tuzaklar
SQL NULL değerleri, çalıştırdığımız sorgularla açıklandı: üç değerli mantık, IS NULL, COALESCE, NULLIF, toplamaların, birleştirmelerin ve sıralamanı…
Makaleyi okuyun →Veritabanları ve SQLSQL CASE WHEN İfadesi: Sözdizimi, Gerçek Örnekler ve Yaygın Hatalar
SQL CASE WHEN çalıştırdığımız sorgularla açıkladı: basit ve aranmış formlar, koşul sırası, SUM'lu pivotlar, COUNT hileleri, özel sıralama, güncellem…
Makaleyi okuyun →Yazılım geliştirmeJWT Nedir? JSON Web Belirteçleri Bir Çalışma Örneğiyle Açıklanıyor
JWT nedir? JSON Web Tokens açıkladı: üç bölüm, çalıştırdığımız kodda oluşturulan ve üzerinde değişiklik yapılan bir token, JWT ile oturumlar, depola…
Makaleyi okuyun →Yazılım geliştirmeJavaScript Olay Döngüsü Açıklaması: Örneklerle Çağrı Yığını, Mikro Görevler ve Zamanlayıcılar
JavaScript olay döngüsü çalıştırdığımız kodla açıklandı: çağrı yığını, görev ve mikro görev kuyrukları, setTimeout 0'ın neden anında olmadığı, engel…
Makaleyi okuyun →Yazılım geliştirmePython Jeneratörleri ve Verim Açıklaması: Gerçek Örneklerle Bellekten Tasarruf Edin
Python üreteçleri ve verim, çalıştırdığımız kodla açıklandı: nasıl duraklatılır ve devam ettirilir, ölçülen bellek tasarrufları, işlem hatları, sons…
Makaleyi okuyun →Yapay zekâGömmeler Nelerdir? Vektörler ve Kosinüs Benzerliği Basitçe Açıklandı
Gömmeler nedir? Vektörler, kosinüs benzerliği ve anlamsal aramaya ilişkin sade dilli bir kılavuz; çalıştırdığımız küçük bir örnek, yaygın kullanımla…
Makaleyi okuyun →DevOpsMavi-Yeşil ve Kanarya Konuşlandırılması: Farklılıklar, Takaslar ve Nasıl Seçilir
Mavi-yeşil ve kanarya konuşlandırması açıklandı: her birinin nasıl çalıştığı, maliyet, risk ve geri alma, test ettiğimiz istikrarlı kullanıcı grubu,…
Makaleyi okuyun →Test otomasyonuKesintili Testler: Bunların Sebepleri ve Nasıl Düzeltileceği
Yaptığımız demolarla açıklanan hatalı testler: ana nedenler, birinin nasıl doğrulanacağı ve teşhis edileceği, zamanlama için uygun düzeltmeler, payl…
Makaleyi okuyun →Yazılım testiYük Testi ve Stres Testi: Farklılıklar, Metrikler ve k6 Örnekleri
Yük testi ve stres testinin açıklaması: her birinin neyi kanıtladığı, ani yükselme ve soğuma testleri, önemli ölçümler, ortalamaların neden yanıltıc…
Makaleyi okuyun →Yazılım testiTest Senaryosu ve Test Senaryosu: Temel Farklılıklar, Örnekler ve Her Biri Ne Zaman Kullanılmalı?
Test senaryosu ve test senaryosunun açıklaması: net tanımlar, yan yana tablo, senaryolardan vakalara, şablonlara ve her birinin ne zaman kullanılaca…
Makaleyi okuyun →Veritabanları ve SQLSQL Sorgu Optimizasyonu: Zamanlamalarla Yürütme Planlarını Okuyun ve Yavaş Sorguları Düzeltin
SQL sorgu optimizasyonu bir milyon satırda test edilmiştir: yürütme planlarını okuyun, doğru dizinleri ekleyin, değiştirilemeyen filtreleri düzeltin…
Makaleyi okuyun →Veritabanları ve SQLSQL UNION ve UNION ALL: Farklılıklar, Örnekler ve Test Edilmiş Performans
SQL UNION ve UNION ALL, yürüttüğümüz sorgularla açıklandı: kopyalar, her ikisinin de takip ettiği kurallar, gerçek bir veri hatası, ölçülen performa…
Makaleyi okuyun →Yazılım geliştirmeJavaScript Fetch API Eğitimi: GET, POST, Hata İşleme ve Zaman Aşımları
Yerel bir sunucuya karşı test edilen bir JavaScript Fetch API öğreticisi: GET ve POST, 404'ün neden atmadığı, yeniden kullanılabilir bir yardımcı, s…
Makaleyi okuyun →Yazılım geliştirmePython Dosya İşleme: Örneklerle Okuma, Yazma, CSV, JSON ve pathlib
Python dosya işleme, çalıştırdığımız kodla açıklanmıştır: açık modlar, büyük dosyaları okuma, CSV, JSON, pathlib, ikili dosyalar, güvenli yazma, hat…
Makaleyi okuyun →Yazılım geliştirmeGit merge vs rebase: farklar, örnekler ve hangisi ne zaman kullanılır
Git merge vs rebase; gerçek log çıktısı, karşılaştırma tablosu, rebase'in altın kuralı ve güvenli bir ekip iş akışıyla anlatılıyor.
Makaleyi okuyun →Yazılım geliştirmePython Liste Üreteci (List Comprehension): Sözdizimi, Örnekler ve Kaçınılacak Durumlar
Python list comprehension anlatımı: sözdizimi, filtreleme, if-else, iç içe döngüler, ölçülmüş süreler ve düz for döngüsünün daha iyi olduğu durumlar.
Makaleyi okuyun →Veritabanları ve SQLSQL JOIN Örneklerle Açıklama (Inner, Left, Right, Full)
SQL JOIN'leri örnek tablolar ve sorgularla adım adım öğrenin: INNER, LEFT, RIGHT, FULL, CROSS ve SELF; yaygın hatalar ve performans ipuçları.
Makaleyi okuyun →