Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Sensei: Permudahkan Penjanaan Pelanggan API

Sensei: Permudahkan Penjanaan Pelanggan API

Patricia Arquette
Patricia Arquetteasal
2024-11-26 07:04:12574semak imbas

Sensei: Simplify API Client Generation

Sensei memudahkan proses mencipta Klien API dengan mengendalikan penghalaan, pengesahan data dan pemetaan respons secara automatik. Ini mengurangkan kerumitan permintaan HTTP, menjadikannya lebih mudah untuk menyepadukan API ke dalam projek anda tanpa menulis kod boilerplate.

Sensei menggunakan pembayang jenis untuk menjana klien API, menyediakan antara muka yang jelas dan pengesahan yang teguh untuk berinteraksi dengan API. Sintaksnya sangat serupa dengan rangka kerja FastAPI

  • Dokumentasi: https://sensei.crocofactory.dev
  • Kod Sumber: https://github.com/CrocoFactory/sensei

Contoh Kod

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'>



<p>Didn't it seem to you that the function doesn't contain the code? <strong>Sensei writes it instead of you!</strong> The result of the call get_pokemon(name="pikachu") is the object Pokemon(name='pikachu'>

</p><p>There is a wonderful OOP approach proposed by Sensei:<br>
</p>

<pre class="brush:php;toolbar:false">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", ...)

Apabila Sensei tidak tahu cara mengendalikan permintaan, anda boleh melakukannya sendiri, menggunakan prapemprosesan sebagai penyediaan dan pasca pemprosesan sebagai akhir

Perbandingan

Sensei: Ia menyediakan tahap abstraksi yang tinggi. Sensei memudahkan mencipta pembalut API, menawarkan penghias untuk penghalaan mudah, pengesahan data dan pemetaan automatik respons API kepada model. Ini mengurangkan boilerplate dan meningkatkan kebolehbacaan dan kebolehselenggaraan kod.

Klien HTTP Kosong: Pelanggan HTTP kosong seperti permintaan atau httpx memerlukan mengurus permintaan secara manual, mengendalikan penghuraian respons, pengesahan data dan pengendalian ralat. Anda perlu menulis kod berulang untuk setiap titik akhir.

Ciri-ciri

Sensei menyediakan ciri yang berguna untuk API standard dan tidak kemas:

  1. Pengesahan ?️
  2. Pengendalian Mengehadkan Kadar ⏳
  3. Pengendalian Automatik Jenis Pemulangan ?
  4. Seni Bina KERING Tanpa Pertindihan ?
  5. Sokongan Async ⚡
  6. Penukaran Kes dan Alias ​​?
  7. Pelanggan Sendiri untuk Permintaan Pantas ?

Khalayak Sasaran

Pembangun Bekerja dengan API, Saintis Data dan Penganalisis, dsb.

Atas ialah kandungan terperinci Sensei: Permudahkan Penjanaan Pelanggan API. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn