Maison > développement back-end > Tutoriel Python > Sensei : Simplifiez la génération de clients API

Sensei : Simplifiez la génération de clients API

Patricia Arquette
Libérer: 2024-11-26 07:04:12
original
635 Les gens l'ont consulté

Sensei: Simplify API Client Generation

Sensei simplifie le processus de création de clients API en gérant automatiquement le routage, la validation des données et le mappage des réponses. Cela réduit la complexité des requêtes HTTP, facilitant ainsi l'intégration d'API dans vos projets sans écrire de code passe-partout.

Sensei utilise des indices de type pour générer des clients API, fournissant des interfaces claires et une validation robuste pour interagir avec les API. Sa syntaxe est très similaire au framework FastAPI

  • Documentation : https://sensei.crocofactory.dev
  • Code source : https://github.com/CrocoFactory/sensei

Exemple de code

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", ...)
Copier après la connexion

Lorsque Sensei ne sait pas comment gérer une demande, vous pouvez le faire vous-même, en utilisant le prétraitement pour préparer et le post-traitement pour finaliser

Comparaison

Sensei : Il offre un haut niveau d'abstraction. Sensei simplifie la création de wrappers d'API, en proposant des décorateurs pour faciliter le routage, la validation des données et le mappage automatique des réponses de l'API aux modèles. Cela réduit le passe-partout et améliore la lisibilité et la maintenabilité du code.

Client HTTP nu : Un client HTTP nu comme les requêtes ou httpx nécessite la gestion manuelle des requêtes, la gestion de l'analyse des réponses, la validation des données et la gestion des erreurs. Vous devez écrire du code répétitif pour chaque point de terminaison.

Caractéristiques

Sensei fournit des fonctionnalités utiles pour les API standard et compliquées :

  1. Validation ?️
  2. Gestion de la limitation de débit ⏳
  3. Gestion automatique des types de retour ?
  4. Architecture DRY sans duplications ?
  5. Support asynchrone ⚡
  6. Conversion de cas et alias ?
  7. Propre client pour des demandes rapides ?

Public cible

Développeurs travaillant avec des API, data scientists et analystes, etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal