2.3

View in English

2.3 API ও ইন্টারফেস নকশা

পরিচিতি ও প্রেরণা

একটি API (অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস) হলো সেই চুক্তি, যার মাধ্যমে এক টুকরো সফটওয়্যার আরেকটিকে সক্ষমতা দেয়। এখানেই দল, সিস্টেম ও প্রতিষ্ঠান মেলে, এবং এটাই ভুল করলে সবচেয়ে টেকসই ও ব্যয়বহুল। অভ্যন্তরীণ একটি ফাংশনের সিগনেচার আপনি অবাধে রিফ্যাক্টর করতে পারেন। প্রকাশিত API আলাদা: এটি এমন গ্রাহকদের কাছে প্রতিশ্রুতি, যাঁদের সঙ্গে আপনার হয়তো কখনো দেখা হবে না, আর তা ভাঙলে তাঁদের ভাঙে। প্রতিষ্ঠানগুলো যখন মনোলিথকে সার্ভিসে ভাঙে এবং অংশীদার ও জনগণের জন্য সক্ষমতা উন্মুক্ত করে, তখন API হয়ে ওঠে প্রধান পণ্যের পৃষ্ঠ এবং প্রধান ইন্টিগ্রেশন ঝুঁকি।

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

এন্টারপ্রাইজ ও সরকারি পরিবেশে API বিধি-মান্যতা, নিরাপত্তা ও দীর্ঘস্থায়িত্বের বাধ্যবাধকতাও বহন করে। একটি সরকারি-খাতের API-কে উন্মুক্ত মান অনুসরণ করতে, বছরের পর বছর স্থিতিশীল থাকতে এবং এমন বাইরের ডেভেলপারদের সেবা দিতে হতে পারে, যাঁদের সঙ্গে আপনি সমন্বয় করতে পারেন না। এন্টারপ্রাইজ API চুক্তিগত সেবা-স্তরসহ অংশীদার ইন্টিগ্রেশনের ভিত্তি। এসব ভার্সনিং শৃঙ্খলা, পশ্চাদ্‌সামঞ্জস্য, গভর্নেন্স ও ডেভেলপার অভিজ্ঞতার মানদণ্ড উঁচু করে।

মূল নীতিসমূহ

  • আগে চুক্তি নকশা করুন। ইন্টারফেস একটি সুচিন্তিত পণ্য-সিদ্ধান্ত, বাস্তবায়নের উপজাত নয়।
  • নিজের সুবিধার নয়, গ্রাহকের অভিজ্ঞতার জন্য অপ্টিমাইজ করুন।
  • পশ্চাদ্‌সামঞ্জস্যকে প্রতিশ্রুতি ভাবুন। ভাঙনের পরিবর্তনে নতুন ভার্সন ও মাইগ্রেশনের পথ লাগে।
  • সহজ কাজটিকে সঠিক করুন: যুক্তিসঙ্গত ডিফল্ট, পূর্বানুমেয় ত্রুটি, সামঞ্জস্যপূর্ণ রীতি।
  • ব্যর্থতার জন্য নকশা করুন। আইডেম্পোটেন্সি (পুনরাবৃত্ত অনুরোধের প্রভাব একক অনুরোধের মতোই), রিট্রাই, পেজিনেশন ও রেট লিমিটিং প্রথম সারির উদ্বেগ, পরের ভাবনা নয়।
  • ফ্যাশনে নয়, মিথস্ক্রিয়ার সঙ্গে খাপ খাওয়া প্রোটোকল ধরন বেছে নিন।
  • API-কে পণ্য হিসেবে নিয়ন্ত্রণ করুন, মালিক, জীবনচক্র ও ডকুমেন্টেশনসহ।

সুপারিশ

API-আগে ও চুক্তি-চালিত হয়ে কাজ করুন

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

মিথস্ক্রিয়ার ধরন সুচিন্তিতভাবে বেছে নিন

ব্যক্তিগত পছন্দ নয়, মিথস্ক্রিয়ার ভিত্তিতে REST (রিপ্রেজেন্টেশনাল স্টেট ট্রান্সফার), GraphQL, gRPC ও ইভেন্ট-চালিত বার্তা আদানপ্রদান-এর মধ্যে বাছাই করুন। রিসোর্স-ভিত্তিক, ব্যাপকভাবে আন্তঃচালনীয়, ক্যাশযোগ্য ইন্টারফেসের জন্য REST ব্যবহার করুন। বিভিন্ন ক্লায়েন্টের সমৃদ্ধ গ্রাফের ওপর নমনীয়, সমষ্টিগত পাঠ দরকার হলে GraphQL ব্যবহার করুন। অভ্যন্তরীণ সার্ভিসগুলোর মধ্যে উচ্চ-পারফরম্যান্স, দৃঢ়-টাইপযুক্ত কলের জন্য gRPC ব্যবহার করুন। অ্যাসিনক্রোনাস, বিচ্ছিন্ন কর্মপ্রবাহ এবং অবস্থার পরিবর্তন ছড়ানোর জন্য ইভেন্ট-চালিত বার্তা আদানপ্রদান ব্যবহার করুন। অনেক বড় সিস্টেম একসঙ্গে কয়েকটি ধরন ব্যবহার করে, প্রতিটি যেখানে খাপ খায়।

শৃঙ্খলাসহ ভার্সন ও অবসান করুন

