চমৎকার! গত লেকচারে (Introduction to Web API) আমরা Web API-এর থিওরি এবং বেসিক কনসেপ্ট জেনেছি। আজ আমরা হাতে-কলমে একটি ASP.NET Core Web API প্রজেক্ট তৈরি করতে যাচ্ছি। এটি আমাদের “CitiesManager” প্রজেক্টের শুরু। চলুন প্রজেক্ট সেটআপ এবং এর ভেতরের আর্কিটেকচার সম্পর্কে বিস্তারিত জেনে নিই।


📝 Lecture Summary

ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য পুরো লেকচারের মূল বিষয়গুলো নিচে তালিকাভুক্ত করা হলো:

  • Project Template: নতুন প্রজেক্ট তৈরির জন্য “ASP.NET Core Web API” টেমপ্লেট নির্বাচন করতে হবে।
  • Naming Convention: প্রজেক্টের নামের শেষে .WebApi ব্যবহার করা ভালো প্র্যাকটিস (যেমন: CitiesManager.WebApi)।
  • Important Settings: প্রজেক্ট তৈরির সময় “Use controllers” এবং “Configure for HTTPS” চেকবক্স টিক দিতে হবে।
  • Disabled Settings: Authentication, Open API (Swagger), এবং “Don’t use top-level statements” আপাতত আনচেক রাখতে হবে।
  • Core Difference: Web API প্রজেক্টে কোনো Views বা UI থাকে না। তাই Program.cs ফাইলে AddControllersWithViews() এর বদলে শুধুমাত্র AddControllers() ব্যবহার করা হয়।
  • Configuration: launchSettings.json ফাইলের মাধ্যমে প্রজেক্টের পোর্ট এবং ডিফল্ট launchUrl (যেমন: weatherforecast) কন্ট্রোল করা হয়।

🧠 Comprehensive Breakdown

নিচে লেকচারের প্রতিটি কনসেপ্ট বিস্তারিত এবং সহজভাবে ব্যাখ্যা করা হলো।

১. Project Creation and Configuration (Importance: 10/10)

Visual Studio ব্যবহার করে একটি Web API প্রজেক্ট তৈরি করার সময় কিছু নির্দিষ্ট কনফিগারেশন মাথায় রাখতে হয়।

  • Template Selection: Empty project এর বদলে “ASP.NET Core Web API” টেমপ্লেট সিলেক্ট করলে ডিফল্ট কিছু Controller এবং Configuration অটোমেটিক তৈরি হয়ে যায়, যা কাজকে সহজ করে।
  • Use controllers: এই অপশনটি টিক দেওয়া খুবই গুরুত্বপূর্ণ। এটি আনচেক করলে প্রজেক্টটি Minimal API প্যাটার্নে তৈরি হবে। যেহেতু আমাদের বর্তমান ফোকাস Controller-based Web API, তাই এটি এনাবল রাখতে হবে।
  • Enable OpenAPI support: এটি মূলত Swagger (যা API ডকুমেন্টেশন তৈরি করে)। সামনের লেকচারগুলোতে এটি বিস্তারিত শেখানো হবে বলে আপাতত এটি ডিজেবল রাখা হয়েছে।

VS Code Alternative: > ভিডিওতে Visual Studio এর UI দেখানো হয়েছে। আপনি যদি Visual Studio Code ব্যবহার করেন, তবে টার্মিনালে নিচের কমান্ডটি লিখলে হুবহু একই কনফিগারেশনের প্রজেক্ট তৈরি হবে: dotnet new webapi -n CitiesManager.WebApi --use-controllers

২. Architecture without Views (Importance: 10/10)

MVC প্রজেক্টের সাথে Web API প্রজেক্টের সবচেয়ে বড় পার্থক্য হলো— এখানে কোনো Views ফোল্ডার থাকে না। Razor Views, Strongly Typed Views, Layout Views বা Partial Views এর মতো কোনো কনসেপ্ট এখানে কাজ করবে না, কারণ API-এর কাজ শুধু Data (JSON) আদান-প্রদান করা, UI দেখানো নয়। তবে Model Binding এবং Validations আগের মতোই কাজ করবে।

