دستاویزاتماڈیولر راؤٹر
Nexy اور NestJS
ماڈیولر راؤٹر NestJS: کنٹرولرز، ماڈیولز اور کنسٹرکٹر انجیکشن سے متاثر ہے۔ یہ FastAPI پر ایک پتلی تہہ ہے، اس لیے یہ تمام NestJS کو دوبارہ بنانے کی کوشش نہیں کرتی ہے۔ یہ صفحہ دونوں اطراف کی فہرست دیتا ہے۔
کیا مماثل ہے
| NestJS | نیکسی |
|---|---|
@Controller('users') |
@Controller("/users") |
@Module({ controllers, providers, imports, exports }) |
@Module() ایک ہی چار طبقاتی صفات کے ساتھ |
@Injectable() |
@Injectable() |
| کنسٹرکٹر انجیکشن | __init__ پیرامیٹرز ٹائپ تشریحات سے حل ہوئے۔ |
| سنگلٹن، درخواست اور عارضی دائرہ کار | Scope.SINGLETON، Scope.REQUEST، Scope.TRANSIENT |
@UseGuards(AuthGuard) |
@UseGuard(guard) (ایک FastAPI انحصار) |
@ApiOperation، @ApiResponse (بیڑیاں) |
@UseRoute، @UseResponse (OpenAPI، پیش خدمت /docs) |
| WebSocket گیٹ ویز | ایک کنٹرولر پر async def SOCKET(...) |
ڈی ٹی او کی توثیق (class-validator) |
Pydantic ماڈل، FastAPI کے مقامی |
| سرکلر انحصار کا پتہ لگانا | RecursionError کلاس کا نام دینا |
وہی کنٹرولر اور اس کی انجیکشن سروس، NestJS پہلے:
@Injectable()export class UsersService { findAll() { return [{ id: 1, name: "Ada" }]; }} @Controller("users")export class UsersController { constructor(private readonly users: UsersService) {} @Get() findAll() { return this.users.findAll(); }}from nexy.decorators import Controller, Injectable @Injectable()class UserService: def find_all(self) -> list[dict]: return [{"id": 1, "name": "Ada"}] @Controller("/users")class UserController: def __init__(self, users: UserService) -> None: self.users = users async def get(self) -> list[dict]: return self.users.find_all()کیا فرق ہے
- ہینڈلرز ایسے طریقے ہیں جن کا نام HTTP فعل (
get،post...)، ایک فی کنٹرولر کے نام پر رکھا گیا ہے۔ - گارڈز اور مڈل ویئر ڈیکوریٹر FastAPI
Dependsہیں،canActivateکے ساتھ کلاس نہیں۔ - پیرامیٹرز (
@Body،@Param،@Query) ہیں FastAPI پیرامیٹرز: ٹائپ تشریحات،Query،Path،Body۔ - پائپس ہیں Pydantic توثیق اور FastAPI انحصار۔
@Query()، ایک ڈی ٹی او اور گارڈ کلاس ایک تشریح، ایک Pydantic ماڈل اور ایک فنکشن بن جاتے ہیں:
from fastapi import Header, HTTPException, Queryfrom pydantic import BaseModelfrom nexy.decorators import Controller, UseGuard class NewPost(BaseModel): title: str def require_token(x_token: str = Header(...)) -> None: if x_token != "secret": raise HTTPException(status_code=403, detail="Forbidden") @Controller("/posts")@UseGuard(require_token)class PostController: async def get(self, limit: int = Query(10)) -> list[dict]: return [] async def post(self, body: NewPost) -> dict: return {"title": body.title}کیا غائب ہے
| NestJS خصوصیت | Nexy میں حیثیت |
|---|---|
حسب ضرورت فراہم کنندگان (useValue، useFactory، useClass، سٹرنگ ٹوکنز) |
دستیاب نہیں: صرف @Injectable() کلاسز |
| انٹرفیس یا خلاصہ کلاس کے ذریعہ انجیکشن لگانا | دستیاب نہیں |
| ماڈیول انکیپسولیشن | نافذ نہیں کیا گیا: کنٹینر مکمل عمل ہے، exports صرف بے چین ریزولوشن کو کنٹرول کرتا ہے |
متحرک اور عالمی ماڈیولز (forRoot، @Global) |
دستیاب نہیں |
لائف سائیکل ہکس (onModuleInit، onApplicationShutdown) |
دستیاب نہیں |
| انٹرسیپٹرز | ASGI مڈل ویئر (useMiddlewares) یا انحصار استعمال کریں۔ |
| استثنائی فلٹرز | استثنیٰ ہینڈلرز FastAPI استعمال کریں۔ |
| فراہم کنندہ اوور رائیڈز کے ساتھ ٹیسٹنگ ماڈیول | کوئی عوامی API نہیں؛ استعمال کریں FastAPI dependency_overrides اور TestClient |
| کنفیگ ماڈیول، شیڈولنگ، قطاریں، CQRS، مائیکرو سروسز، کیشنگ | Nexy کا حصہ نہیں؛ Python ماحولیاتی نظام کا استعمال کریں۔ |
ایک useFactory فراہم کنندہ کی جگہ، Depends کے پیچھے ایک سادہ فنکشن، جسے ایک ٹیسٹ dependency_overrides سے اوور رائیڈ کرتا ہے:
from fastapi import Dependsfrom nexy.decorators import Controller def get_settings() -> dict: return {"currency": "EUR"} @Controller("/reports")class ReportController: async def get(self, settings: dict = Depends(get_settings)) -> dict: return {"currency": settings["currency"]}اسے کب چننا ہے۔
جب آپ کسی بڑے API کے لیے انجیکشن کے ساتھ کلاس پر مبنی ڈھانچہ چاہتے ہیں تو ماڈیولر راؤٹر کا انتخاب کریں۔ جب یو آر ایل کا ڈھانچہ ترتیب دینے والا اصول ہو تو فائل پر مبنی روٹر کا انتخاب کریں۔ دونوں کو nx new کے ذریعے بنایا گیا ہے، ایک ہی FastAPI ایپلی کیشن پر چلتے ہیں، اور ایک ساتھ رہ سکتے ہیں۔