Skip to content

কেন এপিআই কোড করা শিখবেন?

নেটওয়ার্ক ডিভাইসগুলো শুরুতে মানুষের সাথে যোগাযোগ করার জন্য তৈরি করা হলেও পরে সময়ের সাথে সাথে মেশিনের সাথে যোগাযোগ করার জন্য তৈরি করা হয়েছে। আর, কতদিন মানুষ কষ্ট করবে? এই এপিআই তৈরির অর্থ হচ্ছে, মেশিন থেকে মেশিনের মধ্যে যোগাযোগ শুরু হয়েছে যা অনেকটাই 'সফটওয়্যার টু সফটওয়্যার' আন্ডারস্ট্যান্ডিং থেকে। এই সফটওয়্যার এবং নেটওয়ার্ক ডিভাইসের সফটওয়্যার একে অপরের সাথে যোগাযোগ করে এপিআই দিয়ে। এর অর্থ হচ্ছে আমাদেরকে কোড করা শিখতে হবে এপিআই দিয়ে।

এপিআই দিয়ে কোড করা শিখলে আপনি আপনার নেটওয়ার্ক ইনফ্রাস্ট্রাকচারের সঙ্গে দ্রুত এবং দক্ষতার সাথে বড় বড় বিশেষ করে রিপিটেটিভ কাজ শেষ করতে পারবেন।

সফটওয়্যার ডিফাইন্ড নেটওয়ার্ক

আমরা যেই নেটওয়ার্ক চালিয়ে বড় হয়েছি সেই নেটওয়ার্কের অ্যাক্সেস করার জন্য আমরা শুরুতে কনসোল কেবল নিয়ে ঘুরতাম। এরপরে আমরা রিমোটলি তাদেরকে টেলনেট অথবা সিকিউর শেল দিয়ে এক্সেস করতাম যদি আইপি কনফিগার করা থাকতো।

সাধারণত ওই ডিভাইসে তিন ধরনের অপারেশনাল প্লেন থাকতো। এর মধ্যে ডেটা প্লেন, যেটা আসলে রাউটার বা সুইচের আসল কাজ। এর কাজ ছিল, একটা পোর্টে প্যাকেট পেলে সেটাকে আর একটা ইগ্রেস পোর্টে যত তাড়াতাড়ি সম্ভব পাঠিয়ে দিত।

এর উপরেই ছিল কন্ট্রোল প্লেন, যার মধ্যে সনাতনভাবে বিভিন্ন অ্যালগরিদম চলত - যেটা ব্যবহার করে প্যাকেটগুলো নিজস্ব ডেসটিনেশনে যেত। যদি রাউটারে 'ওএসপিএফ' প্রোটোকল চালাতাম, তাহলে তার জন্য নির্দিষ্ট অ্যালগরিদম চলত এই কন্ট্রোল প্লেনে। সুইচে সাধারণত 'স্প্যানিং ট্রি' অ্যালগরিদম চলত এই কন্ট্রোল প্লেনে।

ফাইনালি, ম্যানেজমেন্ট প্লেনে একটা সফটওয়্যার চলত যার সাথে আমরা মানুষ সরাসরি যোগাযোগ করতাম। আমরা হয়তোবা টেলনেট অথবা সিকিউর শেল দিয়ে বিভিন্ন কমান্ড পাস করতাম সেগুলো সব যেতো এই ম্যানেজমেন্ট প্লেন দিয়ে।

এখন, মানুষ তো অনেক কাজ করলো। বুদ্ধিমান কিছু মানুষ চিন্তা করল যে, এই ডিভাইসগুলোর ম্যানেজমেন্ট প্লেনের সাথে যদি একটা সফটওয়্যার, বিশেষ করে একটা 'এসডিএন' কন্ট্রোলার লাগিয়ে দেওয়া যায় - তাহলে সেই সবগুলো রাউটার বা সুইচকে চালাবে একটা 'সেন্ট্রালাইজড' সিস্টেম থেকে।

এটাকে ডিস্ট্রিবিউটেড কন্ট্রোল প্লেন বলা যেতে পারে, যেখান থেকে 'এসডিএন কন্ট্রোলার' প্রতিটা ডিভাইস, সেটা রাউটার, সুইচ, ফায়ারওয়াল যাই হোক না কেন সবগুলোই 'এসডিএন কন্ট্রোলারের' আওতায় থাকবে।

