Bu Yazıda JSON (Javascript Object Notation), XML (Extensible Markup Language) ve YAML Hakkında Bilgi Edineceğiz.
Data Serialization
Verilerin Bir Dosyada Saklanmasını ve Ağ Üzerinden İletilmesini Sağlamak Amacıyla Karmaşık Verileri Standart Bir Biçime Dönüştürme İşlemidir. Verilerin Her İki Programın da Anlayabileceği Şekilde Birbirleri Arasında İletilmesini Sağlar.
Bir Uygulama Python'da ve Diğeri Java'da Yazılmışsa Her İki Programlama Dili de Verileri Farklı Şekilde Depolar. Bu Nedenle Birbirleri Arasında Veri Göndermek için Standart Biçimlere İhtiyaç Duyulur.
En Temelden Başlayalım. Değişken Nedir?
interface_name, status, ip_address, netmask. Bunlar Değişken Örneğidir. Değişkenler, Verileri Depolar.
- "ip_address" = Değişken
- "192.168.1.1" = Veri
Data Serialization Kullanılmadan Veri Alışverişlerinin Nasıl Yapılamayacağını Görelim.
App (REST Client), SDN Controller'dan Bilgi Almak için GET Mesajı Gönderiyor. Controller (REST Server), Değişkenleri JSON gibi Standart Bir Biçime Dönüştürmeden Doğrudan Client'e gönderiyor. Ancak Client Aldığı Verileri Anlamıyor. App ve Controller Farklı Dillerde Yazılmış Programlardır ve Verileri Farklı Şekilde Depolarlar, Doğrudan İletişim Kuramazlar.
Client, Yeniden GET Mesajı Gönderiyor. Controller Bu Sefer İstenen Değişkenleri Standart Bir Biçime, JSON'a Dönüştürüp Ağ Üzerinden Client'e Gönderiyor. Değişkenler Hem Client Hem de Controller'ın Anlayacağı Standart Bir Biçimde olduğundan Client Bu Değişkenleri Alıp Kendi Yerel Formatına Dönüştürebilir.
JSON (Javascript Object Notation)
Veri Nesnelerini Depolamak ve İletmek için İnsan Tarafından Okunabilen Açık Standart Dosya Formatıdır. Makineler Arasında Veri Alışverişi için Kullanılsa da Aynı Zamanda İnsanlar Tarafından da Okunabilir. JSON, RFC 8259'da Standartlaştırılmıştır.
JSON, JavaScript Dilinden Türetilmiştir. Ancak Dilden Bağımsızdır ve Birçok Modern Programlama Dili JSON Verileri Üretebilir ve Okuyabilir.
REST API Genellikle JSON Kullanır.
JSON'da Boşluk ve Satır Sonu Önemsizdir.
JSON, Dört adet Primitive Veri Türüne Sahiptir:
- string
- number
- boolean
- null
JSON İki adet Structure Veri Türüne Sahiptir:
- object
- array
JSON Primitive Data Types
String
- Metinsel Bir Değerdir ve Çift Tırnak (" ") Arasına Yazılır.
- Örnekler
- "Hello."
- "five"
- "5"
- "true"
- "null"
Number
- Sayısal Bir Değerdir.
- Örnekler
- 5
- 100
- …
Booelean
- Yalnızca İki olası Değeri olan Bir Veri Türüdür.
- Örnekler
- true
- false
- Örnek olarak OSPF'in Etkin olduğu Bir Portta 'passive' Adlı Bir Değişken, Port Pasif Durumdaysa true Değerine ve Port Pasif Durumda Değilse false Değerine Sahip olabilir.
null
- Nesnenin Herhangi Bir Değerinin olmadığını Belirtir.
- Örnek
- null
JSON Structured Data Types
Object
- Anahtar / Değer Çiftlerini (Key/Value Pairs) İçeren Sırasız Bir Listedir ve Küme Parantezleri {} ile Çevrilidir. Sözlük (Dictionary) olarak da Bilinir.
- Anahtar, String Değer olmalıdır. Değer, Herhangi Bir JSON Veri Türü olabilir (string, number, boolean, null, object, array).
- Anahtar ve Değer, İki Nokta Üst Üste : ile Ayrılır. Birden Çok Anahtar / Değer Çifti Varsa Her Bir Çift Virgül ile Ayrılır.
- JSON Object Örnekleri
- Örnek 1
- Örnek 2
- Yukarıdaki Resimde Üstte ve Altta Kırmızı Renkteki Süslü Parantezler ile Gösterilen Bir JSON Nesnesi Var. Bu Nesnenin İçinde İki adet Anahtar / Değer Çifti Vardır. Görebileceğiniz gibi Değer, Object Türünde olabilir.
- İlk Anahtar / Değer Çiftinin Anahtar Değeri "device" ve Değer Mavi Renkteki Süslü Parantezler ile Gösterilen Bir Nesnedir. Yani Bir Nesnenin İçinde Nesne Var. Nesne İçindeki Nesneler Nested Objects olarak Adlandırılır. Bu Nesnede Birden Çok Anahtar / Değer Çifti Var, "name": "R1", "vendor": "Cisco", "model": "1101"
- İkinci Anahtar / Değer Çiftinin Anahtar Değeri "interface_Config" ve Değer Mor Renkli Süslü Parantezler ile Gösterilen Nesnedir. Bu Nesnede Birden Çok Anahtar / Değer Çifti Var.
- Gördüğünüz gibi Girinti, Satır Sonları ve Farklı Renkler Kullanarak okumayı oldukça Kolaylaştırıyorum. Ancak JSON Verileri Her Zaman Böyle Görünmez. Boşluk Önemsizdir ve Yalnızca İnsanlar için Okumayı Kolaylaştırmak için Kullanılır. Uygulamanın Kendisi için Bu Boşluklara İhtiyaç Yoktur.
Array
- Virgülle Ayrılmış Değerler Dizisidir ve Köşeli Parantez [ ] Arasına Yazılır. Değerlerin Aynı Veri Türünde olması Gerekmez.
- Örnek
- Bu Örnekte İki adet Anahtar / Değer Çiftine sahip JSON Object Var ve Her İki Değer de Array'dir.
- İlk Array, "interface" Anahtarının Değeri, Her Biri Arasında Virgül olacak Şekilde Üç Interface Adını Listeler.
- İkinci Array, "random_values" Anahtarının Değeri, "Hi" ve 5
Aşağıdaki Resimde show ip interface brief Komutunun Çıktısı ve Aynı Çıktının JSON'daki Bir Versiyonu Görülmekte.
Yukarıdaki JSON Çıktısı, Cisco Cihazındaki Gerçek JSON Çıktısı Değildir, Bu JSON Verilerini Kendim Yazdım. Mesele Şu ki CLI'deki Show Komutlarının Çıktıları Biz İnsanlar için Kolay okunsa da Bilgisayarların Anlayabileceği Formatta Değiller. Öte Yandan Bilgisayarların JSON Formatını Anlaması için Çok Kolaydır ve JSON Formatını Yukarıdaki Resimde olduğu gibi Düzgün Bir Şekilde Biçimlendirirsek Aynı Zamanda İnsan Tarafından da Okunabilir.
XML (Extensible Markup Language)
- İşaretleme Dili (Markup Language) olarak Geliştirildi, Ancak Şimdi Veri Serileştirme Dili olarak Kullanılıyor.
- REST API Tarafından Kullanılabilir.
- Boşluk Önemsizdir.
- <key>value</key>
- Cisco IOS Komut Çıktısını XML Formatında Görüntülemek için Komut Sonuna | format Ekleyin.
entry Anahtarları ile Belirtilmiş İki adet Interface var. İlk entry Anahtarının İçinde Interface, IP-Address, OK, Method, Status ve Protocol Anahtarları Vardır. Değer, Bu Anahtarların Ortasındadır.
YAML
- Başka Bir Yazıda Ele Alacağımız Ağ Otomasyon / Yapılandırma Aracı olan Ansible Tarafından Kullanılır.
- İnsanlar tarafından kolayca okunabilir.
- Boşluk Önemlidir.
- Girinti Çok Önemlidir.
- YAML Dosyaları --- ile başlar.
- - Bir Listeyi Belirtmek için Kullanılır.
- Anahtar ve Değer, Anahtar:Değer olarak Temsil Edilir.
- Örnek
Quizs
Cevaplar (Sırası ile):
- b
- c
- e
- c
- b
- d
- a
- d
- c
- a
Okuduğunuz için Teşekkürler.
Yorum Gönder
Yorum Gönder