API Reference¶
Component¶
HTTP 요청에 필요한 구성 요소입니다. 구성요소에는 Header, Query, Path, Body 등이 있습니다.
- class Component¶
요청 매개변수 구성요소(Component)의 기본 클래스입니다.
구성요소는 애너테이션(annotation)을 통해 함수의 매개변수를 header, query string, path placeholder, 요청 본문(request body) 중 하나로 대응시키는 데 사용됩니다.
- classmethod custom_name(name: str) Self¶
전송되는 이름이 고정된 구성요소 인스턴스를 반환합니다.
- 매개변수:
name (str) – 파이썬 매개변수 이름 대신 요청에 사용할 이름입니다.
- 예외 발생:
NotImplementedError – 이름 변경을 지원하지 않는 구성요소(
Path,Body등)인 경우 발생합니다.
- classmethod to_camel() Self¶
키를 camel case로 변환하는 구성요소 인스턴스를 반환합니다.
- 예외 발생:
NotImplementedError – 이름 변경을 지원하지 않는 구성요소인 경우 발생합니다.
- classmethod to_pascal() Self¶
키를 Pascal case로 변환하는 구성요소 인스턴스를 반환합니다.
- 예외 발생:
NotImplementedError – 이름 변경을 지원하지 않는 구성요소인 경우 발생합니다.
- class Body¶
기반 클래스:
_BodyFileComponent,_UnsupportedCustomNameComponent매개변수를 요청 본문 전체로 지정합니다.
dict,list,tuple값은 JSON으로 인코딩되며, 그 외의 값(파일과 유사한 값 포함)은 원본(raw) 본문 데이터로 전송됩니다.Body매개변수는BodyJson또는BodyForm매개변수와 함께 사용할 수 없습니다.metadata()는 원본 본문 인코딩을 바꾸지 않고 파일명과 콘텐츠 타입 메타데이터를 추가합니다.
- class BodyJson¶
기반 클래스:
Component매개변수를 JSON 요청 본문의 필드로 지정합니다.
값을 다른 이름 또는 중첩된 JSON 키 아래에 두려면
custom_key()를 사용하세요.
- class BodyForm¶
기반 클래스:
_BodyFileComponent매개변수를 form 요청 본문의 필드로 지정합니다.
파일과 유사한 값이거나
metadata()설정에 파일명이나 콘텐츠 타입이 지정된 필드는multipart/form-data를 사용하며, 그 외의 form 필드는 기본적으로 URL 인코딩됩니다.
- class Header¶
기반 클래스:
Component매개변수를 HTTP 요청 헤더로 지정합니다.
default_header()는 데코레이팅된 요청에 고정된 헤더를 추가합니다.
- class Path¶
기반 클래스:
_UnsupportedCustomNameComponent매개변수를 요청 경로의 플레이스홀더로 지정합니다.
매개변수 이름은
path안의str.format플레이스홀더와 일치해야 합니다.
Request Core¶
- class RequestCore¶
데코레이팅된 HTTP 요청의 기본 디스크립터입니다.
request core는 세션의 속성으로 접근되는 순간
BaseSession인스턴스에 바인딩됩니다. 바인딩된 요청은 고정 값과 애너테이션 매개변수로 백엔드에 맞는 요청을 만들고,Response매개변수를 채운 다음 데코레이팅된 함수를 실행합니다.- func¶
응답을 받은 후에 실행되는 동기 또는 비동기 함수입니다.
- Type:
Callable[…, Any]
- raise_on¶
HTTP 응답 상태가
200이 아니면HTTPException을 발생시킵니다. 4xx와 5xx 상태는 가능한 경우 해당하는 구체적인 예외 클래스를 사용합니다.- Type:
- body¶
고정된 요청 본문입니다. 인코딩 방식은
body_type에 의해 결정됩니다.- Type:
Optional[Any]
- header_parameter¶
요청 헤더로 사용되는 함수의 매개변수입니다.
- Type:
- query_parameter¶
쿼리 매개변수로 사용되는 함수의 매개변수입니다.
- Type:
- body_json_parameter¶
JSON 본문으로 모이는 함수의 매개변수입니다.
- Type:
- body_form_parameter¶
form 본문으로 모이는 함수의 매개변수입니다.
- Type:
- path_parameter¶
경로(path)에 대입되는 함수의 매개변수입니다.
- Type:
- body_parameter¶
요청 본문 전체로 사용되는 함수 매개변수의 메타데이터입니다.
- Type:
Optional[BodyEntry]
- body_parameter_type¶
매개변수 애너테이션이나 form 설정으로부터 추론된 명시적인 본문 인코딩 방식입니다.
- Type:
Optional[BodyType]
- @before_hook¶
HTTP 호출이 이루어지기 전에 실행되는 함수를 정의하는 데코레이터 메소드입니다.
주로 HTTP 호출 전에 필수적으로 입력되는 구성요소를 입력하는 함수로 구성합니다.
Example
class GithubService(AsyncSession): def __init__(self, token: str): self.token = token super().__init__("https://api.github.com", aiohttp.ClientSession) @request("GET", "/users/{user}/repos") async def list_repositories( self, response: Response, user: Annotated[str, Path] ) -> list[dict[str, Any]]: return response.json() @list_repositories.before_hook async def authorization(self, req_obj: RequestCore, path: str): req_obj.headers["Authorization"] = f"Bearer: {self.token}" return req_obj, path
- @after_hook¶
HTTP 호출이 이루어진 후에 실행되는 함수를 정의하는 데코레이터 메소드입니다.
주로 응답받은 결과가 올바른지 검증하거나, HTTP 호출에서 받은 원본 데이터를 올바르게 정리합니다.
Example
class GithubService(AsyncSession): def __init__(self): super().__init__("https://api.github.com", aiohttp.ClientSession) @request("GET", "/users/{user}/repos") async def list_repositories( self, response: Response, user: Annotated[str, Path] ) -> list[dict[str, Any]]: return response.json() @list_repositories.after_hook async def validation_status(self, response: Response): if response.status != 200: raise Exception("ERROR!") return response
- validation(parameter_name: str, index: int | None = None) ValidationDecorator¶
요청 함수 매개변수에 대한 검증기(validator)를 등록합니다.
검증기는 요청을 만들기 전에
(session, value)형태로 호출되며, 반환값이 요청 구성요소와 데코레이팅된 함수에 쓰이는 인자를 대체합니다.- 매개변수:
index
parameter_name (str) – 데코레이팅된 함수 시그니처에 있는 매개변수의 이름입니다.
- 예외 발생:
ValueError – 매개변수 이름이 비어 있거나 요청 시그니처에 존재하지 않는 경우 발생합니다.
- @request(method: str, path: str)¶
세션 메소드를 HTTP 요청으로 데코레이팅합니다.
데코레이팅된 메소드는
Session또는AsyncSession에서 접근하는 순간 그 세션에 바인딩됩니다. 호출될 때마다 고정 값과 구성요소 매개변수로 요청을 만들고, 응답 매개변수 자리에 맞는Response를 채워 넣습니다.- 매개변수:
name (Optional[str]) – 요청의 이름입니다. 기본값은 데코레이팅된 함수의 이름입니다.
method (str | Method) – HTTP 메소드입니다.
path (str) – 세션의 base URL을 기준으로 한 상대 경로입니다.
body (Optional[Any]) – 고정된 요청 본문입니다.
directly_response (DirectResponseType | bool) – 데코레이팅된 함수를 실행하지 않고 훅을 거친 응답을 반환합니다.
raise_on (bool) – HTTP 응답 상태가
200이 아니면HTTPException을 발생시킵니다. 4xx와 5xx 상태는 가능한 경우 해당하는 구체적인 예외 클래스를 사용합니다.query_parameter (list[str]) – 쿼리 매개변수로 사용할 매개변수 이름의 레거시 목록입니다.
form_parameter (list[str]) – form 본문에 사용할 매개변수 이름의 레거시 목록입니다.
form_encoding (Optional[BodyFormEncoding]) – form 매개변수에 사용할 인코딩 방식입니다.
AUTO는 파일 필드가 있으면 multipart를, 그렇지 않으면 URL 인코딩을 선택합니다.body_json_parameter (list[str]) – JSON 본문에 사용할 매개변수 이름의 레거시 목록입니다.
body_parameter (str) – 본문 전체로 사용할 매개변수 이름의 레거시 값입니다.
response_parameter (list[str]) – 응답을 전달받는 함수 매개변수 이름의 레거시 목록입니다.
**request_kwargs
경고
본문 전체를 나타내는
Body매개변수는BodyJson또는BodyForm매개변수와 함께 사용할 수 없습니다.
Response¶
- class Response¶
지원되는 HTTP 클라이언트 라이브러리를 위한 공통 응답 래퍼입니다.
일관된 인터페이스로 응답 정보를 제공하며, 원본 응답 객체도
raw로 그대로 꺼내 쓸 수 있습니다.- 매개변수:
response_obj (Any) – HTTP 클라이언트 라이브러리가 반환한 원본 응답 객체입니다.
backend (BaseBackend) –
response_obj에 대한 응답 처리 기능을 제공하는 백엔드입니다.deserializer (Optional[BaseDeserializer]) – 이 응답으로부터
model을 만드는 데 사용되는 deserializer입니다. 요청에@deserialize데코레이터가 적용되지 않은 경우 설정되지 않습니다.
- async async_close() None¶
비동기 파이프라인에서 응답을 닫습니다.
aiohttp를 포함한 일부 비동기 클라이언트는 응답의
close메소드를 동기 방식으로 제공합니다. 이 비동기 래퍼는 두 방식을 모두 받아들이므로, 호출하는 쪽에서 백엔드별로 분기 처리를 할 필요가 없습니다.
- json(json_parser: Callable[..., Any] | None = None, json_kwargs: dict[str, Any] | None = None) Any¶
응답 본문을 JSON으로 파싱합니다.
- raise_for_status() None¶
이 응답의 4xx 또는 5xx 상태에 대응하는 예외를 발생시킵니다.
두 오류 범위에서 등록되지 않은 상태 코드는 각각
HTTPClientError또는HTTPServerError를 발생시킵니다. 그 외의 상태 코드는 예외를 발생시키지 않고 그대로 반환됩니다.
- property model: ModelT | list[ModelT] | None¶
응답 본문을 모델 인스턴스로 역직렬화하여 반환합니다.
요청에 deserializer가 연결되지 않은 경우(즉,
@deserialize데코레이터가 적용되지 않은 경우)None을 반환합니다. deserializer가 연결되는 방식은 직렬화 (Serialization) 을 참고하세요.
Session¶
- class AsyncSession¶
비동기 요청을 위한 세션입니다.
지원되는 클라이언트 클래스는
aiohttp.ClientSession과httpx.AsyncClient입니다. 데코레이팅된 코루틴 메소드는 이 세션에 바인딩되어 설정된 base URL로 실행됩니다.- 매개변수:
- @single_session(base_url: str, session: type, **session_kwargs)¶
하나의 request만 사용하는 경우, 단독 세션을 정의할 수 있습니다.
- 매개변수:
Example
메소드를 데코레이팅하는 방식으로 단독 세션을 정의할 수 있습니다.
@AsyncSession.single_session("https://api.yhs.kr", aiohttp.ClientSession) @request("GET", "/bus/station") async def station_query( session: AsyncSession, name: Query | str ) -> Response: pass
- async after_request(response: Any) Any¶
백엔드가 응답을 받은 뒤, 요청 단위 훅이 실행되기 전에 실행됩니다.
이 세션의 모든 요청에서
Response를 가공하고 싶다면 이 메소드를 오버라이딩하면 됩니다.- 매개변수:
response (Any) – 백엔드가 반환한 응답입니다.
- 반환:
요청 단위의 post-hook 또는 데코레이팅된 함수로 전달되는 값입니다.
- 반환 형식:
Any
- async before_request(request: RequestCore[Any, Any], path: str) tuple[RequestCore[Any, Any], str]¶
요청 단위의 pre-hook이 실행된 뒤, 요청이 전송되기 전에 실행됩니다.
이 세션의 요청 객체나 최종 경로를 바꾸고 싶다면 이 메소드를 오버라이딩하면 됩니다.
- 매개변수:
request (RequestCore) – 이번 호출을 위해 준비된 request 디스크립터입니다.
path (str) – path 매개변수가 대입된 이후의 요청 경로입니다.
- 반환:
전송할 request 디스크립터와 경로입니다.
- 반환 형식:
- async request(method: str, path: str, **kwargs: Any) Any¶
가공되지 않은(raw) 비동기 HTTP 요청을 만듭니다.
필요한 경우
path는 base URL과 결합됩니다. keyword arguments는 내부 HTTP 클라이언트로 직접 전달됩니다.
- property backend: AsyncBackend¶
Create the asynchronous backend lazily inside the running loop.
더 보기
이 페이지는 request/component/session 핵심 API를 다룹니다. 백엔드 어댑터 클래스는 백엔드 (Backend), 재시도 설정은 재시도 (Retry), serializer/deserializer 클래스는 직렬화 (Serialization), HTTP 예외 계층 구조는 예외 (Exception) 문서에 따로 정리해 두었습니다.