설치와 첫 요청¶
목차 | 이전: HTTP client 개요 | 다음: 요청 만들기
다른 언어로 보기 — C++ · C#/.NET · Java · Kotlin · Node/TypeScript
이 장을 읽고 나면
HTTP client package를 project에 추가하고, client 하나로 typed GET 응답을 받으며, 한 번뿐인 요청에는 one-shot을 선택할 수 있다.
HTTP client는 서버 framework와 별도로 배포된다. 호출하는 process는 HTTP client package만 참조하면 된다. 아래 tutorial은 client를 만들고 profile을 한 번 읽는다.
1. package 추가¶
find_package(zlink_http_client_cpp CONFIG REQUIRED)
target_link_libraries(my_client PRIVATE zlink::http_client)
각 탭은 해당 언어의 package 참조 지점을 보여 준다. Java와 Kotlin은 tutorial의 실제 Gradle dependency를 인용하고, Node/TypeScript는 공개 npm package를 설치한다.
2. client를 만들고 첫 GET 요청 보내기¶
client는 base URL과 기본 옵션을 담는 builder를 완성해 만든다. request builder는 client에서 GET·POST 같은 method를 선택할 때 만들어진다. typed 응답 종결자는 JSON body를 지정한 type으로 해석하고 응답 봉투를 돌려준다. 비동기 종결자는 결과를 기다리는 동안 thread나 event loop를 점유하지 않는다.
// The client is shared by the sequential examples and destroyed at program exit.
auto client = hc::client_t::create ("http://127.0.0.1:5180")
.timeout (std::chrono::seconds (3))
.build ();
// The CLI awaits the asynchronous terminator before printing its response.
const auto first = co_await client.get ("/players/p1/profile").async<player_profile_t> ();
std::cout << "first request: " << first.body.player_id << " " << first.body.nickname
<< std::endl;
이 코드는 3초 기본 timeout을 가진 client를 만들고 profile GET 요청을 보낸 뒤, typed 응답 body의 player id와 nickname을 출력한다.
3. 실행 결과¶
아래 출력은 tutorial(framework/languages/cpp/tutorial)의 Server와 Client를 그 README의 「실행」 절대로 띄운 상태에서 HttpClient를 실행한 결과이며, 주소는 Client의 HTTP 표면이다.
네 언어의 실제 실행 결과는 같은 player id와 nickname을 보여 준다. C++ 결과는 #714 수정 뒤 같은 자리에 채운다.
4. 한 번뿐인 요청¶
one-shot은 builder에서 바로 request builder를 얻는다. 이 경로는 완료 뒤 client를 닫으므로 연결 pool을 재사용하지 않는다. 같은 API를 반복 호출하는 service에는 앞 절처럼 client를 보관한다.
다음 장¶
요청 만들기에서 method·path·query·header와 요청별 timeout을 정한다. 응답 받기에서 응답 형태를 고르고, client와 요청의 생애에서 재사용과 종료 규칙을 확인한다.