요청 및 응답 심층 분석 (REQUEST AND RESPONSE DEEP DIVE)
모든 HTTP 서버는 특정 사이클을 따릅니다. 연결을 수락하고, 요청을 파싱하며, 라우트를 매칭하고, 응답을 보냅니다.
Hyperlane은 이 과정을 쉽게 만들어 줍니다. 직접적인 메서드 호출이나 간단한 속성 매크로(attribute macros)를 사용하여 이 사이클을 관리할 수 있습니다.
Hyperlane의 요청 라이프사이클 처리 방식:
- 서버가 TCP 연결을 수락합니다.
- 스트림을 Request 객체로 파싱합니다.
- 요청 미들웨어가 데이터를 처리합니다.
- 서버가 요청을 라우트에 매칭합니다.
- 라우트 핸들러가 실행됩니다.
- 응답 미들웨어가 실행됩니다.
- 응답이 클라이언트로 전달됩니다.
요청 데이터 액세스:
Context 객체를 사용하여 요청에서 데이터를 가져올 수 있습니다.
• HTTP 메서드를 위한 get_method()
• URL 경로를 위한 get_path()
• 모든 헤더를 위한 get_headers()
• JSON 바디를 파싱하기 위한 get_body_json()
• 특정 파라미터를 찾기 위한 try_get_query()
Hyperlane은 또한 데이터 추출을 자동화하기 위해 속성 매크로를 사용합니다. 수동으로 코드를 작성하는 대신 다음과 같은 태그를 사용할 수 있습니다:
#[request_body_json]: JSON을 즉시 파싱합니다.#[request_query]: URL 파라미터를 가져옵니다.#[request_header]: 특정 헤더를 가져옵니다.
라우트 관리 및 필터링:
{param} 구문을 사용하여 동적 라우트를 정의할 수 있습니다. 예: "/test/{text}".
Hyperlane은 라우트 수준에서 요청을 필터링할 수도 있습니다. 다음과 같은 작업이 가능합니다:
#[host]를 사용하여 특정 호스트를 매칭합니다.#[reject_referer]를 사용하여 특정 리퍼러(referer)를 거부합니다.#[filter]를 사용하여 커스텀 로직을 적용합니다.
응답 및 쿠키 관리: Context 객체를 통해 응답을 제어합니다. 상태 코드, 헤더, 바디를 수동으로 설정할 수 있습니다. 이를 간소화하려면 응답 매크로를 사용하세요:
#[response_status_code(200)]#[response_body("Hello World")]
세션 관리를 위해 CookieBuilder를 사용하세요. 깔끔한 구문으로 만료 날짜, 도메인, 그리고 HttpOnly 또는 Secure와 같은 보안 플래그를 설정할 수 있습니다.
응답이 준비되면 build() 및 try_send()와 같은 메서드를 사용하여 스트림을 통해 전송합니다.
Hyperlane은 두 가지 작업 방식을 제공합니다. 명시적인 제어가 필요한 경우 메서드 호출을 사용하세요. 깔끔하고 빠른 코드를 원하는 경우 속성 매크로를 사용하세요.
Project Code: https://github.com/hyperlane-dev/hyperlane
Source: https://dev.to/tengxgfyrz67s/request-and-response-deep-dive-1j1b