কিভাবে আপনার প্রসেসগুলোকে কোড করবেন?

কোডিং হল একটা ল্যাংগুয়েজ ব্যবহার করে স্টেপ বাই স্টেপ ইন্সট্রাকশন তৈরি করার প্রক্রিয়া যা সেই কম্পিউটার বুঝতে পারে এবং সেই নির্দিষ্ট কাজটা সম্পন্ন করতে পারে। কোড শিখে এবং প্রোগ্রামেবল ইনফ্রাস্ট্রাকচারের সাথে কাজ করতে যে সময়ের ইনভেস্টমেন্ট প্রয়োজন, সেটা আমার সাথে দিলে এই ইনভেস্টমেন্টের উপর তখন থেকে শুরু করে কন্টিনিউয়াস রেজাল্ট পাবেন।

আপনাকে একটা সমস্যা দেওয়া হল, চলুন আমরা দুজনে মিলে সমস্যাটা সমাধান করি। আমাদের নেটওয়ার্কে বিভিন্ন কাজে প্রচুর ইন্টারফেস চালু করা থাকে যেটা 'ইনঅ্যাকটিভ' থাকলে বন্ধ করে দেয়া উচিত। আমরা হয়তোবা সেটা আর মনে করে বন্ধ করি না। আমরা এখানে একটা 'অটোমেশন' করতে চাচ্ছি যার মাধ্যমে একটা এপিআই রিকোয়েস্ট দিয়ে নেটওয়ার্কের যত ইন্টারফেস আছে 'ইনঅ্যাক্টিভ', সেটা ৩০ দিনের বেশি হয়ে গেলে বন্ধ করে দিব।

এখানে একটা হাই-লেভেল ডেসক্রিপশন দেওয়া হল:

  1. নেটওয়ার্কে একটা সুইচের স্টেটাস নিয়ে আসবো, তার সব ইন্টারফেসের তালিকা সহ
  2. ওই সুইচের ভেতরের একটা ইন্টারফেসের স্টেটাস নিয়ে আসি
  3. ইন্টারফেসের সর্বশেষ পরিবর্তনের সময় (টাইমস্ট্যাম্প) নিয়ে আসি
  4. চেক করুন ইন্টারফেসটা চালু আছে কিনা

যদি ইন্টারফেসটা ডাউন থাকে এবং ইন্টারফেসের শেষ পরিবর্তন ৩০ দিনের বেশি আগে হয়ে থাকে, তাহলে ইন্টারফেস বন্ধ করুন এবং তার ডেসক্রিপশনটা পাল্টে "ইন্টারফেস পলিসি অনুযায়ী বন্ধ" হিসাবে সেট করুন।

এই প্রক্রিয়াটা পাইথন কোডে দেখতে এরকম:

# নেটওয়ার্কের প্রতিটি সুইচের জন্য লুপ চালানো হচ্ছে
for switch in my_network:
    # প্রতিটি সুইচের সব ইন্টারফেসের জন্য আরেকটি লুপ
    for interface in switch:
        # যাচাই করা হচ্ছে ইন্টারফেসটি বন্ধ কিনা এবং শেষ পরিবর্তন 30 দিনের বেশি আগে কিনা
        if interface.is_down() and interface.last_change() > thirty_days:
            # যদি উপরের শর্ত সত্য হয়, তাহলে ইন্টারফেসটি বন্ধ করা হচ্ছে
            interface.shutdown()
            # ইন্টারফেসের ডেসক্রিপশন আপডেট করা হচ্ছে
            interface.set_description("Interface disabled per Policy")

আমি কোড অংশটা বাংলায় ব্যাখ্যা করে আবার লিখছি:

