Sensei 通过自动处理路由、数据验证和响应映射来简化创建 API 客户端的过程。这降低了 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'> <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", ...)
当Sensei不知道如何处理请求时,你可以自己处理,使用预处理作为prepare,后处理作为finalize
Sensei:它提供了高水平的抽象。 Sensei 简化了 API 包装器的创建,提供了用于轻松路由、数据验证以及将 API 响应自动映射到模型的装饰器。这减少了样板文件并提高了代码的可读性和可维护性。
裸 HTTP 客户端:像 requests 或 httpx 这样的裸 HTTP 客户端需要手动管理请求、处理响应解析、数据验证和错误处理。您必须为每个端点编写重复的代码。
Sensei 提供了对标准 API 和混乱 API 都有用的功能:
使用 API 的开发人员、数据科学家和分析师等
以上是Sensei:简化 API 客户端生成的详细内容。更多信息请关注PHP中文网其他相关文章!