Skip to content

জেসন (JSON)

JSON কি এবং কেন গুরুত্বপূর্ণ?

JSON বা JavaScript Object Notation হলো একটি সহজ, টেক্সট-ভিত্তিক ডেটা ফরম্যাট। এটি এমনভাবে তৈরি করা যেন মানুষও সহজে পড়তে পারে, আবার কম্পিউটারও সহজে প্রসেস করতে পারে।

একটা উদাহরণ দিয়ে বুঝি:

{
    "device": "router1",
    "vendor": "Cisco",
    "model": "ISR4331"
}

এখানে আমরা দেখছি:

  • "device" হচ্ছে কী (key), "router1" হচ্ছে তার ভ্যালু
  • "vendor" এর ভ্যালু "Cisco"
  • "model" এর ভ্যালু "ISR4331"

এটা দেখে মানুষও বুঝতে পারছে যে এটা একটা রাউটার সম্পর্কে তথ্য, আবার কম্পিউটারও এই ডেটা সহজে প্রসেস করতে পারবে।

জটিল উদাহরণ দেখি

একটা নেটওয়ার্ক ইন্টারফেসের কনফিগারেশন কেমন দেখতে হতে পারে:

{
    "interface": {
        "name": "GigabitEthernet0/1",
        "ip_address": "192.168.1.1",
        "subnet_mask": "255.255.255.0",
        "status": "up",
        "access_list": [
            {
                "name": "ALLOW_WEB",
                "direction": "in",
                "rules": [
                    {
                        "action": "permit",
                        "protocol": "tcp",
                        "port": 80
                    },
                    {
                        "action": "deny",
                        "protocol": "tcp",
                        "port": 23
                    }
                ]
            }
        ]
    }
}

এই উদাহরণে দেখুন কিভাবে:

  • সাধারণ কী-ভ্যালু পেয়ার আছে (যেমন name, status)
  • নেস্টেড অবজেক্ট আছে (interface এর ভেতরে আরও তথ্য)
  • অ্যারে আছে (access_list এর ভেতরে অনেকগুলো রুল)

JSON এর সুবিধাগুলো

  1. সহজবোধ্য ফরম্যাট:

  2. ইনডেন্টেশন দিয়ে স্ট্রাকচার বোঝানো যায়

  3. কী-ভ্যালু পেয়ার সহজেই পড়া যায়
  4. কোন স্পেশাল সিনট্যাক্স শিখতে হয় না

  5. ফ্লেক্সিবল স্ট্রাকচার:

  6. সহজেই নতুন ফিল্ড যোগ করা যায়

  7. ডেটার গভীরতা যত ইচ্ছা বাড়ানো যায়
  8. একই ডেটা বিভিন্নভাবে অর্গানাইজ করা যায়

  9. প্রোগ্রামিং ল্যাঙ্গুয়েজের সাপোর্ট: পাইথনে JSON নিয়ে কাজ করার উদাহরণ:

import json

# JSON ডেটা পড়া
with open('device_config.json', 'r') as f:
    config = json.load(f)

# JSON ডেটা লেখা
with open('output.json', 'w') as f:
    json.dump(config, f, indent=4)

নেটওয়ার্ক অটোমেশনে JSON এর ব্যবহার

  1. API কমিউনিকেশন:

  2. REST API কল করলে JSON ফরম্যাটে ডেটা আসে

  3. ডিভাইসের কনফিগারেশন JSON হিসেবে পাঠানো যায়

  4. কনফিগারেশন টেমপ্লেট:

  5. স্ট্যান্ডার্ড কনফিগ JSON ফাইলে রাখা যায়

  6. একই কনফিগ বিভিন্ন ডিভাইসে ব্যবহার করা যায়

  7. ডেটা স্টোরেজ:

  8. ডিভাইসের ইনভেন্টরি JSON এ রাখা যায়

  9. নেটওয়ার্ক টপোলজি JSON এ স্টোর করা যায়

JSON নেটওয়ার্ক অটোমেশনের একটি অপরিহার্য অংশ হয়ে উঠেছে। এর সহজ ব্যবহার এবং ফ্লেক্সিবিলিটি আমাদের জটিল নেটওয়ার্ক টাস্কগুলোকে সহজ করে তুলেছে।

নেটওয়ার্ক অটোমেশনে JSON এবং REST API

আজ আমরা একটা গুরুত্বপূর্ণ উদাহরণ দিয়ে দেখব কিভাবে JSON এবং REST API ব্যবহার করে একটা সিসকো ডিভাইসে লুপব্যাক ইন্টারফেস কনফিগার করা যায়। চলুন লাইন বাই লাইন কোডটা বুঝে নেই:

প্রয়োজনীয় লাইব্রেরি আনি

import requests     # REST API কল করার জন্য
import json        # JSON ডেটা হ্যান্ডল করার জন্য

এখানে:

  • requests লাইব্রেরি দিয়ে আমরা HTTP/HTTPS রিকোয়েস্ট পাঠাতে পারব
  • json লাইব্রেরি দিয়ে JSON ডেটা নিয়ে কাজ করব

ক্রেডেনশিয়াল সেটআপ করি

USER = 'admin'
PASS = 'C1sco12345'

এখানে:

  • ডিভাইসে লগইন করার জন্য ইউজারনেম আর পাসওয়ার্ড সেট করছি
  • রিয়েল ওয়ার্ল্ডে এই ইনফরমেশনগুলো সিকিওর ভাবে রাখতে হবে

SSL সার্টিফিকেট ওয়ার্নিং বন্ধ করা

requests.packages.urllib3.disable_warnings()

এটা:

  • টেস্টিং এনভায়রনমেন্টে SSL সার্টিফিকেট ভ্যালিডেশন ওয়ার্নিং বন্ধ করে
  • প্রোডাকশনে এটা বন্ধ করা ঠিক না

API এন্ডপয়েন্ট URL সেট করি

url = "https://devnetsandboxiosxe.cisco.com:443/restconf/data/ietf-interfaces:interfaces"

এই URL-এ:

  • devnetsandboxiosxe.cisco.com: সিসকো ডিভাইসের হোস্টনেম
  • 443: HTTPS পোর্ট নম্বর
  • /restconf/data/ietf-interfaces:interfaces: RESTCONF API এন্ডপয়েন্ট

JSON পেলোড বানাই

payload = {
    "ietf-interfaces:interface": {
        "name": "Loopback150",                      # ইন্টারফেসের নাম
        "description": "Link3 loopback interface",  # ইন্টারফেসের বর্ণনা
        "type": "iana-if-type:softwareLoopback",    # ইন্টারফেসের টাইপ
        "enabled": True,                            # ইন্টারফেস চালু করা
        "ietf-ip:ipv4": {                          # IPv4 কনফিগারেশন
            "address": [
                {
                    "ip": "10.1.11.1",              # IP ঠিকানা
                    "netmask": "255.255.255.0"      # সাবনেট মাস্ক
                }
            ]
        },
        "ietf-ip:ipv6": {}                         # খালি IPv6 কনফিগ
    }
}

এই JSON স্ট্রাকচার কি করে:

  • একটা লুপব্যাক ইন্টারফেস বানায়
  • তার বেসিক সেটিং করে দেয়
  • IPv4 ঠিকানা সেট করে দেয়

HTTP হেডার সেট করি

headers = {  
  'Accept': 'application/yang-data+json',      # রেসপন্স ফরম্যাট
  'Content-Type': 'application/yang-data+json'  # রিকোয়েস্ট ফরম্যাট
}

এই হেডারগুলো:

  • YANG-based JSON ডেটা ফরম্যাট ব্যবহার করছে
  • API সার্ভারকে বলে দিচ্ছে কি ধরনের ডেটা আদান-প্রদান হবে

API কল করি

response = requests.request(
    "POST",                  # HTTP মেথড
    url,                     # API এন্ডপয়েন্ট
    auth=(USER, PASS),       # বেসিক অথেনটিকেশন
    headers=headers,         # HTTP হেডার
    data=json.dumps(payload), # JSON পেলোড
    verify=False             # SSL ভেরিফিকেশন বন্ধ
)

এখানে:

  • POST রিকোয়েস্ট পাঠাচ্ছি নতুন ইন্টারফেস বানাতে
  • অথেনটিকেশন ইনফরমেশন পাঠাচ্ছি
  • পেলোড JSON স্ট্রিং-এ কনভার্ট করে পাঠাচ্ছি

রেসপন্স দেখি

print(response.text)

এটা:

  • API রেসপন্স প্রিন্ট করে
  • সফল হলে খালি রেসপন্স আসবে
  • এরর হলে এরর মেসেজ দেখাবে

পুরো প্রক্রিয়াটা কি করে?

  1. সিসকো ডিভাইসের RESTCONF API-তে কানেক্ট করে
  2. একটা নতুন লুপব্যাক ইন্টারফেস বানানোর JSON কনফিগারেশন পাঠায়
  3. ইন্টারফেসটা বানিয়ে IP ঠিকানা সেট করে দেয়
  4. রেসপন্স ফেরত দেয়

এই উদাহরণটা দেখাচ্ছে কিভাবে JSON আর REST API মিলে নেটওয়ার্ক অটোমেশনকে সহজ করে তুলেছে।