요청 및 응답 심층 분석 (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