আমরা কি বুঝলাম?

  1. প্রথমে, my_network নামের একটি লিস্ট বা অবজেক্ট থেকে প্রতিটি সুইচকে নেওয়া হচ্ছে। এটা একটা লুপ দিয়ে চালানো হচ্ছে।
  2. প্রতিটি সুইচের জন্য, আমরা আরেকটা লুপ চালাচ্ছি যা সেই সুইচের সব ইন্টারফেস নিয়ে কাজ করবে।
  3. প্রতিটি ইন্টারফেসের জন্য, আমরা দুটি শর্ত যাচাই করছি:
  4. interface.is_down(): এটা চেক করছে ইন্টারফেসটা বন্ধ কিনা।
  5. interface.last_change() > thirty_days: এটি চেক করে ইন্টারফেসের শেষ পরিবর্তন ৩০ দিনের আগে হয়েছে কিনা।
  6. যদি উপরের দুটি শর্তই সত্য হয়, তাহলে:
  7. interface.shutdown(): এই ফাংশনটি ইন্টারফেসটিকে সম্পূর্ণভাবে বন্ধ করে দেয়।
  8. interface.set_description("Interface disabled per Policy"): এই লাইনটি ইন্টারফেসের ডেসক্রিপশন আপডেট করে, যাতে পরে কেউ দেখলে বুঝতে পারে কেন এটা বন্ধ করা হয়েছে।

এই স্যুডোকোডটা চালানোর ফলে, নেটওয়ার্কের সব নিষ্ক্রিয় ও দীর্ঘদিন অব্যবহৃত ইন্টারফেস স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে, যা নেটওয়ার্ক ম্যানেজমেন্টকে অনেক দক্ষ করে তুলবে।

এপিআই ব্যবহারের সুবিধা

  1. স্বয়ংক্রিয় ব্যাকআপ (Automated Backups): বিশাল নেটওয়ার্কের ক্ষেত্রে প্রতিটা ডিভাইসের কনফিগারেশন ব্যাকআপ রাখা অত্যন্ত গুরুত্বপূর্ণ। এপিআই ব্যবহার করে আপনি সহজেই প্রতিদিন বা প্রয়োজন অনুযায়ী সময়ে সময়ে ব্যাকআপ নিতে পারেন।

  2. প্রি- এবং পোস্ট-ভ্যালিডেশন (Pre- and Post-Validation): নেটওয়ার্ক পরিবর্তনের আগে এবং পরে ডিভাইসগুলোর স্টেটাস যাচাই করা জরুরি। এপিআই দিয়ে এই প্রক্রিয়াটা স্বয়ংক্রিয় করতে পারেন যাতে কোন ধরণের ভুল না হয়।

  3. রিপোর্টিং (Reporting): এপিআই ব্যবহার করে বিভিন্ন ডেটা সংগ্রহ করে সেগুলোর উপর ভিত্তি করে রিপোর্ট তৈরি করা যায়, যা নেটওয়ার্ক টিমের জন্য অত্যন্ত দরকারি। আমি নিজেই আমাদের নেটওয়ার্কের মধ্যে শুরুতেই এ ধরনের অটোমেশন করেছিলাম। নেটওয়ার্কের ভেতরের হেলথ, নেটওয়ার্কটা আসলে কিভাবে চলছে সেটাকে জানার জন্য এপিআই দিয়ে অটোমেটেড রিপোর্টিং ব্যবহার শুরু করা যেতে পারে।

  4. কন্টিনিউয়াস কমপ্লায়েন্স (Continuous Compliance): নেটওয়ার্ক ডিভাইসগুলো কমপ্লায়েন্স নীতিমালা মেনে চলছে কিনা সেটা নিয়মিত টেস্ট করা প্রয়োজন। এপিআই দিয়ে আপনি এই প্রক্রিয়াটা স্বয়ংক্রিয় করতে পারেন। মানুষ খুব ভুলো মন, সে কারণে ব্যাপারটা মানুষের হাতে না ছেড়ে দিয়ে যন্ত্রের হাতে ছেড়ে দিলে কোন সমস্যায় পড়তে হয় না।

  5. ইভেন্ট-ড্রিভেন অটোমেশন (Event-Driven Automation): নির্দিষ্ট ইভেন্ট ঘটলে স্বয়ংক্রিয় পদক্ষেপ গ্রহণ করা যায় এপিআই এর মাধ্যমে, যা সময়মত সমস্যা সমাধান করতে সাহায্য করে। এটা হলে ওটা হবে, অথবা এটা, এটা, এটা, এই তিনটা কাজ যখন হবে তখন এর রেজাল্ট হিসেবে আরেকটা কাজ করাতে হবে সেটাও করা সম্ভব এপিআই এর মাধ্যমে। অনেক সময় এটাকে ‘রুল বেজড’ অটোমেশন বলা যেতে পারে, যেখানে কয়েকটা কন্ডিশন ফুলফিল করলেই আরেকটা কাজ করার কমান্ড এপিআই দিয়ে চলে আসবে।

  6. কনফিগারেশন ম্যানেজমেন্ট (Configuration Management): এপিআই ব্যবহার করে ডিভাইসগুলোর কনফিগারেশন (এককভাবে অথবা গ্রুপ গ্রুপ করে) পরিবর্তন করা সহজ হয়, যা সম্পূর্ণ নেটওয়ার্ককে সঙ্গতিপূর্ণভাবে (যেভাবে চালানো উচিত) এবং নির্ভরযোগ্যভাবে (কোন ধরনের মানুষের ভুল অর্থাৎ হিউম্যান এরর ছাড়াই) ম্যানেজমেন্ট করা যায়। এটা যে কোন আইএসপি এবং নেটওয়ার্ক কোম্পানির শুরুর দিকের কাজ যা ইঞ্জিনিয়ারদের সময় অনেক কমিয়ে আনে।

  7. জিরো-টাচ প্রভিশনিং (Zero-Touch Provisioning): নতুন ডিভাইস নেটওয়ার্কে যুক্ত করার সময় স্বয়ংক্রিয়ভাবে কনফিগারেশন পুশ করা যায় এপিআই এর মাধ্যমে, যা প্রক্রিয়াটা দ্রুত এবং নির্ভুলভাবে সম্পন্ন করতে সাহায্য করে। অনেক সময় পুরো কনফিগারেশন পুশ না করা গেলেও বেজলাইন কনফিগারেশন পুশ করলেও নেটওয়ার্ক ইঞ্জিনিয়ারদের অনেক সময় বেঁচে যায়। নতুন নতুন সাইট ডেপ্লয় করার সময় এই অটোমেশন খুবই কাজে লাগে।