একটি সুস্পষ্ট ভার্সনিং কৌশল এবং প্রকাশিত অবসান নীতি গ্রহণ করুন: আপনি পরিবর্তন কীভাবে শ্রেণিবদ্ধ করেন, পুরোনো সংস্করণ কতদিন সমর্থন করেন, এবং গ্রাহকদের কীভাবে জানান। পশ্চাদ্‌সামঞ্জস্যপূর্ণ পরিবর্তন (ঐচ্ছিক ক্ষেত্র, নতুন এন্ডপয়েন্ট যোগ) এবং ভাঙনের পরিবর্তন (ক্ষেত্র সরানো বা নাম বদল, টাইপ বা অর্থ বদল)-এর মধ্যে স্পষ্ট রেখা টানুন। বিদ্যমান ক্ষেত্রের অর্থ কখনো বদলাবেন না। গ্রাহকদের মাইগ্রেট করার জন্য ওভারল্যাপ সময় দিন, এবং সময়সীমা আগেভাগে ভালোভাবে জানান।

ত্রুটির অর্থ সামঞ্জস্যপূর্ণ ও যন্ত্র-পাঠযোগ্য করুন

কাঠামোবদ্ধ, পূর্বানুমেয় ত্রুটি ফেরত দিন: স্থিতিশীল যন্ত্র-পাঠযোগ্য কোড, মানুষ-পাঠযোগ্য বার্তা, এবং সংবেদনশীল অভ্যন্তর ফাঁস না করে কাজ করার মতো যথেষ্ট প্রেক্ষাপট। প্রতিটি এন্ডপয়েন্ট জুড়ে একই স্ট্যাটাসের অর্থ ব্যবহার করুন, যাতে ক্লায়েন্ট অভিন্নভাবে ত্রুটি সামলাতে পারে। একজন গ্রাহক যে প্রতিটি ত্রুটির মুখোমুখি হতে পারেন তা নথিবদ্ধ করুন।

আইডেম্পোটেন্সি, পেজিনেশন ও রেট লিমিটিং গড়ুন

আইডেম্পোটেন্সি কী (idempotency key) সমর্থন করে লেখার অপারেশন রিট্রাই করা নিরাপদ করুন, যাতে টাইমআউটের পর রিট্রাই করা ক্লায়েন্ট দ্বিগুণ চার্জ বা দ্বিগুণ তৈরি না করে। প্রথম দিন থেকে প্রতিটি তালিকা এন্ডপয়েন্টে পেজিনেশন করুন, এবং বড় বা পরিবর্তনশীল ডেটাসেটের জন্য কার্সর-ভিত্তিক পেজিনেশন পছন্দ করুন। রেট লিমিট প্রয়োগ ও নথিবদ্ধ করুন, এবং ক্লায়েন্টদের কাছে বর্তমান লিমিটের অবস্থা ফেরত দিন, যাতে তারা সুষ্ঠুভাবে পিছিয়ে যেতে পারে।

API নিয়ন্ত্রণ করুন এবং ডেভেলপার অভিজ্ঞতায় বিনিয়োগ করুন

প্রতিটি API-কে পণ্য হিসেবে দেখুন, মালিক, জীবনচক্র ও ক্যাটালগ এন্ট্রিসহ। নকশা পর্যালোচনা বা API-মান বোর্ড গড়ুন, যাতে দলগুলো জুড়ে ইন্টারফেস সামঞ্জস্যপূর্ণ থাকে। ডেভেলপার অভিজ্ঞতায় বিনিয়োগ করুন: নির্ভুল রেফারেন্স ডক, কুইকস্টার্ট, উদাহরণ, একটি স্যান্ডবক্স এবং একটি চেঞ্জলগ। একটি বড় ইকোসিস্টেমে API খুঁজে-পাওয়া-যায় এমন করা পোর্টাল বা ক্যাটালগ অপরিহার্য।

ট্রেড-অফ: সুবিধা ও অসুবিধা

ধরনসবচেয়ে উপযুক্তসুবিধাঅসুবিধা
REST / HTTPপ্রকাশ্য, রিসোর্স-ভিত্তিক APIসর্বত্র, ক্যাশযোগ্য, সরল, আন্তঃচালনীয়অতি/অল্প-আনয়ন; বহু রাউন্ড ট্রিপ; নির্দিষ্ট না করলে শিথিল চুক্তি
GraphQLবিভিন্ন ক্লায়েন্টের জন্য নমনীয় পাঠক্লায়েন্ট-নির্দিষ্ট কোয়েরি; একটি এন্ডপয়েন্ট; দৃঢ় স্কিমাক্যাশিং ও রেট-লিমিটিংয়ের জটিলতা; কোয়েরি-খরচের ঝুঁকি; সার্ভারের জটিলতা
gRPCঅভ্যন্তরীণ উচ্চ-পারফরম্যান্স কলদ্রুত, সংকুচিত, দৃঢ়-টাইপযুক্ত, স্ট্রিমিংদুর্বল ব্রাউজার সমর্থন; কম মানুষ-পাঠযোগ্য; ভারী টুলিং
ইভেন্ট-চালিতঅ্যাসিনক্রোনাস, বিচ্ছিন্ন কর্মপ্রবাহশিথিল সংযুক্তি; বড় হয়; স্থিতিস্থাপকযুক্তি দিয়ে বোঝা কঠিনতর; চূড়ান্ত সামঞ্জস্য; পরিচালনাগত জটিলতা

