Heim  >  Artikel  >  Backend-Entwicklung  >  Sensei: Vereinfachen Sie die API-Client-Generierung

Sensei: Vereinfachen Sie die API-Client-Generierung

Patricia Arquette
Patricia ArquetteOriginal
2024-11-26 07:04:12576Durchsuche

Sensei: Simplify API Client Generation

Sensei vereinfacht den Prozess der Erstellung von API-Clients, indem Routing, Datenvalidierung und Antwortzuordnung automatisch durchgeführt werden. Dies reduziert die Komplexität von HTTP-Anfragen und erleichtert die Integration von APIs in Ihre Projekte, ohne Boilerplate-Code schreiben zu müssen.

Sensei verwendet Typhinweise, um API-Clients zu generieren und bietet so klare Schnittstellen und eine robuste Validierung für die Interaktion mit APIs. Seine Syntax ist dem Framework FastAPI

sehr ähnlich
  • Dokumentation: https://sensei.crocofactory.dev
  • Quellcode: https://github.com/CrocoFactory/sensei

Codebeispiel

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", ...)

Wenn Sensei nicht weiß, wie er mit einer Anfrage umgehen soll, können Sie es selbst tun, indem Sie die Vorverarbeitung als Vorbereitung und die Nachverarbeitung als Abschluss verwenden

Vergleich

Sensei: Es bietet ein hohes Maß an Abstraktion. Sensei vereinfacht die Erstellung von API-Wrappern und bietet Dekoratoren für einfaches Routing, Datenvalidierung und automatische Zuordnung von API-Antworten zu Modellen. Dies reduziert den Boilerplate und verbessert die Lesbarkeit und Wartbarkeit des Codes.

Barer HTTP-Client: Ein bloßer HTTP-Client wie Requests oder httpx erfordert die manuelle Verwaltung von Anfragen, die Antwortanalyse, die Datenvalidierung und die Fehlerbehandlung. Sie müssen für jeden Endpunkt sich wiederholenden Code schreiben.

Merkmale

Sensei bietet Funktionen, die sowohl für Standard-APIs als auch für unübersichtliche APIs nützlich sind:

  1. Validierung ?️
  2. Handhabung mit Ratenbegrenzung ⏳
  3. Automatische Behandlung von Rückgabetypen?
  4. TROCKENE Architektur ohne Duplikationen?
  5. Async-Unterstützung ⚡
  6. Groß-/Kleinschreibung und Aliase?
  7. Eigener Client für schnelle Anfragen?

Zielgruppe

Entwickler, die mit APIs arbeiten, Datenwissenschaftler und Analysten usw.

Das obige ist der detaillierte Inhalt vonSensei: Vereinfachen Sie die API-Client-Generierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn