class DemoApiClient : public oatpp::web::client::ApiClient {
#include OATPP_CODEGEN_BEGIN(ApiClient)
API_CLIENT_INIT(DemoApiClient)
public:
std::shared_ptr<Response> Execute(
const oatpp::String& Method,
const oatpp::String& Path,
const std::map<oatpp::String, oatpp::String>& Headers,
const oatpp::String& Body
)
{
oatpp::web::client::ApiClient::Headers headers;
for (auto& head : Headers)
{
headers.put(head.first, head.second);
}
std::shared_ptr<oatpp::web::protocol::http::outgoing::Body> body;
body = oatpp::web::protocol::http::outgoing::BufferBody::createShared(
m_objectMapper->writeToString(Body),
m_objectMapper->getInfo().http_content_type
);
return m_requestExecutor->execute(Method, Path, headers, body, nullptr);
}
#include OATPP_CODEGEN_END(ApiClient)
};
通过实现的Execute接口,支持通用格式的Http请求接口。
/* Create ObjectMapper for serialization of DTOs */
auto objectMapper = oatpp::parser::json::mapping::ObjectMapper::createShared();
/* Create RequestExecutor which will execute ApiClient's requests */
auto requestExecutor = createOatppExecutor(); // <-- Always use oatpp native executor where's possible.
//auto requestExecutor = createCurlExecutor(); // <-- Curl request executor
/* DemoApiClient uses DemoRequestExecutor and json::mapping::ObjectMapper */
/* ObjectMapper passed here is used for serialization of outgoing DTOs */
auto client = DemoApiClient::createShared(requestExecutor, objectMapper);
client->Execute("GET", "/test/api", {}, {});