ভার্সনিং কৌশল রক্ষণাবেক্ষণের বিপরীতে স্থিতিশীলতা বিনিময় করে। অনেক পুরোনো সংস্করণ সমর্থন গ্রাহকদের রক্ষা করে, কিন্তু আপনাকে রক্ষণাবেক্ষণ ও পরীক্ষা করতে হয় এমন কোডকে গুণ করে। পশ্চাদ্‌সামঞ্জস্য গ্রাহকের স্থিতিশীলতার বিনিময়ে আপনার নিজের স্বাধীনতা বিনিময় করে, যা ব্যাপকভাবে ব্যবহৃত API-র জন্য সাধারণত সঠিক বিনিময়। বড় ছবি: একটি খারাপ API সিদ্ধান্তের খরচ প্রতিটি গ্রাহক ইন্টারফেসের সম্পূর্ণ জীবনকাল ধরে দেন। তাই প্রায় অন্য যেকোনো জায়গার চেয়ে সীমানায় বেশি নকশার প্রচেষ্টা ব্যয় করা সার্থক।

আপনার দলের সঙ্গে আলোচনার প্রশ্ন

  1. একটি পরিবর্তনকে পশ্চাদ্‌সামঞ্জস্যপূর্ণ বনাম ভাঙনের হিসেবে কীভাবে শ্রেণিবদ্ধ করেন, এবং কোন স্বয়ংক্রিয় পরীক্ষা চালু হওয়ার আগেই নিঃশব্দ ভাঙন ধরে? এই অধ্যায় কঠোর রেখা টানে: ঐচ্ছিক ক্ষেত্র ও নতুন এন্ডপয়েন্ট যোগ নিরাপদ, আর ক্ষেত্র সরানো বা নাম বদল, টাইপ বদল, বা ক্ষেত্রের অর্থ পুনর্ব্যবহার গ্রাহকদের ভাঙে। বড় দলে পরিবর্তনকারী প্রায়ই প্রতিটি গ্রাহককে দেখতে পান না, তাই একটি “ছোট” বদল নিঃশব্দে এমন অংশীদারদের ভাঙতে পারে যাঁদের সঙ্গে আপনি কখনো কথা বলেন না। সভায় সুনির্দিষ্ট সংকেত আনুন: আপনি কি প্রকাশিত স্পেসের বিপরীতে CI-তে স্বয়ংক্রিয় চুক্তি-সামঞ্জস্য পরীক্ষা চালান, নাকি কেউ নিয়মটি মনে রাখবে এই ভরসা করেন। এন্টারপ্রাইজ ও সরকারি পরিবেশে, যেখানে ভাঙনের পরিবর্তন প্রতিটি অংশীদার জুড়ে সমন্বিত মাইগ্রেশন বাধ্য করে এবং বিক্রেতা ও প্রশাসন বদল পেরিয়ে যেতে পারে, খরচ গ্রাহক সংখ্যার সঙ্গে বাড়ে। শ্রেণিবিভাগের নিয়ম ঠিক করুন এবং একটি সামঞ্জস্য গেট জুড়ুন, যাতে অসামঞ্জস্যপূর্ণ পরিবর্তন একটি ইন্টিগ্রেশনের বদলে বিল্ড ব্যর্থ করে।

  2. কোন নির্ভরযোগ্যতার আদিম উপাদান, আইডেম্পোটেন্সি কী, পেজিনেশন ও রেট লিমিটিং, প্রতিটি নতুন এন্ডপয়েন্টে প্রথম দিন থেকে বাধ্যতামূলক? অধ্যায়টি জোর দেয় এগুলো প্রথম সারির উদ্বেগ, কারণ একটি চালু চার্জ এন্ডপয়েন্টে আইডেম্পোটেন্সি কী জুড়ে দেওয়া বা ইতিমধ্যে চালু একটি তালিকায় পেজিনেশন যোগ করা নিজেই ভাঙনের পরিবর্তন। একটি বড় ইকোসিস্টেম এটি বাড়ায়: যে এন্ডপয়েন্ট পরীক্ষায় কাজ করে তা প্রকৃত ডেটার পরিমাণে ভেঙে পড়ে, আর অ-আইডেম্পোটেন্ট লেখা একটি নেটওয়ার্কের ঝলককে দ্বিগুণ চার্জে পরিণত করে। কোন বর্তমান এন্ডপয়েন্টে এগুলো নেই এবং রিট্রাইয়ের ঝড় কী করত তার প্রমাণ আনুন। নতুন এন্ডপয়েন্টের জন্য ডিফল্ট অনমনীয় করুন: প্রতিটি তালিকায় কার্সর পেজিনেশন, প্রতিটি লেখায় আইডেম্পোটেন্সি কী, বর্তমান অবস্থা ফেরত দেওয়া নথিবদ্ধ রেট লিমিট। এটি ভবিষ্যতের জোর-করা মাইগ্রেশনকে একবারের নকশার অভ্যাসে রূপান্তর করে।

  3. আপনি কি সত্যিই বাস্তবায়ন লেখার আগে চুক্তি নকশা ও পর্যালোচনা করেন, নাকি ইন্টারফেস কোড থেকে ঝরে পড়ে? API-আগে সুপারিশ চায় একটি আগে পর্যালোচিত যন্ত্র-পাঠযোগ্য স্পেস, যা ডক, স্টাব ও মক তৈরি করে এবং আপনি গড়ার সময় গ্রাহকদের মকের বিপরীতে ইন্টিগ্রেট করতে দেয়। চুক্তি যখন বাস্তবায়নের পিছনে পড়ে, ইন্টারফেস অভ্যন্তরীণ ডেটাবেস কাঠামো প্রকাশ করে এবং বাস্তবায়ন বদলালেই সরে যায়, যা এই অধ্যায়ের শীর্ষ অ্যান্টি-প্যাটার্ন। যে সংকেত পরীক্ষা করবেন: একজন গ্রাহক কি আজই আপনার মকের বিপরীতে ইন্টিগ্রেট শুরু করতে পারেন, নাকি তাঁকে চলমান ব্যাকএন্ডের অপেক্ষা করতে হয়। যেখানে ইন্টারফেস পণ্যের পৃষ্ঠ এবং ভুল করলে সবচেয়ে ব্যয়বহুল, সেই প্রকাশ্য ও অংশীদার API-তে চুক্তির পেছনে একদিন ব্যয় সাপোর্টের কয়েক সপ্তাহের ঝামেলা বাঁচায়। বাস্তবায়ন শুরুর আগে চুক্তি পর্যালোচনাকে আবশ্যিক ধাপ করুন।

  4. দুটি দলকে যখন একই সক্ষমতা প্রকাশ করতে হয়, কোন মিথস্ক্রিয়ার ধরন জেতে, এবং চতুর্থ একটি প্রোটোকলকে না বলার কর্তৃত্ব কার? এই অধ্যায় বলে মিথস্ক্রিয়ার খাপ অনুযায়ী REST, GraphQL, gRPC বা ইভেন্ট-চালিত বার্তা আদানপ্রদান বাছুন, কিন্তু বড় পরিসরে আসল ঝুঁকি হলো প্রতিটি দল নিজের প্রিয়টি বেছে নেয় এবং গ্রাহকরা প্রতিটি এন্ডপয়েন্টে ভিন্ন রীতির মুখোমুখি হন। একটি বড় প্রতিষ্ঠান সেই খণ্ডনের দাম দেয় ক্লায়েন্ট লাইব্রেরি, গেটওয়ে, মনিটরিং এবং প্রতিটি ইন্টিগ্রেটরের জ্ঞানীয় বোঝায়, যিনি এখন একের বদলে চারটি বাগধারা শিখছেন। ইতিমধ্যে প্রোডাকশনে থাকা প্রোটোকলের তালিকা, প্রতিটি যে মিথস্ক্রিয়ার জন্য বাছা হয়েছিল, এবং একাধিক প্রোটোকল জুড়ে থাকা গ্রাহকদের আনুন। প্রতিদ্বন্দ্বী বিবেচনা প্রকৃত: ভাগ করা ডিফল্ট ছড়ানো কমায়, তবু অনমনীয় আদেশ gRPC-আকৃতির সমস্যাকে REST-আকৃতির গর্তে ঠেলে। যে মান-সংস্থা বা স্থাপত্য পর্যালোচনা ব্যতিক্রম প্রক্রিয়ার মালিক তার নাম দিন, কারণ এন্টারপ্রাইজ ও সরকারি ক্ষেত্রে ধরনের ছড়াছড়ি ইন্টিগ্রেশনের উপর স্থায়ী কর এবং অংশীদাররা প্রতিটির ওপর নির্ভর করলে উল্টানো কঠিন সমস্যা।

  5. আমাদের প্রকাশিত অবসান নীতি কী, এবং আমরা যে সমর্থন-সময় বিজ্ঞাপিত করি তা আসলে মানি তা কি প্রমাণ করতে পারি? অধ্যায়টি ভার্সনিং ও অবসানকে শৃঙ্খলা হিসেবে দেখে: পুরোনো সংস্করণ কতদিন থাকে, গ্রাহকদের কীভাবে জানানো হয়, এবং মাইগ্রেট করতে তাঁরা কী ওভারল্যাপ পান তার একটি লিখিত নীতি। যে প্রতিশ্রুতি আপনি বলবৎ করতে পারেন না তা না থাকার চেয়েও খারাপ, কারণ একটি বড় ইকোসিস্টেমে এমন গ্রাহক থাকেন যাঁদের সঙ্গে আপনি কথা বলেন না এবং যাঁরা অবসানিত সংস্করণে কল করতে থাকবেন যতক্ষণ না তা প্রোডাকশনে ভাঙে। আলোচনায় প্রমাণ আনুন: আজ আপনি কতগুলো চালু সংস্করণ বহন করেন, প্রতিটিতে প্রকৃত ব্যবহার, কোন গ্রাহক এখনো অবসানিত এন্ডপয়েন্টে কল করছেন তা আপনি দেখতে পান কি না, এবং আপনার শেষ অবসান কত আগে ঘোষণা করা হয়েছিল। প্রতিদ্বন্দ্বী চাপ হলো রক্ষণাবেক্ষণ খরচ বনাম গ্রাহকের স্থিতিশীলতা, দুটিই প্রকৃত। চুক্তিগত সেবা-স্তরের অধীনে এন্টারপ্রাইজ অংশীদার এবং প্রশাসন ও বিক্রেতা বদল পেরিয়ে টিকতে হবে এমন সরকারি-খাতের API-র জন্য সমর্থন-সময় একটি প্রতিশ্রুতি যা তা দেওয়া দলকে ছাড়িয়ে যেতে পারে, তাই ঠিক করুন এর মালিক কে এবং ঘটার আগে একটি অবসান নিরাপদ তা কীভাবে প্রমাণ করা হবে।

  6. আমাদের ডেভেলপার অভিজ্ঞতা ভালো তা আমরা কীভাবে জানি, নাকি API আমাদের জন্য কাজ করে বলে তা ধরে নিচ্ছি? এই অধ্যায় প্রতিটি API-কে এমন পণ্য হিসেবে দেখে, যার গ্রহণ নির্ভর করে নির্ভুল রেফারেন্স ডক, কুইকস্টার্ট, উদাহরণ, একটি স্যান্ডবক্স, একটি চেঞ্জলগ এবং একটি খুঁজে-পাওয়া-যায় ক্যাটালগের ওপর। দলগুলো নিয়মিত “API কাজ করে”-কে “API ব্যবহারযোগ্য” ভুল করে, আর ফাঁক দেখা দেয় সাপোর্ট টিকেট, ব্যর্থ ইন্টিগ্রেশন এবং নিঃশব্দে হাল ছেড়ে দেওয়া গ্রাহকদের মধ্যে। মতামতের বদলে পরিমাপযোগ্য সংকেত আনুন: একজন নতুন ইন্টিগ্রেটরের প্রথম-সফল-কল পর্যন্ত সময়, প্রতি এন্ডপয়েন্টে সাপোর্ট-টিকেটের পরিমাণ, প্রকাশিত ডক জীবন্ত চুক্তির তুলনায় কতটা সেকেলে, এবং একজন নবাগত আপনার দলকে ইমেল না করে পোর্টাল থেকে নিজে-করতে পারেন কি না। টানাপোড়েন হলো ডকুমেন্টেশন ও পোর্টালে প্রকৃত পরিশ্রম লাগে যা ফিচার পাঠানোর সঙ্গে প্রতিযোগিতা করে, তবু একটি বড় ইকোসিস্টেমে দুর্বল ডেভেলপার অভিজ্ঞতা একসঙ্গে শত শত গ্রাহকের ওপর ইন্টিগ্রেশন খরচ ঠেলে দেয়। সরকারে, যেখানে একটি উন্মুক্ত API এমন বাইরের ডেভেলপারদের সেবা দেয় যাঁদের সঙ্গে আপনি সমন্বয় করতে পারেন না এবং স্বচ্ছতা প্রায়ই বাধ্যতামূলক, সেখানে ব্যবহারযোগ্য, ভালোভাবে নথিবদ্ধ, খুঁজে-পাওয়া-যায় ইন্টারফেস জনগণের কাছে জবাবদিহির বাধ্যবাধকতার অংশ, থাকলে-ভালো গোছের নয়।

খাতভেদে দৃষ্টিভঙ্গি

স্টার্টআপ। দুই-তিনজন ইঞ্জিনিয়ার এবং আনুষ্ঠানিকতার সময় না থাকায় চুক্তি হালকা কিন্তু প্রকৃত রাখুন: একটি একক যন্ত্র-পাঠযোগ্য স্পেস, যার বিপরীতে আপনার প্রথম ডিজাইন-পার্টনার গ্রাহকরা আপনি গড়ার সময় ইন্টিগ্রেট করতে পারেন। এখনই API গেটওয়ে, ক্যাটালগ বা গভর্নেন্স বোর্ড দাঁড় করাবেন না, কিন্তু পরে জুড়তে যন্ত্রণাদায়ক দুটি অভ্যাস ঠিক করে রাখুন, লেখায় আইডেম্পোটেন্সি কী এবং তালিকায় কার্সর পেজিনেশন, কারণ চালু এন্ডপয়েন্টে এগুলো জুড়ে দেওয়া এমন ভাঙনের পরিবর্তন যা আপনি বহন করতে পারেন না। একটি মিথস্ক্রিয়ার ধরন পছন্দ করুন, প্রায় সবসময় REST, যাতে প্রথম বছরে প্রোটোকলের ছড়াছড়ি না বয়ে বেড়াতে হয়।

