Dünyanın en detaylı ücretsiz FDE + DevOps kütüphanesi: 140 üzeri ders, 70 üzeri lab ve 80 uzun yazı, İngilizce ve Türkçe. Öğrenmeye başla →

DevOps Foundations · Modül 3: Bash ve Python ile güvenli otomasyon

JSON ve API İşleme

API'ler yapılı veri döner; betikler alan kayana kadar metin muamelesi yapar. Bu ders JSON'u varsayılanlı ayrıştırılmış yapı yapar; yukarı değişiklikler gece çağrısı yerine ele alınmış duruma iner.

10 dk okuma

Kazanımlar

  • JSON'dan alanı grep ile değil jq ile çekmek
  • Eksik alan, null ve tip değişikliklerini çökmeden ele almak
  • Ayrıştırma karmaşıklığına göre Bash+jq ile Python arasında seçmek
  • İçeriğe dokunmadan önce yanıt şeklini doğrulamak

Neden önemli

Dağıtım kapısı API yanıtından "status": "healthy" dizesini grep'ler. API iç içe nesne ekler, grep hata mesajındaki alt dizeyle eşleşir; sağlıksız sürüm yeşil kapıyla çıkar. Metin araçları yapıyı okuyamaz; tesadüfen tekrarlanan şekilleri eşleştirir. JSON'u JSON olarak ayrıştırmak aynı kontrolü varsayılanlı alan aramasına çevirir; eksik alanlar tesadüfi geçiş yerine açık arıza olur.

Kavramlar

jq JSON için filtre dilidir, süslü grep değildir. .items[0].name yapıda yürür; .items[]? yokluğu tolere eder; // varsayılan verir (.replicas // 1); -e çıkış kodunu son çıktıdan kurar ve jq'yu gerçek kapı yapar: jq -e '.ready == true' alan yanlış veya eksikken betiği düşürür. select() dizileri döngüsüz süzer; -r ham dize basar, jetonlar sonraki komuta sahte tırnak taşımaz. jq programını tek tırnakla alıntıla; kabuk değerlerini --arg ile geçir, değişkenleri filtreye gömmek 1. dersin her enjeksiyonunu geri getirir.

Aracı karmaşıklığa göre seç. Tek alan, tek varsayılan, tek kontrol: Bash ve jq okunur kalır. İç içe şekillerde dallanma, geri çekilmeli yeniden deneme veya istek gövdesi kurma: json ve urllib veya requests ile Python; istisnalar çıkış kodu arkeolojisinin yerini alır. Sınır üç jq borusudur; ötesinde kabuk sürümü sabah 3'te kimsenin hata ayıklamayacağı salt-yazılır koddur. İkisi de içerikten önce şekli doğrulamalıdır: önce sürüm alanı, beklenen üst düzey anahtarlar, sonra değerler; beklenmeyene kapalı düş.

Null ve tip değişiklikleri üretim durumlarıdır. Dize olan alan liste olur; sayı dizeye döner; nesne sarmalayıcı alır. Tek şekil varsayan kod çöker veya daha kötüsü yanlış dala sessizce girer. Varsayılanlar null'ları, açık tip kontrolleri (type == "array") değişiklikleri, API sunuyorsa şema sürüm alanı önce doğrulanarak yeni API nesillerinin yanlış ayrışmak yerine yüksek sesle düşmesini sağlar.

Uygulamalı örnek

Dağıtım durumu ucunda kapı, düzgün ayrıştırılmış:

status=$(curl -sf http://localhost:18090/rollout) || exit 1 ready=$(printf '%s' "$status" | jq -er '.ready // false') || exit 1 version=$(printf '%s' "$status" | jq -er '.version // "unknown"') [ "$ready" = "true" ] || { echo "not ready: version=$version"; exit 1; }

Beklenen okuma: curl -f ayrışma başlamadan HTTP hatalarında betiği düşürür; -e eksik veya yanlış alanlarda jq'yu düşürür; // false yokluğu, bir şeyle eşleşebilecek boş dize yerine açık hazır-değil yapar; sürüm nöbetçi mühendisin önce okuduğu log satırına biner. Bu kapının grep'li sürümü {"ready": "not yet"} değerinde geçer; bu dersin önlediği olay tam budur.

Yaygın yanlış hamle

Üretim kapılarında JSON'u grep, sed veya cut ile ayrıştırmak. Bugünkü denemede çalışır; ilk güzel basılmış yanıt, yeniden sıralanmış anahtar veya iç içe eşleşmede düşer; arıza kipi yüksek sesli hata değil sahte geçiştir. Metin araçları satır okur; JSON'un satırı yoktur. Tek istisna insanların log elemesidir; orada grep keşiftir, otomasyon değil.

Lab ve sonraki adım

L09 labı zaman aşımı, 429 ve bozuk JSON sunan yerel sahte API verir; her biri için ele alınmış durum ve test ister. Sırada 4. ders beklemeyi sınırlar; zaman aşımları, yeniden denemeler ve ikisini de kanıtlayan testler.

Mini kontrol

4 soruluk isteğe bağlı öz kontrol. Yanıtlar cihazından çıkmaz, saklanmaz ve hiçbir değerlendirmeye sayılmaz.

Ders geri bildirimi

Henüz yayında geri bildirim yok.

Geri bildirim yazmak için giriş yap ve dersi tamamla.

Kaynaklar

Alıştırma

Herhangi yerel JSON'u (veya deneme dosyasını) çeken, iç içe alanı varsayılanla çıkaran, alan eksikken sıfır-dışı çıkan beş satırlık kapı yaz. İyi girdide geçtiğini, alan silinmiş girdide düştüğünü göster.

Geçme kriterleri

Kapı varsayılanlı gerçek JSON ayrıştırıcı kullanıyor; geçiş ve düşüş durumları ikisi de gösterilmiş; JSON'a grep/sed/cut değmemiş.

İlerlemeni kaydetmek için giriş yapÜcretsiz hesap: yalnızca ders ilerlemen ve quiz sonuçların saklanır.