Octane API Client
Loading...
Searching...
No Matches
http_client.h
Go to the documentation of this file.
1
11#ifndef OCTANE_API_CLIENT_INTERNAL_HTTP_CLIENT_H_
12#define OCTANE_API_CLIENT_INTERNAL_HTTP_CLIENT_H_
13
14#include <gtest/gtest_prod.h>
15
16#include <map>
17#include <string>
18#include <vector>
19
20#include "../error_response.h"
21#include "../result.h"
22
23namespace octane::internal {
28 enum struct HttpMethod {
30 Get,
32 Post,
34 Put,
36 Delete,
37 };
42 enum struct HttpVersion {
44 Http1_0,
46 Http1_1,
48 Http2,
50 Http3,
51 };
56 struct HttpRequest {
62 std::string uri;
64 std::map<std::string, std::string> headerField;
66 std::vector<std::uint8_t> body;
67 };
68 bool operator==(const HttpRequest& a, const HttpRequest& b);
69 std::ostream& operator<<(std::ostream& stream, const HttpRequest& request);
70
75 struct HttpResponse {
94 std::string statusLine;
104 std::map<std::string, std::string> headerField;
109 std::vector<std::uint8_t> body;
110 };
111 bool operator==(const HttpResponse& a, const HttpResponse& b);
112 std::ostream& operator<<(std::ostream& stream, const HttpResponse& response);
113
121 public:
122 virtual ~HttpClientBase() noexcept = 0;
123
136 virtual Result<_, ErrorResponse> init() noexcept = 0;
137
151 request(std::string_view origin, const HttpRequest& request) = 0;
152 };
157 class HttpClient : public HttpClientBase {
158 FRIEND_TEST(HttpClientTest, WriteCallback);
159 FRIEND_TEST(HttpClientTest, ReadCallback);
160 FRIEND_TEST(HttpClientTest, HeaderCallback);
161 FRIEND_TEST(HttpClientTest, MakeHttpResponseOk);
162 FRIEND_TEST(HttpClientTest, MakeHttpResponseErr);
163
164 public:
165 virtual ~HttpClient() noexcept;
166
170 virtual Result<_, ErrorResponse> init() noexcept override;
175 std::string_view origin,
176 const HttpRequest& request) override;
177
178 private:
190 static size_t writeCallback(char* buffer,
191 size_t size,
192 size_t nmemb,
193 std::vector<std::uint8_t>* chunk);
194
206 static size_t readCallback(
207 char* buffer,
208 size_t size,
209 size_t nmemb,
210 std::pair<const std::vector<std::uint8_t>*, size_t>* stream);
211
224 static size_t headerCallback(
225 char* buffer,
226 size_t size,
227 size_t nmemb,
228 std::pair<std::string, std::map<std::string, std::string>>*
229 responseHeader);
239 std::pair<std::string, std::map<std::string, std::string>>&&
240 responseHeader,
241 std::vector<std::uint8_t>&& chunk);
242 };
243} // namespace octane::internal
244
245#endif // OCTANE_API_CLIENT_HTTP_CLIENT_H_
Wrapper class that bifurcates the values indicated by normal and quasi-normal states.
Definition: result.h:38
HTTP通信を行うインタフェース。
Definition: http_client.h:120
virtual Result< HttpResponse, ErrorResponse > request(std::string_view origin, const HttpRequest &request)=0
HTTPリクエストを発行する。
virtual ~HttpClientBase() noexcept=0
Definition: http_client.cpp:25
virtual Result< _, ErrorResponse > init() noexcept=0
HttpClientを初期化する。
HTTP通信を行う。
Definition: http_client.h:157
Definition: api_bridge.cpp:25
HttpMethod
HTTPメソッドを表す列挙体。
Definition: http_client.h:28
@ Post
POSTメソッドを表す。
@ Get
GETメソッドを表す。
@ Put
PUTメソッドを表す。
@ Delete
DELETEメソッドを表す。
std::ostream & operator<<(std::ostream &stream, const HttpRequest &request)
Definition: http_client.cpp:200
bool operator==(const HttpRequest &a, const HttpRequest &b)
Definition: http_client.cpp:184
HttpVersion
HTTPバージョンを表す。
Definition: http_client.h:42
@ Http3
HTTP/3を表す。
@ Http1_1
HTTP/1.1を表す。
@ Http1_0
HTTP/1.0を表す。
@ Http2
HTTP/2を表す。
General stucture to represent the error.
Definition: error_response.h:24
HTTPのリクエストを表す構造体。
Definition: http_client.h:56
HttpVersion version
リクエストに使用するHTTPバージョン。
Definition: http_client.h:60
std::map< std::string, std::string > headerField
リクエストに使用するHTTPヘッダフィールド。
Definition: http_client.h:64
std::string uri
リクエスト先のURI。
Definition: http_client.h:62
HttpMethod method
リクエストに使用するHTTPメソッド。
Definition: http_client.h:58
std::vector< std::uint8_t > body
リクエストのボディ部。
Definition: http_client.h:66
HTTPのレスポンスを表す構造体。
Definition: http_client.h:75
int statusCode
レスポンスのHTTPステータスコードを表す。
Definition: http_client.h:88
std::vector< std::uint8_t > body
レスポンスのボディ部。
Definition: http_client.h:109
HttpVersion version
レスポンスのHTTPのバージョン。
Definition: http_client.h:99
std::string statusLine
レスポンスのHTTPステータスライン。"HTTP/2 200 OK", "HTTP/2 400 Bad Request"など。
Definition: http_client.h:94
std::map< std::string, std::string > headerField
レスポンスのヘッダフィールド。
Definition: http_client.h:104