ছোট ব্যবসা। কোনো নিবেদিত API বিশেষজ্ঞ নেই আর বাজেট কম, তাই স্পেস থেকে ডক, মক এবং ক্লায়েন্ট স্টাব তৈরি করা টুলের ওপর ভরসা করুন, যাতে একজন জেনারেলিস্ট গভীর প্রোটোকল দক্ষতা ছাড়াই ইন্টারফেস রক্ষণাবেক্ষণ করতে পারেন। কেনা বনাম বানানো কঠিনভাবে ওজন করুন: তৈরি গেটওয়ে বা API-ব্যবস্থাপনা প্ল্যাটফর্ম আপনাকে রেট লিমিটিং, কী এবং ডেভেলপার পোর্টাল দেয়, যা অন্যথায় হাতে বানাতে হতো। পৃষ্ঠ ছোট ও রীতি সামঞ্জস্যপূর্ণ রাখুন, কারণ প্রতিটি বাড়তি এন্ডপয়েন্ট ও প্রতিটি একবারের ত্রুটি-ধরন এমন কিছু যা একটি পাতলা দলকে চিরকাল সমর্থন করতে হয়।

এন্টারপ্রাইজ। বহু স্বায়ত্তশাসিত দল জুড়ে কেন্দ্রীয় সমস্যা বাধা না হয়ে সামঞ্জস্য: একটি ভাগ করা শৈলী নির্দেশিকা, একটি API-মান পর্যালোচনা, ইন্টারফেস খুঁজে-পাওয়া-যায় এমন করা ক্যাটালগ, এবং CI-তে স্বয়ংক্রিয় পশ্চাদ্‌সামঞ্জস্য পরীক্ষা যাতে নিঃশব্দ ভাঙন একটি ইন্টিগ্রেশনের বদলে বিল্ড ব্যর্থ করে। প্রতিটি API-কে পণ্য হিসেবে নিয়ন্ত্রণ করুন, নামধারী মালিক, জীবনচক্র এবং প্রকাশিত অবসান নীতিসহ, এবং গ্রহণ, সাপোর্টের বোঝা ও ভাঙনের পরিবর্তনের ঘনত্ব মাপুন, যাতে পোর্টফোলিও সুস্থ থাকে। মিথস্ক্রিয়ার ধরন ও ভার্সনিং নিয়ম প্রতিষ্ঠানজোড়া প্রমিত করুন, কারণ এই পরিসরে খণ্ডন ব্যয়বহুল ডিফল্ট।

