ডকুমেন্টেশনমডুলার রাউটার
নেক্সি এবং 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 বৈশিষ্ট্য | নেক্সিতে স্ট্যাটাস |
|---|---|
কাস্টম প্রদানকারী (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 অ্যাপ্লিকেশনে চালিত, এবং সহাবস্থান করতে পারে।