Skip to content

Commit a8bf2f5

Browse files
committed
add HttpClient powered by OkHttp
1 parent 904ba97 commit a8bf2f5

File tree

2 files changed

+116
-1
lines changed

2 files changed

+116
-1
lines changed

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ dependencies {
3636
implementation 'com.google.code.gson:gson:2.8.6'
3737
implementation 'org.json:json:20200518'
3838
// https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5
39-
compileOnly group: 'org.apache.httpcomponents.client5', name: 'httpclient5', version: '5.0.2'
39+
compileOnly group: 'org.apache.httpcomponents.client5', name: 'httpclient5', version: '5.0.3'
40+
compileOnly 'com.squareup.okhttp3:okhttp:4.9.0'
4041

4142
// Use JUnit test framework
4243
testImplementation(platform('org.junit:junit-bom:5.7.0'))
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package com.meilisearch.sdk.http;
2+
3+
import com.meilisearch.sdk.Config;
4+
import com.meilisearch.sdk.http.request.HttpRequest;
5+
import com.meilisearch.sdk.http.response.BasicHttpResponse;
6+
import com.meilisearch.sdk.http.response.HttpResponse;
7+
import okhttp3.*;
8+
9+
import java.io.IOException;
10+
import java.net.MalformedURLException;
11+
import java.net.URL;
12+
import java.util.HashMap;
13+
import java.util.List;
14+
import java.util.Map;
15+
16+
public class OkHttpHttpClient extends AbstractHttpClient {
17+
private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
18+
private static final RequestBody EMPTY_REQUEST_BODY = RequestBody.create("".getBytes());
19+
private final OkHttpClient client;
20+
21+
public OkHttpHttpClient(Config config, OkHttpClient client) {
22+
super(config);
23+
this.client = client;
24+
}
25+
26+
public OkHttpHttpClient(Config config) {
27+
super(config);
28+
this.client = new OkHttpClient();
29+
}
30+
31+
private RequestBody getBodyFromRequest(HttpRequest<?> request) {
32+
if (request.hasContent())
33+
return RequestBody.create(request.getContentAsBytes(), JSON);
34+
return EMPTY_REQUEST_BODY;
35+
}
36+
37+
private Request buildRequest(HttpRequest<?> request) throws MalformedURLException {
38+
URL url = new URL(this.config.getHostUrl() + request.getPath());
39+
Request.Builder builder = new Request.Builder();
40+
builder.url(url);
41+
if (this.config.getApiKey() != null)
42+
builder.addHeader("X-Meili-API-Key", this.config.getApiKey());
43+
switch (request.getMethod()) {
44+
case GET:
45+
builder.get();
46+
break;
47+
case POST:
48+
builder.post(getBodyFromRequest(request));
49+
break;
50+
case PUT:
51+
builder.put(getBodyFromRequest(request));
52+
break;
53+
case DELETE:
54+
if (request.hasContent())
55+
builder.delete(getBodyFromRequest(request));
56+
else
57+
builder.delete();
58+
break;
59+
default:
60+
throw new IllegalStateException("Unexpected value: " + request.getMethod());
61+
}
62+
63+
return builder.build();
64+
}
65+
66+
private HttpResponse<?> buildResponse(Response response) throws IOException {
67+
String body = null;
68+
ResponseBody responseBody = response.body();
69+
if (responseBody != null)
70+
body = responseBody.string();
71+
72+
return new BasicHttpResponse(
73+
parseHeaders(response.headers().toMultimap()),
74+
response.code(),
75+
body
76+
);
77+
}
78+
79+
private Map<String, String> parseHeaders(Map<String, List<String>> headers) {
80+
HashMap<String, String> headerMap = new HashMap<>();
81+
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
82+
headerMap.put(entry.getKey(), String.join("; ", entry.getValue()));
83+
}
84+
return headerMap;
85+
}
86+
87+
@Override
88+
public HttpResponse<?> get(HttpRequest<?> request) throws Exception {
89+
Request okRequest = buildRequest(request);
90+
Response execute = client.newCall(okRequest).execute();
91+
return buildResponse(execute);
92+
}
93+
94+
@Override
95+
public HttpResponse<?> post(HttpRequest<?> request) throws Exception {
96+
Request okRequest = buildRequest(request);
97+
Response execute = client.newCall(okRequest).execute();
98+
return buildResponse(execute);
99+
}
100+
101+
@Override
102+
public HttpResponse<?> put(HttpRequest<?> request) throws Exception {
103+
Request okRequest = buildRequest(request);
104+
Response execute = client.newCall(okRequest).execute();
105+
return buildResponse(execute);
106+
}
107+
108+
@Override
109+
public HttpResponse<?> delete(HttpRequest<?> request) throws Exception {
110+
Request okRequest = buildRequest(request);
111+
Response execute = client.newCall(okRequest).execute();
112+
return buildResponse(execute);
113+
}
114+
}

0 commit comments

Comments
 (0)