সরকার। ক্রয়-বিধি, উন্মুক্ত-মানের আদেশ এবং জনগণের কাছে জবাবদিহি প্রতিটি পছন্দকে আকার দেয়। চুক্তি খোলাখুলি প্রকাশ করুন, বাধ্যতামূলক উন্মুক্ত মান অনুসরণ করুন, এবং একটি স্যান্ডবক্স ও রেফারেন্স ডক দিন, যাতে আপনি সমন্বয় করতে পারেন না এমন বাইরের ডেভেলপাররা নিজে-করতে পারেন। দীর্ঘমেয়াদি পশ্চাদ্‌সামঞ্জস্যকে নীতির প্রয়োজনীয়তা ভাবুন, কারণ ইন্টিগ্রেশনকে প্রশাসন ও বিক্রেতা বদল পেরিয়ে টিকতে হবে, এবং ভাঙনের পরিবর্তন বিরল, ভারীভাবে নিয়ন্ত্রিত এবং অনেক আগে ঘোষণা করুন। API ও তার ডকুমেন্টেশন জনগণ ও অডিটের নিরীক্ষণ সইতে পারার মতো যথেষ্ট স্বচ্ছ রাখুন, এবং ভবিষ্যৎ প্রশাসনকে আটকে ফেলা মালিকানাধীন ফরম্যাট এড়ান।

উদাহরণ

স্টার্টআপ। তাদের প্রথম প্রকাশ্য API পাঠানো একটি সিড-স্তরের স্টার্টআপ কোডিংয়ের আগে একটি যন্ত্র-পাঠযোগ্য স্পেস হিসেবে চুক্তি লেখে, যাতে তাদের দুই ডিজাইন-পার্টনার গ্রাহক ব্যাকএন্ড গড়া চলার সময় মকের বিপরীতে ইন্টিগ্রেট করতে পারেন। মাত্র মুষ্টিমেয় গ্রাহক থাকলেও তারা চার্জ এন্ডপয়েন্টে আইডেম্পোটেন্সি কী এবং প্রতিটি তালিকায় কার্সর পেজিনেশন যোগ করে, কারণ অংশীদাররা API-র ওপর নির্ভর করার পর এগুলো জুড়লে তা এমন ভাঙনের পরিবর্তন হতো যা তারা বহন করতে পারত না। অগ্রিম চুক্তিতে একদিন লাগে এবং সাপোর্টের কয়েক সপ্তাহের আদান-প্রদান বাঁচায়।

এন্টারপ্রাইজ। একটি বড় পেমেন্ট কোম্পানি হাজার হাজার ব্যবসায়ীর কাছে একটি প্রকাশ্য REST API প্রকাশ করে। প্রতিটি লেখার এন্ডপয়েন্ট একটি আইডেম্পোটেন্সি কী গ্রহণ করে, তাই নেটওয়ার্ক রিট্রাই কখনো দ্বিগুণ চার্জ তৈরি করে না। প্রতিটি তালিকার এন্ডপয়েন্ট কার্সর পেজিনেশন ব্যবহার করে। ত্রুটিতে থাকে প্রকাশ্য রেফারেন্সে নথিবদ্ধ স্থিতিশীল কোড। একটি আনুষ্ঠানিক অবসান নীতি যেকোনো সংস্করণের জন্য অগ্রিম নোটিশ ও মাইগ্রেশন নির্দেশিকাসহ দীর্ঘ সমর্থন-সময় নিশ্চিত করে। এই শৃঙ্খলা একটি প্রতিযোগিতামূলক সুবিধা: ইন্টিগ্রেটররা বিশ্বাস করেন API তাঁদের নিচে ভাঙবে না।

সরকার। একটি জাতীয় ডিজিটাল সেবা নাগরিক ডেটার জন্য বাধ্যতামূলক উন্মুক্ত মান ও API-আগে নকশা প্রক্রিয়া অনুসরণ করে একটি উন্মুক্ত API প্রকাশ করে। চুক্তি নির্দিষ্ট ও নির্মাণের আগে পর্যালোচিত, একটি কেন্দ্রীয় সরকারি API ক্যাটালগে প্রকাশিত এবং একটি স্যান্ডবক্সসহ পরিবেশিত, যাতে আলাদাভাবে সমন্বয় করা যায় না এমন তৃতীয়-পক্ষ ডেভেলপাররা নিজেরাই ইন্টিগ্রেট করতে পারেন। দীর্ঘমেয়াদি পশ্চাদ্‌সামঞ্জস্য নীতির প্রয়োজনীয়তা, কারণ ইন্টিগ্রেশনকে প্রশাসন ও বিক্রেতা বদল পেরিয়ে টিকতে হবে। তাই ভাঙনের পরিবর্তন বিরল ও ভারীভাবে নিয়ন্ত্রিত।

ব্যবসায়িক যুক্তি: প্রেরণা, ROI ও TCO