৩. Program.cs Changes (Importance: 9/10)

যেহেতু প্রজেক্টে কোনো View নেই, তাই Service Registration-এ একটি ছোট কিন্তু গুরুত্বপূর্ণ পরিবর্তন আসে।

Why? AddControllersWithViews() পুরো MVC পাইপলাইন (Controller + View Engine) লোড করে, যা API-এর জন্য অপ্রয়োজনীয় এবং মেমরি নষ্ট করে। এর বদলে শুধু AddControllers() ব্যবহার করলে শুধুমাত্র API-এর জন্য প্রয়োজনীয় Controller ফিচারগুলো লোড হয়।

৪. launchSettings.json and HTTPS (Importance: 7/10)

Properties ফোল্ডারের ভেতরে launchSettings.json ফাইল থাকে। আপনি যখন প্রজেক্ট রান করেন (F5 দিয়ে), তখন কোন পোর্টে (Port) এবং কোন URL-এ অ্যাপ্লিকেশনটি চালু হবে তা এখান থেকে নির্ধারিত হয়।

  • Profiles: এখানে HTTP এবং HTTPS এর জন্য আলাদা প্রোফাইল থাকে।
  • launchUrl: ডিফল্টভাবে এটি weatherforecast সেট করা থাকে। অর্থাৎ, অ্যাপ্লিকেশন রান হলে ব্রাউজার সরাসরি https://localhost:[port]/weatherforecast ঠিকানায় হিট করবে এবং ডিফল্ট Controller টি রেসপন্স করবে।
  • UseHsts(): Program.cs ফাইলে app.UseHsts() মেথডটি ক্লায়েন্ট (ব্রাউজার) কে বাধ্য করে যেন তারা সবসময় সুরক্ষিত HTTPS প্রোটোকল ব্যবহার করে যোগাযোগ করে।

💻 Code Implementation (.NET 10 Updated)

যেহেতু আপনি .NET-এর আধুনিক ভার্সন ব্যবহার করছেন এবং Top-level statements এনাবল রেখেছেন, আপনার Program.cs ফাইলটি দেখতে অনেক ক্লিন এবং ছিমছাম হবে। নিচে .NET 10 এর স্ট্যান্ডার্ড অনুযায়ী একটি Web API প্রজেক্টের Program.cs ফাইলের কোড দেওয়া হলো:

var builder = WebApplication.CreateBuilder(args);
 
// Add services to the container.
// MVC এর মতো AddControllersWithViews() নয়, শুধু AddControllers() ব্যবহার করা হচ্ছে
builder.Services.AddControllers(); 
 
var app = builder.Build();
 
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    // প্রোডাকশনে HTTPS বাধ্য করার জন্য HSTS ব্যবহার করা হয়
    app.UseHsts(); 
}
 
app.UseHttpsRedirection();
 
app.UseAuthorization();
 
// এটি Controller এর রাউটিং গুলোকে ম্যাপ করে
app.MapControllers(); 
 
app.Run();
 

🏆 Best Practices for Web API Initialization

  • Naming Conventions: প্রজেক্টের নাম দেখেই যেন বোঝা যায় এটি একটি API, তাই CitiesManager.WebApi বা CitiesManager.API এর মতো পরিষ্কার নাম ব্যবহার করুন।
  • Clean launchSettings.json: যদি আপনি weatherforecast ডিফল্ট কন্ট্রোলারটি ডিলিট করে দেন, তবে অবশ্যই launchSettings.json থেকে launchUrl প্রপার্টিটি মুছে ফেলবেন বা আপনার তৈরি করা নতুন API এর রুট পাথ দিয়ে আপডেট করবেন। নতুবা প্রজেক্ট রান করার পর ব্রাউজারে 404 Error দেখাবে।
  • Minimize Dependencies: Web API প্রজেক্টে কখনো UI রিলেটেড প্যাকেজ বা লাইব্রেরি (যেমন: Razor) ইন্সটল করবেন না। অ্যাপ্লিকেশন যতটা হালকা রাখা যায়, API তত বেশি ফাস্ট পারফর্ম করবে।