Skip to content

Commit 9bf9dc1

Browse files
committed
Method overloading structure converted to Builder Pattern
1 parent 46f5a41 commit 9bf9dc1

File tree

2 files changed

+93
-102
lines changed

2 files changed

+93
-102
lines changed

README.md

Lines changed: 92 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,13 @@ using namespace lklibs;
7070

7171
int main() {
7272

73-
HttpRequest httpRequest;
73+
HttpRequest httpRequest("https://api.myproject.com");
7474

7575
// The simplest but slowest method if multiple calls will be made
76-
auto response = httpRequest.getRequest("https://api.myproject.com?param1=7&param2=test").get();
76+
auto response = httpRequest
77+
.setQueryString("param1=7&param2=test")
78+
.send()
79+
.get();
7780

7881
std::cout << "Succeed: " << response.succeed << std::endl;
7982
std::cout << "Http Status Code: " << response.statusCode << std::endl;
@@ -98,13 +101,17 @@ using namespace lklibs;
98101

99102
int main() {
100103

101-
HttpRequest httpRequest;
102-
103-
auto response1 = httpRequest.getRequest("https://api.myproject.com/foo").get();
104-
auto response2 = httpRequest.getRequest("https://api.myproject.com/bar").get();
105-
auto response3 = httpRequest.getRequest("https://api.myproject.com/baz").get();
106-
auto response4 = httpRequest.getRequest("https://api.myproject.com/qux").get();
107-
auto response5 = httpRequest.getRequest("https://api.myproject.com/quux").get();
104+
HttpRequest httpRequest1("https://api.myproject.com/foo");
105+
HttpRequest httpRequest2("https://api.myproject.com/bar");
106+
HttpRequest httpRequest3("https://api.myproject.com/baz");
107+
HttpRequest httpRequest4("https://api.myproject.com/qux");
108+
HttpRequest httpRequest5("https://api.myproject.com/quux");
109+
110+
auto response1 = httpRequest1.send().get();
111+
auto response2 = httpRequest2.send().get();
112+
auto response3 = httpRequest3.send().get();
113+
auto response4 = httpRequest4.send().get();
114+
auto response5 = httpRequest5.send().get();
108115

109116
// Takes 2.5 seconds in total
110117

@@ -124,13 +131,17 @@ using namespace lklibs;
124131

125132
int main() {
126133

127-
HttpRequest httpRequest;
128-
129-
auto future1 = httpRequest.getRequest("https://api.myproject.com/foo");
130-
auto future2 = httpRequest.getRequest("https://api.myproject.com/bar");
131-
auto future3 = httpRequest.getRequest("https://api.myproject.com/baz");
132-
auto future4 = httpRequest.getRequest("https://api.myproject.com/qux");
133-
auto future5 = httpRequest.getRequest("https://api.myproject.com/quux");
134+
HttpRequest httpRequest1("https://api.myproject.com/foo");
135+
HttpRequest httpRequest2("https://api.myproject.com/bar");
136+
HttpRequest httpRequest3("https://api.myproject.com/baz");
137+
HttpRequest httpRequest4("https://api.myproject.com/qux");
138+
HttpRequest httpRequest5("https://api.myproject.com/quux");
139+
140+
auto future1 = httpRequest.send();
141+
auto future2 = httpRequest.send();
142+
auto future3 = httpRequest.send();
143+
auto future4 = httpRequest.send();
144+
auto future5 = httpRequest.send();
134145

135146
auto response1 = future1.get();
136147
auto response2 = future2.get();
@@ -166,9 +177,9 @@ using namespace lklibs;
166177

167178
int main() {
168179

169-
HttpRequest httpRequest;
180+
HttpRequest httpRequest("https://www.myinvalidurl.com");
170181

171-
auto response = httpRequest.getRequest("https://www.myinvalidurl.com").get();
182+
auto response = httpRequest.send().get();
172183

173184
// Instead of throwing an exception, the succeed field of the response object is set to false
174185
std::cout << "Succeed: " << response.succeed << std::endl;
@@ -200,10 +211,13 @@ using namespace lklibs;
200211

201212
int main() {
202213

203-
HttpRequest httpRequest;
214+
HttpRequest httpRequest("https://api.myproject.com/image/7");
204215

205-
// If you need to retrieve binary data such as an image, just pass the "returnAsBinary" parameter as true
206-
auto response = httpRequest.getRequest("https://api.myproject.com/image/7", true).get();
216+
// If you need to retrieve binary data such as an image, just call the "returnAsBinary" method before send
217+
auto response = httpRequest
218+
.returnAsBinary()
219+
.send()
220+
.get();
207221

208222
std::cout << "Succeed: " << response.succeed << std::endl;
209223
std::cout << "Http Status Code: " << response.statusCode << std::endl;
@@ -229,16 +243,15 @@ using namespace lklibs;
229243

230244
int main() {
231245

232-
HttpRequest httpRequest;
233-
234-
// You can send custom headers in a string/string map
235-
auto headers = std::map<std::string, std::string>();
236-
237-
headers["Custom-Header1"] = "value1";
238-
headers["Custom-Header2"] = "value2";
239-
240-
auto response = httpRequest.getRequest("https://api.myproject.com?param1=7&param2=test", headers).get();
241-
246+
HttpRequest httpRequest("https://api.myproject.com?param1=7&param2=test");
247+
248+
// You can send custom headers as key-value pairs
249+
auto response = httpRequest
250+
.addHeader("Custom-Header1", "value1")
251+
.addHeader("Custom-Header2", "value2")
252+
.send()
253+
.get();
254+
242255
std::cout << "Succeed: " << response.succeed << std::endl;
243256

244257
return 0;
@@ -259,12 +272,14 @@ using namespace lklibs;
259272

260273
int main() {
261274

262-
HttpRequest httpRequest;
275+
HttpRequest httpRequest("https://api.myproject.com");
263276

264277
// You can send a POST request with form data in the payload
265-
std::string payload = "param1=7&param2=test";
266-
267-
auto response = httpRequest.postRequest("https://api.myproject.com", payload).get();
278+
auto response = httpRequest
279+
.setMethod(HttpMethod::POST)
280+
.setPayload("param1=7&param2=test")
281+
.send()
282+
.get();
268283

269284
std::cout << "Succeed: " << response.succeed << std::endl;
270285
std::cout << "Http Status Code: " << response.statusCode << std::endl;
@@ -288,16 +303,15 @@ using namespace lklibs;
288303

289304
int main() {
290305

291-
HttpRequest httpRequest;
292-
293-
std::string payload = R"({"param1": 7, "param2": "test"})";
294-
306+
HttpRequest httpRequest("https://api.myproject.com");
307+
295308
// You need to send the "Content-Type" as "application/json" in the HTTP Header, if you need to send json data in the payload
296-
auto headers = std::map<std::string, std::string>();
297-
298-
headers["Content-Type"] = "application/json";
299-
300-
auto response = httpRequest.postRequest("https://api.myproject.com", payload, headers).get();
309+
auto response = httpRequest
310+
.setMethod(HttpMethod::POST)
311+
.setPayload(R"({"param1": 7, "param2": "test"})")
312+
.addHeader("Content-Type", "application/json")
313+
.send()
314+
.get();
301315

302316
std::cout << "Succeed: " << response.succeed << std::endl;
303317
std::cout << "Http Status Code: " << response.statusCode << std::endl;
@@ -320,13 +334,29 @@ using namespace lklibs;
320334

321335
int main() {
322336

323-
HttpRequest httpRequest;
337+
HttpRequest httpRequest1("https://api.myproject.com");
324338

325-
std::string payload = "param1=7&param2=test";
339+
auto future1 = httpRequest
340+
.setMethod(HttpMethod::PUT)
341+
.setPayload("param1=7&param2=test")
342+
.send()
343+
.get();
344+
345+
HttpRequest httpRequest2("https://api.myproject.com");
326346

327-
auto future1 = httpRequest.putRequest("https://api.myproject.com", payload);
328-
auto future2 = httpRequest.deleteRequest("https://api.myproject.com", payload);
329-
auto future3 = httpRequest.patchRequest("https://api.myproject.com?param1=7&param2=test");
347+
auto future2 = httpRequest
348+
.setMethod(HttpMethod::DELETE_)
349+
.setPayload("param1=7&param2=test")
350+
.send()
351+
.get();
352+
353+
HttpRequest httpRequest3("https://api.myproject.com");
354+
355+
auto future3 = httpRequest
356+
.setMethod(HttpMethod::PATCH)
357+
.setQueryString("param1=7&param2=test")
358+
.send()
359+
.get();
330360

331361
auto response1 = future1.get();
332362
auto response2 = future2.get();
@@ -351,12 +381,10 @@ using namespace lklibs;
351381

352382
int main() {
353383

354-
HttpRequest httpRequest;
355-
356-
// If you need to ignore SSL errors, you can set the "ignoreSslErrors" field to true
357-
httpRequest.ignoreSslErrors = true;
384+
HttpRequest httpRequest("https://api.myinvalidssl.com");
358385

359-
auto response = httpRequest.getRequest("https://api.myinvalidssl.com").get();
386+
// If you need to ignore SSL errors, you can call "ignoreSslErrors" method before sending the request
387+
auto response = httpRequest.ignoreSslErrors().send().get();
360388

361389
return 0;
362390
}
@@ -381,58 +409,21 @@ section to the documentation.
381409

382410
## Full function list
383411

384-
You can find the complete list of functions in the library below. In fact, they are just
385-
overloaded versions of 5 functions in total.
412+
You can find the complete list of functions in the library below. Since all methods except
413+
send return the class itself, they can be added one after the other like a chain.
386414

387415
> [!TIP]
388416
> All methods and parameters descriptions are also available within the code as comment for IDEs.
389417
390418
```cpp
391-
- getRequest
392-
- std::future<HttpResult> getRequest(const std::string &url)
393-
- std::future<HttpResult> getRequest(const std::string &url, bool returnAsBinary)
394-
- std::future<HttpResult> getRequest(const std::string &url, const std::map<std::string, std::string> &headers)
395-
- std::future<HttpResult> getRequest(const std::string &url, bool returnAsBinary, const std::map<std::string, std::string> &headers)
396-
397-
398-
- postRequest
399-
- std::future<HttpResult> postRequest(const std::string &url)
400-
- std::future<HttpResult> postRequest(const std::string &url, const std::string &payload)
401-
- std::future<HttpResult> postRequest(const std::string &url, bool returnAsBinary)
402-
- std::future<HttpResult> postRequest(const std::string &url, const std::map<std::string, std::string> &headers)
403-
- std::future<HttpResult> postRequest(const std::string &url, const std::string &payload, bool returnAsBinary)
404-
- std::future<HttpResult> postRequest(const std::string &url, const std::string &payload, const std::map<std::string, std::string> &headers)
405-
- std::future<HttpResult> postRequest(const std::string &url, bool returnAsBinary, const std::map<std::string, std::string> &headers)
406-
- std::future<HttpResult> postRequest(const std::string &url, const std::string &payload, bool returnAsBinary, const std::map<std::string, std::string> &headers)
407-
408-
409-
- putRequest
410-
- std::future<HttpResult> putRequest(const std::string &url)
411-
- std::future<HttpResult> putRequest(const std::string &url, const std::string &payload)
412-
- std::future<HttpResult> putRequest(const std::string &url, bool returnAsBinary)
413-
- std::future<HttpResult> putRequest(const std::string &url, const std::map<std::string, std::string> &headers)
414-
- std::future<HttpResult> putRequest(const std::string &url, const std::string &payload, bool returnAsBinary)
415-
- std::future<HttpResult> putRequest(const std::string &url, const std::string &payload, const std::map<std::string, std::string> &headers)
416-
- std::future<HttpResult> putRequest(const std::string &url, bool returnAsBinary, const std::map<std::string, std::string> &headers)
417-
- std::future<HttpResult> putRequest(const std::string &url, const std::string &payload, bool returnAsBinary, const std::map<std::string, std::string> &headers)
418-
419-
420-
- deleteRequest
421-
- std::future<HttpResult> deleteRequest(const std::string &url)
422-
- std::future<HttpResult> deleteRequest(const std::string &url, const std::string &payload)
423-
- std::future<HttpResult> deleteRequest(const std::string &url, bool returnAsBinary)
424-
- std::future<HttpResult> deleteRequest(const std::string &url, const std::map<std::string, std::string> &headers)
425-
- std::future<HttpResult> deleteRequest(const std::string &url, const std::string &payload, bool returnAsBinary)
426-
- std::future<HttpResult> deleteRequest(const std::string &url, const std::string &payload, const std::map<std::string, std::string> &headers)
427-
- std::future<HttpResult> deleteRequest(const std::string &url, bool returnAsBinary, const std::map<std::string, std::string> &headers)
428-
- std::future<HttpResult> deleteRequest(const std::string &url, const std::string &payload, bool returnAsBinary, const std::map<std::string, std::string> &headers)
429-
430-
431-
- patchRequest
432-
- std::future<HttpResult> patchRequest(const std::string &url)
433-
- std::future<HttpResult> patchRequest(const std::string &url, bool returnAsBinary)
434-
- std::future<HttpResult> patchRequest(const std::string &url, const std::map<std::string, std::string> &headers)
435-
- std::future<HttpResult> patchRequest(const std::string &url, bool returnAsBinary, const std::map<std::string, std::string> &headers)
419+
- HttpRequest &setMethod(const HttpMethod &method)
420+
- HttpRequest &setQueryString(const std::string &queryString)
421+
- HttpRequest &setPayload(const std::string &payload)
422+
- HttpRequest &returnAsBinary()
423+
- HttpRequest &ignoreSslErrors()
424+
- HttpRequest &addHeader(const std::string &key, const std::string &value)
425+
- std::future<HttpResult> send() noexcept
426+
436427
```
437428
438429

examples/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void receiveBinaryData() {
5151

5252
HttpRequest httpRequest("https://httpbun.com/bytes/100");
5353

54-
// If you need to retrieve binary data such as an image, just call the "returnAsBinary" method
54+
// If you need to retrieve binary data such as an image, just call the "returnAsBinary" method before send
5555
auto response = httpRequest
5656
.returnAsBinary()
5757
.send()

0 commit comments

Comments
 (0)