ভালো API নকশা ইন্টিগ্রেশনের খরচ কমায়, যা প্রায়ই সিস্টেম যুক্ত করা ও অংশীদার অনবোর্ড করার সবচেয়ে বড় খরচ। একটি স্পষ্ট, স্থিতিশীল, ভালোভাবে নথিবদ্ধ API-তে গ্রাহকরা একটিও সাপোর্ট টিকেট ছাড়াই কয়েক দিনে ইন্টিগ্রেট করেন। একটি দুর্বল API অন্তহীন সাপোর্টের বোঝা, ব্যর্থ ইন্টিগ্রেশন এবং সুনামের ক্ষতি তৈরি করে। API নিজেই যখন পণ্য, তখন ডেভেলপার অভিজ্ঞতা সরাসরি গ্রহণ ও রাজস্ব চালায়।

সবচেয়ে বড় লুকোনো খরচ ভাঙনের পরিবর্তন। প্রতিটি ভাঙনের পরিবর্তন সব গ্রাহক, অভ্যন্তরীণ দল ও বাইরের অংশীদার, জুড়ে সমন্বিত মাইগ্রেশন বাধ্য করে, আর মোট খরচ বাড়ে গ্রাহকের সংখ্যা এবং লকস্টেপে সরা তাঁদের পক্ষে কতটা কঠিন তার সঙ্গে। চুক্তি-আগে নকশা, পশ্চাদ্‌সামঞ্জস্য ও ভার্সনিং শৃঙ্খলায় অগ্রিম বিনিয়োগ এই ব্যয়বহুল, প্রতিষ্ঠানজোড়া মাইগ্রেশন ঘটনা এড়ায়। নেতৃত্বের সঙ্গে কথা বলার সময় API-র গুণমানকে দলের স্বায়ত্তশাসন, অংশীদার ইকোসিস্টেম বৃদ্ধি এবং ব্যয়বহুল জোর-করা মাইগ্রেশন এড়ানোর লিভারেজ-বিন্দু হিসেবে উপস্থাপন করুন। আপনার প্রমাণ হিসেবে ইন্টিগ্রেশনের সময়, সাপোর্ট-টিকেটের পরিমাণ এবং ভাঙনের পরিবর্তনের ঘনত্ব অনুসরণ করুন।

অ্যান্টি-প্যাটার্ন ও ফাঁদ

  • বাস্তবায়ন-আগে API: ইন্টারফেস অভ্যন্তরীণ ডেটাবেস কাঠামো ফাঁস করে এবং বাস্তবায়ন বদলালেই বদলায়।
  • নিঃশব্দ ভাঙনের পরিবর্তন: ভার্সন বাড়ানো ছাড়া কোনো ক্ষেত্রের অর্থ পুনর্ব্যবহার বা যাচাই কড়া করা গ্রাহকদের অপ্রত্যাশিতভাবে ভাঙে।
  • বাচাল ইন্টারফেস: একটি যৌক্তিক অপারেশনের জন্য বহু রাউন্ড ট্রিপ দরকার এমন নকশা, যা পারফরম্যান্স ও ব্যবহারযোগ্যতা ক্ষুণ্ণ করে।
  • অসামঞ্জস্যপূর্ণ রীতি: প্রতিটি এন্ডপয়েন্ট নিজের নামকরণ, ত্রুটি ফরম্যাট ও পেজিনেশন উদ্ভাবন করে, ফলে ক্লায়েন্ট সাধারণীকরণ করতে পারে না।
  • পেজিনেশন বা রেট লিমিটিং নেই: পরীক্ষায় কাজ করা কিন্তু প্রকৃত ডেটার পরিমাণ বা বোঝায় ভেঙে পড়া এন্ডপয়েন্ট।
  • অ-আইডেম্পোটেন্ট লেখা: রিট্রাইয়ে পুনরাবৃত্তি; একটি নেটওয়ার্ক ঝলক ডেটা নষ্ট করে।
  • ভার্সনের ছড়াছড়ি: অবসান ছাড়া অনেক চালু সংস্করণ, রক্ষণাবেক্ষণ গুণ করে যতক্ষণ না তা সামলানো অসম্ভব।
  • পরের ভাবনা হিসেবে ডক: নথিহীন বা সেকেলে রেফারেন্স, যা সব ইন্টিগ্রেশন খরচ গ্রাহকদের ওপর ঠেলে দেয়।

