প্রায় এক লক্ষ বছর হল মানুষ কথা বলতে শিখেছে। সময়ের সাথে মানুষ একবদ্ধ হয়ে সমাজ নামের একটি শৃঙ্খলায় চলতে শুরু করে। ভাঙ্গা গড়ার পালায় মানুষের পথচলায় যোগ হতে থাকে নতুন নতুন যন্ত্র আর বৈজ্ঞানিক পদ্ধতি। সময় কাটানো কিংবা বিনোদনের জন্য মানুষ এখন অন্য মানুষের চেয়ে যন্ত্রের সামনে পড়ে থাকতে পছন্দ করে। এখন যদি প্রশ্ন করা হয়, মানুষ কিভাবে মেশিনের সাথে কিংবা একটি মেশিন কিভাবে আরেকটি মেশিনের সাথে কথা বলে অথবা একটি প্রোগ্রাম আরেকটি প্রোগ্রামের সাথে তথ্য আদান প্রদান করে, তাহলে আপনার মাথায় প্রথম কোন সম্ভাবনাটি আগে আসে ?
আমি কোন প্রকার শ্রেনী বিন্যাসে না যেয়ে এক কথায় বলব “এপিআই ”।
প্রোগ্রামিংয়ে বাংলাদেশ এখন অনেক এগিয়ে গেছে। কিন্তু এপিআই কি জিনিস তা অনেকের কাছেই ক্লিয়ার না। আর এপিআই ডেভেলপমেন্টের কথা যদি বলা হয় তাহলে অনেকেই গুগল বা ফেসবুক এপিআই এর উদাহরন দিয়ে ইতি টেনে দেয়। বাংলাদেশের সফ্টওয়্যার ফার্মগুলোর মধ্যে এপিআই এর আগ্রহ চোখে পড়ার মত, তবে এপিআই ডেভেলপমেন্ট নিয়ে ভার্সিটি পর্যায়ে তেমন কোন সাড়া পাওয়া যায় না। তাই নতুনদের এপিআই ডেভেলপমেন্ট সর্ম্পকে কিছু ধারনা দেয়াই আমার উদ্দেশ্য এবং শেষ পর্যায়ে কিভাবে একটি সিকিউর এবং স্কেলেবল রেস্টফুল এপিআই [ RESTful API ] ডিজাইন করতে হয় তা নিয়েও আলোচনা করার সাধ্যমত চেষ্টা করব।
রেস্টফুল ওয়েব এপিআই ডিজাইন শুরু করার আগে প্রথমে কিছু বেসিক এপিআই কন্সেপ্ট এবং কিছু প্র্যাকটিকাল উদাহরন দেখব যা একজন নন-প্রোগ্রামার আইটি প্রফেশনাল ব্যক্তিত্বেরও জানা থাকা ভাল।
এপিআই কি?
এপিআই হল অ্যাপ্রিকেশন প্রোগ্রামিং ইন্টারফেস যার মাধ্যমে একটি প্রোগ্রাম আরেকটি প্রোগ্রামের সাথে কিছু কথা [ ডাটা ] শেয়ার করতে পারে।
তো কেন দরকার এত কথা, প্রোগ্রামদের মধ্যে এত প্রেম কেন দরকার ? আমার প্রোগ্রামের ডাটা বা রিসোর্স আমি অন্য প্রোগ্রামের সাথে কেন শেয়ার করব ? উদাহরনের মাধ্যমে বোঝার চেষ্টা করে দেখি বুঝতে পারি কি না :
এপিআই উদাহরন ১ :
ধরুন Canon কোম্পানি প্রিন্ট করার জন্য প্রিন্টার বানিয়েছে কিন্তু তারা তো মাইক্রোসফ্ট ওয়ার্ড বা টেক্স এডিটর বানায়নি। তাহলে মাইক্রোসফ্ট ওয়ার্ড কিভাবে ঐ প্রিন্টারে প্রিন্ট দিবে ? নিশ্চই Microsoft আর Canon এর মাঝে কোন গোপন ব্যাপার-স্যাপার আছে ? ধরে নিলাম আছে, তাহলে অপেন অফিস বা অন্যন্য এডিটর,গুগল ক্রোম বা অন্যান্য প্রোগ্রাম গুলো কি করবে ? কিংবা আপনি যদি কোন এডিটর বানান তবে আপনি কি করবেন ? তাছাড়া Canon ছাড়াও আরো অনেক প্রিন্টার আছে, আর হাজার হাজার অ্যাপ্লিকেশন আছে যেগুলো থেকে প্রিন্ট করা যায়। তাহলে এসব প্রোগ্রাম কিভাবে প্রিন্টারের সাথে তথ্য বা ফাংশন আদান প্রদান করে? কিভাবে একটি প্রোগ্রাম প্রিন্টারকে বলবে তার ডকুমেন্টটি প্রিন্ট করে দিতে?
এ.পি.আই আসলে নতুন কিছু না। Canon বা অন্য যে কোন প্রিন্টারের সাথে কোন অ্যাপ্লিকেশন সফ্টওয়ারের কোন সম্পর্ক নেই। দুটো প্রোগ্রামই একটি ইন্টারফেস বা মাধ্যম ব্যবহার করে যোগাযোগ করে থাকে। এই মাধ্যমকেই এপিআই বলে। মাইক্রোসফ্ট ওয়ার্ডে প্রিন্ট কমান্ড দিলে সে এপিআই এর কাছে প্রিন্টার স্ট্যাটাস রিকোয়েস্ট করে, এবং সব ঠিক থাকলে এপিআইকে ডকুমেন্ট প্রিন্ট করতে দেয়। এপিআই প্রিন্টার কে ঐ ডকুমেন্ট টি প্রিন্ট করতে বলে। প্রিন্টারের আসলে জানার দরকার সেই কোন প্রোগ্রাম প্রিন্ট করতে বলছে, তার কাছে এটা ডকুমেন্ট আসছে সে এটা রিড করে প্রিন্ট করবে।
এপিআই উদাহরন ২ :
এবার একটি ছোট প্রোগ্রাম এর উদাহারন দেখা যাক !
1 2 3 4 5 | # Open a file file = open ( 'api.txt' , 'r' ) # Read line line = file .readline() print line |
উপরের প্রোগামটি একটি টেক্স ফাইলের [api.txt] প্রথম লাইন প্রিন্ট করবে। কিন্তু সেটা কিভাবে? আমি কি সরাসরি হার্ডডিস্ক থেকে বাইনারী ডাটা রিড করছি নাকি আমি কারো ভায়া হয়ে ডাটা পাচ্ছি ?
অথবা আপনি একটি ওয়ার্ড ফাইল অপেন করলেন, মাইক্রোসফ্ট ওয়ার্ড প্রো
প্রত্যেক অপারেটিং সিস্টেমের ই ফাইল হ্যান্ডেল করার জন্য ফাইল সিস্টেস এপিআই [ File System API ] থাকে। উইন্ডোজে NTFS এবং FAT ফাইল সিস্টেম অপারেশন হ্যান্ডেল করার জন্য এপিআই প্রদান করে থাকে, তেমনি লিনাক্সে ex2,ex3 সহ বিভিন্ন ফাইল সিস্টেম এপিআই থাকতে পারে। আমাদের প্রোগ্রামটি প্রথমে অপারেটিং সিস্টেমের ফাইল সিস্টেম এপিআই’র কাছে api.txt ফাইলটি রিড করার জন্য রিকোয়েস্ট করবে। ফাইল সিস্টেম এপিআই রিকোয়েস্ট ভেরিফাই করে ডাটা রিটার্ন করবে। অনুরুপভাবে রাইট করার জন্যও একই ভাবে এপিআই এর মাধ্যমে এক্সেস করতে হবে। সুতরাং এপিআই হল একটা কন্টেন্ট প্রোভাইডার বা হেন্ড্যেলার। তবে এই প্রোভাইডার কিছু নির্দিষ্ট শর্তে ডাটা এক্সেস দেয় আর সেই সর্তগুলোই বিভিন্ন ফাংশনে বিভক্ত থাকে। তাহলে আমরা বলতে পারি, এপিআই হল বিভিন্ন ফাংশনের সমষ্টি যা দুটো সিস্টেমের মধ্যে ডাটা আদান প্রদানের মাধ্যম হিসেবে কাজ করে।
মি. এক্স: বুঝলাম এপিআই অনেক হাই লেভেলের সাবজেক্ট ! অপারেটিং সিস্টেম, ডিভাইস কিংবা বড় বড় সিস্টেম বানানোর জন্য এপিআই এর প্রয়োজন! ভাই আমি অত্যন্ত সাধারন প্রোগামার, আমি এসব জেনে কি করব, ঘুমোতে গেলাম !
এপিআই কথন: আপনি যে টাইপের বা যে লেভের প্রোগ্রামারই হোন না কেন এপিআই কি এবং সেটা আপনার লাইফ কতটা সহজ করে দিচ্ছে তা পুরো টিউটোরিয়াল জুড়ে বিভিন্ন উদাহরনের মাধ্যমে দেখানো হয়েছে।
আমি প্রোগ্রামার নই ! এপিআই কি তা জেনে আমি কি করব?
আপনি যদি কোন সফ্টওয়্যার বা ওয়েব সার্ভিস বা মোবাইল অ্যাপ অথবা কোন হার্ডওয়্যার সলুশন তৈরী করতে চান কিংবা আপনি একজন ডিসিশন মেকার হন তবে প্রথম তিনটি টিউটোরিয়াল আপনার কাজে দিতে পারে।
এপিআই এর সার্বজননীন ব্যবহার
একেক রকমের ব্যবহারকারীর কাছে একেক প্লাটফর্ম বেশি পছন্দের। কেউ স্মার্ট ফোনেই তাদের বেশিরভাগ কাজ করতে পছন্দ করে কেউ পিসিতে। কেউ এন্ড্রয়েড ব্যবহার করে কেউ বা আইফোন অথবা উইন্ডেজ, ফায়ারফক্স। প্রতিনিয়ত স্মার্টফোনের ব্যবহার বাড়ছে, সেই সাথে বাড়ছে নতুন নতুন ও.এস.। এখন আপনি যদি চান আপনি যে সিস্টেম তৈরী করতে চান তা সর্বাপেক্ষা বেশি মানুষকে অফার করতে, তাহলে আপনাকে অবশ্যই আপনার সিস্টেমকে মাল্টিপ্লাটফর্মের জন্য উপযুক্ত করে তৈরী করতে হবে।
উদাহরন : আপনি প্রাত্যহিক হিসাব রাখার এটা প্রোগ্রাম বানাবেন যেটা ল্যাপটপে, এন্ড্রয়েডে, আইফোনে …. ইত্যাদিতে চলবে এবং সব ডিভাইসে সিহাব নিকাস সবসময় আপডেটেড থাকবে।
সাথে সাথে আপনি চাইবেন, অদূর ভবিষ্যতে আপনি নতুন কোন অপারেটিং সিস্টেম আসলে সেটাতে যেন সহজেই ইন্টগ্রেট করতে পারেন কিংবা আপনার পিএইচপি তে করা ওয়েব অ্যাপটি এঙ্গুলার জে.এস বা এ.এস.পি তে রি-ডেভেলপ করবেন। এক্ষেত্রে আপনি সহজেই নতুন কোন ফ্রন্টএন্ড এপিআই এর সাথে জুড়ে দিয়ে নিশ্চিন্তে ঘুমাতে পারবেন। এপিআই অনেক টা আপনার শরীর এবং শরীরে বিভিন্ন ফাংশন যেমন, হাটা, কথা বলা, অনুভুতি, ঘুমানো ইত্যাদি। আপনাকে একেক ড্রেসে একেক সময় একেক রকম লাগে। আপনার বেশভুষন বা স্টাইল যাই হোক আপনার দেহের অভ্যন্তরীন কাজ একই। যেহেতু আপনার সিস্টেম এন্ড্রয়েড, আইফোন, পিসি সব যায়গায় একই কাজ করবে তাহলে প্রত্যেকটার জন্য আলাদা আলাদা কোড না লিখে সবগুলোর জন্য একটি ব্রেইন তৈরী করলেন যার টেকনিকাল নাম এপিআই। অনেকটা আপনি আপনার মাথা কেটে কয়েকটা বিভিন্ন স্টাইলের বডিতে ইন্টারনেটের মাধ্যমে যুক্ত করে দিলেন। এখন আপনি যদি এই ব্রেইনে কোন পরিবর্তন আনেন সাথে সাথে সব প্লাটর্ফমে কিংবা আপনার নির্ধারিত প্লাটফর্মে সেই আপডেট টা চলে যাচ্ছে।
সুতরাং বোঝাই যাচ্ছে এপিআই শুধু বিগবস-রাই ব্যবহার করে না, আর এর ব্যবহার শুধু হার্ডওয়্যার এবং ওএস এর মধ্যে সিমাবদ্ধ না। নিচে কয়েক প্রকার এপিআই এর উদাহরন দেয়া হল:
web service APIs | OS functional APIs | Hardware APIs |
---|---|---|
SOAP XML-RPC JSON-RPC REST | Access to file system Access to User Interface | Video Acceleration Hard disk drivers PCI Busses |