এপিআই এবং মডার্ন প্রোগ্রামিং নিয়ে হাইপ

আচ্ছা, আপনি বললেন, 'এপিআই' এবং মডার্ন প্রোগ্রামিং ল্যাংগুয়েজ তো আর নতুন কিছু নয়? তাহলে এটা নিয়ে ইদানিং এত হাইপ কেন?

ঠিক ধরেছেন। ঠিক মেশিন লার্নিং এর মতো জিনিসটা। ২০/৩০ বছর আগেও তো মেশিন লার্নিং ছিল। আগে দুর্দান্ত হার্ডওয়্যার, র‍্যাম, স্টোরেজ ডিভাইস, প্রসেসিং পাওয়ার, ক্লাউড ইত্যাদি ইত্যাদির দাম হাতের নাগালে ছিল না বলেই মেশিন লার্নিং বা আর্টিফিশিয়াল ইন্টেলিজেন্স তখন হালে পানি পায়নি। এখন সবকিছুর এভেইলেবিলিটি এবং দাম নাগালে এসেছে বলে সেটা পাচ্ছে।

সেই একই জিনিস ঘটেছে মডার্ন প্রোগ্রামিং ল্যাংগুয়েজ এবং টুলগুলোর ব্যবহারে। এগুলো এখন অনেক 'ম্যাচিওর' হয়েছে। সফটওয়্যার ইন্ডাস্ট্রি এখন অন্য লেভেলে পৌঁছে গেছে।

মডার্ন প্রোগ্রামিং ল্যাংগুয়েজ যেমন জাভাস্ক্রিপ্ট, পাইথন, গো, সুইফট ইত্যাদি ইত্যাদি আর আগের মত ঝামেলাপূর্ণ নয়। এগুলোর সাথে হাজারো 'হেল্পার' লাইব্রেরি চলে এসেছে যেটা চিন্তাই করা যায় না। আগে, যেকোনো 'সাবস্ট্যানশিয়াল' কিছু করতে 'সি' অথবা 'সি++' এর দশ হাজার লাইন কোডের জন্য মাথা খাটাতে হতো। এখন মডার্ন ল্যাংগুয়েজ এবং তার প্যাকেজ বিশেষ করে তার হেল্পার লাইব্রেরিগুলো আমাদেরকে ওই একই জিনিস করে দিতে পারে ৫০-১০০/২০০ লাইনের ভিতরে।