পরিপক্বতা মডেল

  • স্তর ১, সূচনা: API বাস্তবায়ন থেকে উপজাত হিসেবে বেরোয়; কোনো ভাগ করা রীতি নেই; ইন্টারফেস অভ্যন্তরীণ ডেটাবেস কাঠামো ফাঁস করে; ভাঙনের পরিবর্তন সাধারণ, অঘোষিত, এবং গ্রাহকের ইন্টিগ্রেশন ব্যর্থ হলে আবিষ্কৃত হয়।
  • স্তর ২, বিকাশ: কিছু দল মৌলিক REST রীতি অনুসরণ করে, অনানুষ্ঠানিকভাবে ভার্সন করে এবং হাতে ডক লেখে, কিন্তু চর্চা দলগুলোতে অসঙ্গত; আইডেম্পোটেন্সি, পেজিনেশন ও রেট লিমিটিং কিছু এন্ডপয়েন্টে দেখা দেয়, অন্যগুলোতে নয়; গ্রাহকরা এখনো ঘটনা ধরে ধরে প্রতিটি API-র খুঁতখুঁতে অভ্যাস শেখেন।
  • স্তর ৩, মানসম্মতকরণ: যন্ত্র-পাঠযোগ্য স্পেসসহ চুক্তি-আগে নকশা নথিবদ্ধ ও প্রতিষ্ঠানজুড়ে বলবৎ; একটি প্রকাশিত অবসান নীতি, সামঞ্জস্যপূর্ণ ত্রুটির অর্থ, এবং বাধ্যতামূলক আইডেম্পোটেন্সি, কার্সর পেজিনেশন ও রেট লিমিটিং প্রতিটি নতুন এন্ডপয়েন্টে প্রযোজ্য; একটি ভাগ করা শৈলী নির্দেশিকা ও API-মান পর্যালোচনা দলগুলো জুড়ে ইন্টারফেস সামঞ্জস্যপূর্ণ রাখে।
  • স্তর ৪, ব্যবস্থাপনা: API পোর্টফোলিও ভিত্তিরেখার বিপরীতে মাপা ও নিয়ন্ত্রিত: স্বয়ংক্রিয় পশ্চাদ্‌সামঞ্জস্য পরীক্ষা CI-তে প্রতিটি পরিবর্তনে গেট করে, এবং আপনি প্রথম-সফল-কল পর্যন্ত সময়, প্রতি এন্ডপয়েন্টে সাপোর্ট-টিকেটের পরিমাণ, ভাঙনের পরিবর্তনের ঘনত্ব, চালু-সংস্করণের সংখ্যা ও প্রতি এন্ডপয়েন্টে ব্যবহার অনুসরণ করেন, যাতে অবসান ও নকশার সিদ্ধান্ত মতামতের বদলে প্রমাণের ওপর দাঁড়ায়। প্রতিটি API একটি ক্যাটালগে নামধারী মালিকসহ নিয়ন্ত্রিত পণ্য, এবং কোনো সার্ভিস লক্ষ্য থেকে সরলে মেট্রিক পদক্ষেপ ট্রিগার করে।
  • স্তর ৫, সমন্বয়: API কৌশল নিরন্তর উন্নত এবং প্রতিষ্ঠান জুড়ে একীভূত; ক্যাটালগ, গেটওয়ে, ভার্সনিং নিয়ম ও সামঞ্জস্য গেট একটি ব্যবস্থা হিসেবে কাজ করে; প্রতিষ্ঠান মাপা গ্রহণ ও খরচের ভিত্তিতে নিয়মিত ইন্টারফেস অবসান, একত্র ও নতুন পরিসর করে; মিথস্ক্রিয়ার ধরন ও ভার্সনিং মান ইকোসিস্টেম, অংশীদার ও প্রযুক্তি সরলে খাপ খাইয়ে নেয়, এবং ভাঙনের পরিবর্তন বিরল ও ভালোভাবে পরিচালিত।

আলোচনার ভাবনা

  • একটি অভ্যন্তরীণ API বাইরে প্রকাশ করার মতো যথেষ্ট স্থিতিশীল কখন তা কীভাবে ঠিক করবেন?
  • আপনার প্রেক্ষাপটে অবসানিত সংস্করণের সঠিক সমর্থন-সময় কত, এবং তার খরচ কে দেয়?
  • অভ্যন্তরীণভাবে কোথায় GraphQL বা gRPC REST-কে প্রতিস্থাপন করা উচিত, আর কোথায় তারা মূল্যের চেয়ে বেশি জটিলতা যোগ করবে?
  • বাধা না হয়ে বহু স্বায়ত্তশাসিত দল জুড়ে API সামঞ্জস্য কীভাবে প্রয়োগ করবেন?
  • AI-ব্যবহারযোগ্য API ও এজেন্ট টুল ইন্টারফেস আপনার নকশা রীতি কীভাবে বদলানো উচিত?
  • কোন স্বয়ংক্রিয় পরীক্ষা চালু হওয়ার আগেই পশ্চাদ্‌সামঞ্জস্যহীন পরিবর্তন ধরতে পারে?

প্রধান শিক্ষা

  • আগে চুক্তি নকশা করুন; API একটি পণ্য এবং একটি দীর্ঘজীবী প্রতিশ্রুতি।
  • পশ্চাদ্‌সামঞ্জস্য গ্রাহকদের রক্ষা করে; ভাঙনের পরিবর্তনে নতুন সংস্করণ ও মাইগ্রেশনের পথ লাগে।
  • ফ্যাশনে নয়, মিথস্ক্রিয়ার খাপ অনুযায়ী REST, GraphQL, gRPC বা ইভেন্ট বেছে নিন।
  • প্রথম দিন থেকে আইডেম্পোটেন্সি, পেজিনেশন, রেট লিমিটিং ও সামঞ্জস্যপূর্ণ ত্রুটি গড়ুন।
  • API-কে মালিক, ক্যাটালগ ও শক্তিশালী ডেভেলপার অভিজ্ঞতাসহ পণ্য হিসেবে নিয়ন্ত্রণ করুন।

তথ্যসূত্র ও আরও পড়ার জন্য

  • Roy Fielding, Architectural Styles and the Design of Network-based Software Architectures (গবেষণাপত্র)
  • Arnaud Lauret, The Design of Web APIs
  • Mike Amundsen, RESTful Web APIs এবং Design and Build Great Web APIs
  • Sam Newman, Building Microservices
  • OpenAPI Specification; JSON Schema (রেফারেন্স মান হিসেবে)
  • Martin Kleppmann, Designing Data-Intensive Applications