برنامه نویسی

Sensei: ساده سازی API Client Generation

Summarize this content to 400 words in Persian Lang

سنسی فرآیند ایجاد API Clients را با مدیریت مسیریابی، اعتبارسنجی داده ها و نگاشت پاسخ به طور خودکار ساده می کند. این امر پیچیدگی درخواست‌های HTTP را کاهش می‌دهد و ادغام APIها را در پروژه‌های شما بدون نوشتن کد دیگ بخار آسان‌تر می‌کند.

Sensei از راهنمایی‌های نوع برای تولید کلاینت‌های API، ارائه رابط‌های واضح و اعتبارسنجی قوی برای تعامل با APIها استفاده می‌کند. سینتکس آن بسیار شبیه به فریمورک است FastAPI

مثال کد

from typing import Annotated
from sensei import Router, Path, APIModel

router = Router(‘https://pokeapi.co/api/v2/’)

class Pokemon(APIModel):
name: str
id: int
height: int
weight: int

@router.get(‘/pokemon/{name}’)
def get_pokemon(name: Annotated[str, Path(max_length=300)]) -> Pokemon:
pass

pokemon = get_pokemon(name=”pikachu”)
print(pokemon) # Pokemon(name=”pikachu” id=25 height=4 weight=60)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آیا به نظر شما نمی رسد که تابع حاوی کد نیست؟ سنسی به جای تو می نویسد! نتیجه تماس get_pokemon(name=”pikachu”) شی است Pokemon(name=”pikachu” id=25 height=4 weight=60) حاوی داده های پوکمون

یک رویکرد OOP فوق العاده وجود دارد که توسط Sensei پیشنهاد شده است:

class User(APIModel):
email: EmailStr
id: PositiveInt
first_name: str
last_name: str
avatar: AnyHttpUrl

@classmethod
@router.get(‘/users’)
def query(
cls,
page: Annotated[int, Query()] = 1,
per_page: Annotated[int, Query(le=7)] = 3
) -> list[Self]:
pass

@classmethod
@router.get(‘/users/{id_}’)
def get(cls, id_: Annotated[int, Path(alias=’id’)]) -> Self:
pass

@router.post(‘/token’)
def login(self) -> str:
pass

@login.prepare
def _login_in(self, args: Args) -> Args:
args.json_[’email’] = self.email
return args

@login.finalize
def _login_out(self, response: Response) -> str:
return response.json()[‘token’]

user = User.get(1)
user.login() # User(id=1, email=”john@example.com”, first_name=”John”, …)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که Sensei نمی داند چگونه یک درخواست را مدیریت کند، می توانید آن را خودتان با استفاده از پیش پردازش به عنوان انجام دهید prepare و پس پردازش به عنوان finalize

مقایسه

سنسی: سطح بالایی از انتزاع را ارائه می دهد. Sensei ایجاد بسته‌های API را ساده می‌کند، دکوراتورهایی را برای مسیریابی آسان، اعتبارسنجی داده‌ها و نقشه‌برداری خودکار پاسخ‌های API به مدل‌ها ارائه می‌دهد. این کار دیگ بخار را کاهش می دهد و خوانایی کد و قابلیت نگهداری را بهبود می بخشد.

کلاینت برهنه HTTP: یک سرویس گیرنده HTTP خالی مانند requests یا httpx نیاز به مدیریت دستی درخواست‌ها، مدیریت تجزیه پاسخ، اعتبارسنجی داده‌ها و مدیریت خطا دارد. برای هر نقطه پایانی باید کدهای تکراری بنویسید.

ویژگی ها

Sensei ویژگی هایی را ارائه می دهد که برای API های استاندارد و آشفته مفید هستند:

اعتبار سنجی 🛡️

مدیریت محدود کننده نرخ ⏳

جابجایی اتوماتیک انواع مرجوعی 🔄

معماری DRY بدون تکرار 🧹

پشتیبانی Async ⚡

تبدیل کیس و نام مستعار 🔠

مشتری خود برای درخواست های سریع 🚀

مخاطب هدف

توسعه دهندگانی که با API ها کار می کنند، دانشمندان و تحلیلگران داده و غیره.

سنسی

سنسی فرآیند ایجاد API Clients را با مدیریت مسیریابی، اعتبارسنجی داده ها و نگاشت پاسخ به طور خودکار ساده می کند. این امر پیچیدگی درخواست‌های HTTP را کاهش می‌دهد و ادغام APIها را در پروژه‌های شما بدون نوشتن کد دیگ بخار آسان‌تر می‌کند.

Sensei از راهنمایی‌های نوع برای تولید کلاینت‌های API، ارائه رابط‌های واضح و اعتبارسنجی قوی برای تعامل با APIها استفاده می‌کند. سینتکس آن بسیار شبیه به فریمورک است FastAPI

مثال کد

from typing import Annotated
from sensei import Router, Path, APIModel

router = Router('https://pokeapi.co/api/v2/')


class Pokemon(APIModel):
    name: str
    id: int
    height: int
    weight: int


@router.get('/pokemon/{name}')
def get_pokemon(name: Annotated[str, Path(max_length=300)]) -> Pokemon: 
    pass

pokemon = get_pokemon(name="pikachu")
print(pokemon) # Pokemon(name="pikachu" id=25 height=4 weight=60)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آیا به نظر شما نمی رسد که تابع حاوی کد نیست؟ سنسی به جای تو می نویسد! نتیجه تماس get_pokemon(name="pikachu") شی است Pokemon(name="pikachu" id=25 height=4 weight=60) حاوی داده های پوکمون

یک رویکرد OOP فوق العاده وجود دارد که توسط Sensei پیشنهاد شده است:

class User(APIModel):
    email: EmailStr
    id: PositiveInt
    first_name: str
    last_name: str
    avatar: AnyHttpUrl

    @classmethod
    @router.get('/users')
    def query(
            cls,
            page: Annotated[int, Query()] = 1,
            per_page: Annotated[int, Query(le=7)] = 3
    ) -> list[Self]:
        pass

    @classmethod
    @router.get('/users/{id_}')
    def get(cls, id_: Annotated[int, Path(alias='id')]) -> Self: 
        pass

    @router.post('/token')
    def login(self) -> str: 
        pass

    @login.prepare
    def _login_in(self, args: Args) -> Args:
        args.json_['email'] = self.email
        return args

    @login.finalize
    def _login_out(self, response: Response) -> str:
        return response.json()['token']

user = User.get(1)
user.login() # User(id=1, email="john@example.com", first_name="John", ...)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که Sensei نمی داند چگونه یک درخواست را مدیریت کند، می توانید آن را خودتان با استفاده از پیش پردازش به عنوان انجام دهید prepare و پس پردازش به عنوان finalize

مقایسه

سنسی: سطح بالایی از انتزاع را ارائه می دهد. Sensei ایجاد بسته‌های API را ساده می‌کند، دکوراتورهایی را برای مسیریابی آسان، اعتبارسنجی داده‌ها و نقشه‌برداری خودکار پاسخ‌های API به مدل‌ها ارائه می‌دهد. این کار دیگ بخار را کاهش می دهد و خوانایی کد و قابلیت نگهداری را بهبود می بخشد.

کلاینت برهنه HTTP: یک سرویس گیرنده HTTP خالی مانند requests یا httpx نیاز به مدیریت دستی درخواست‌ها، مدیریت تجزیه پاسخ، اعتبارسنجی داده‌ها و مدیریت خطا دارد. برای هر نقطه پایانی باید کدهای تکراری بنویسید.

ویژگی ها

Sensei ویژگی هایی را ارائه می دهد که برای API های استاندارد و آشفته مفید هستند:

  1. اعتبار سنجی 🛡️
  2. مدیریت محدود کننده نرخ ⏳
  3. جابجایی اتوماتیک انواع مرجوعی 🔄
  4. معماری DRY بدون تکرار 🧹
  5. پشتیبانی Async ⚡
  6. تبدیل کیس و نام مستعار 🔠
  7. مشتری خود برای درخواست های سریع 🚀

مخاطب هدف

توسعه دهندگانی که با API ها کار می کنند، دانشمندان و تحلیلگران داده و غیره.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا