> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/random-topics/routing.md).

# Routing

### Routing কী? কেন এটা দরকার?

ধরুন, আপনি গুগল ক্রোম খুলে লিখলেন `www.facebook.com/login`

আপনি কি ভাবছেন এটা যাদুতে `/login` পেজে চলে গেল?

না!\
এর পেছনে কাজ করে **Routing System** — যা ঠিক করে দেয়:

> এই URL `/login` এসেছে, তাহলে কোন ফাংশনটা এই অনুরোধ (request) গ্রহণ করবে এবং ইউজারকে কী দেখাবে?

Routing ছাড়া, কোন ওয়েব অ্যাপ কাজই করতে পারবে না।

***

### Routing কত ধরনের?

Routing সাধারণত ২ ধরনের হয়:

#### 1️⃣ Annotation Routing

কোডের পাশে সরাসরি লেখা থাকে, এই URL কোন ফাংশন চালাবে।

#### 2️⃣ Centralized Routing

সব URL এক জায়গায় আলাদা ফাইলে সংরক্ষণ করা হয়।

***

### 1️⃣ Annotation Routing — যার কাজ, তার ঘরে রাউট লেখা

#### সহজ ভাষায়:

আপনি প্রতিটা রুমের দরজায় লিখে দিয়েছেন:

> 🏷️ এই রুম HR এর, এই রুম IT এর — কেউ চাইলে দরজার লেখা দেখে নিজেই চলে যেতে পারে।

#### কোড উদাহরণ (Java Spring):

```java
@RestController
public class HelloController {
    
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}
```

এখানে `/hello` URL এ কেউ রিকোয়েস্ট করলে `sayHello()` ফাংশন কাজ করবে।

***

#### ✅ সুবিধা:

* কোড পড়া সহজ
* রাউট এবং ফাংশন পাশাপাশি, সহজে খুঁজে পাওয়া যায়
* ছোট বা Microservice অ্যাপের জন্য ভালো

#### ❌ অসুবিধা:

* সব রাউট খুঁজতে পুরো কোড ঘাঁটতে হয়
* বড় টিমে কনফিউশন হতে পারে কে কোন রাউট লিখেছে

***

### 2️⃣ Centralized Routing — সব রাস্তা আসে এক কার্যালয়ে

#### সহজ ভাষায়:

সব পথ আগে রিসেপশনে আসে। রিসেপশন দেখে বলে দেয়, আপনি এখানে গেলে পাবেন X বিভাগ।

#### কোড উদাহরণ (Django):

```python
# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.say_hello),
]
```

এখানে `/hello` URL এ গেলে, `say_hello()` ফাংশন কল হবে।

***

#### ✅ সুবিধা:

* সব রাউট এক জায়গায় থাকায় Maintain করা সহজ
* বড় টিমে কাজ করলে কে কী রাউট করছে, ক্লিয়ার
* ডকুমেন্টেশন টাইপ ফিলিং—সব একনজরে দেখা যায়

#### ❌ অসুবিধা:

* রাউট আর ফাংশন আলাদা থাকায় মাঝে মাঝে খুঁজে বের করতে হয়
* ছোট অ্যাপের জন্য অল্প বেশি ওভারহেড

***

### বাস্তব জীবনের উদারহণ

ধরুন, আপনি একটা বিশাল অফিস বিল্ডিং বানালেন।

#### 🏷️ Annotation Routing মানে:

> প্রতিটি দরজার সামনে লেখা:\
> 🛎️ “Accounts”, “HR”, “Support”\
> কেউ চাইলে সরাসরি দরজার লেখা দেখে ঢুকে যেতে পারে।

#### 🏛️ Centralized Routing মানে:

> বিল্ডিংয়ের নিচে রিসেপশন আছে।\
> সবাই প্রথমে রিসেপশনে যায়। রিসেপশন জানিয়ে দেয়, “Accounts-এ যেতে চাইলে ৩য় তলায় যান।”

***

### বিভিন্ন ফ্রেমওয়ার্কে কেমন হয়?

| ফ্রেমওয়ার্ক            | Default Routing Style | রাউট লেখার জায়গা                |
| ---------------------- | --------------------- | ------------------------------- |
| **Django**             | Centralized Routing   | `urls.py` ফাইলে                 |
| **Laravel**            | Centralized Routing   | `routes/web.php` ফাইলে          |
| **Spring Boot**        | Annotation Routing    | Controller ক্লাসে `@GetMapping` |
| **.NET (Minimal API)** | Annotation Routing    | `MapGet()`, `MapPost()` ইত্যাদি |
| **Express.js**         | Mix of both           | আপনি চাইলে আলাদা বা ইনলাইন      |

***

### প্র্যাকটিকাল টিপস

* Django বা Laravel এ রাউটিং সবসময় Centralized রাখাই ভালো।
* Spring Boot বা .NET Core Minimal API তে Annotation Routing বেছে নিন—ফাস্ট ডেভেলপমেন্ট হয়।
* REST API বানালে Endpoint গুলোর পাশে annotation দিলে খুব Clear  হয়।
* টিমে কাজ করলে সব রাউট এক জায়গায় রাখলে অন্য কেউ বুঝে নিতে পারে কোনটা কোন ফাংশন।

***

Routing শুধু “URL কোন ফাংশন চালাবে” সেটাই না—এটা আপনার অ্যাপের **ব্যাকবোন**।\
ঠিকভাবে রাউটিং ডিজাইন করলে কোড হবে:

* ✅ সহজে বুঝতে পারা যায়
* ✅ কম বাগ হবে
* ✅ স্কেল করানো সহজ হবে