রেস্ট এপিআই ব্যবহারের উদাহরণ

ধরা যাক, আমরা আমাদের একটা রাউটারকে প্রোগ্রাম করতে চাই সফটওয়্যার এর মাধ্যমে। মানুষ না, সফটওয়্যার ওয়েবসার্ভিস দিয়ে কনফিগারেশন পাল্টাবো এখানে। রাউটারের একটা ইন্টারফেস যোগ অথবা ডিলিট করবো আমাদের তৈরি সফটওয়্যার থেকে।

এই জিনিসটা আমরা করতে চাই 'এইচটিটিপিএস' ওয়েব সার্ভিসের মাধ্যমে। যেহেতু মেশিন-টু-মেশিন কমিউনিকেশন করবো, সে কারণে "কনসোল পোর্ট, টেলনেট অথবা সিকিউর শেল" এগুলোর কোনটাই ব্যবহার করব না। আমি সফটওয়্যারকে বলব, সে নিজে থেকেই রাউটারের সাথে যোগাযোগ করে যা কাজ করার সে করে ফেলবে।

এই যোগাযোগটা হবে 'সিকিউরিটি' নীতিমালা ঠিকমতো মেনে। এখানে আমরা ব্যবহার করবো 'রেস্ট এপিআই' যাকে অনেকে 'ওয়েব এপিআই'ও বলে থাকেন।

একজন ডেভেলপার যদি এই সফটওয়্যারটা তৈরি করতেন, তাহলে তাকে এইসব কাজ করতে হতো:

  1. একটা 'টিসিপি' কানেকশন চালু করতে হতো ৪৪৩ পোর্টে
  2. সার্টিফিকেট নেগোসিয়েশন বা এক্সচেঞ্জ এর জন্য 'টিএলএস'কে হ্যান্ডেল করতে হতো
  3. সার্টিফিকেটটাকে ভ্যালিডেট করতে হতো যাতে সিকিউর কানেকশন থাকে
  4. ওই 'টিসিপি' কানেকশনটাকে ঠিকমতো ম্যানেজ করতে হতো
  5. এইচটিটিপি রিকোয়েস্টটাকে ঠিকমত ফরম্যাট করতে হতো
  6. রাউটার থেকে এইচটিটিপি রেসপন্সটাকে ঠিকমতো ইন্টারপ্রেট করতে হতো

কিন্তু নেটওয়ার্ক ইঞ্জিনিয়ার হিসেবে আমরা পাইথনের 'রিকোয়েস্টস' লাইব্রেরি ব্যবহার করে খুব সহজেই এই কাজগুলো করতে পারি। প্রথমে প্যাকেজটা ইন্সটল করতে হবে:

$ pip install requests

এরপর একটা সহজ টেস্ট করে দেখি:

$ python
>>> import requests
>>> requests.get("https://api.github.com")
<Response [200]>

আপনার নিজের সফটওয়্যার যেটা ঠিকমতো ‘রেস্ট এপিআই’ ব্যবহার করে রাউটার/সুইচকে ঠিকমতো প্রোগ্রাম করতে পারছে কিনা সেটার জন্য একটা টেস্ট করা যেতে পারে। অফিসের রাউটার একটা ভালো অপশন। তা না হলে, জিএনএস৩ এর মতো রাউটার সিমুলেশন। কম রিসোর্সে হয়ে যায়। আর, ফাইনালি, কোন কিছু করতে ইচ্ছা না করলে সিসকো’র ডেভনেটের অলওয়েজ-অন IOS XE স্যান্ডবক্স। আসল চালু সুইচ, ২৪/৭ ঘন্টা, চলে সবসময়। পয়েন্ট করেন, https://devnetsandboxiosxe.cisco.com এখানে। তবে, সফটওয়্যার দিয়ে না দেখে একটা টুল ব্যবহার করি, পোস্টম্যান। ওয়েবসার্ভিসেস ‘এপিআই’ দিয়ে সহজে কাজ করার জন্য ডেভেলপারদের প্রিয় জিনিস পোস্টম্যান।

চলুন পরের চ্যাপ্টারে।