Tek Bir Metod İle HTTP istekleri — part 2
Daha önceki yazımızda tek metod ile HTTP işlemlerimizi gerçekleştirmiştik.Bu kez biraz daha farklı bir şey deneyelim. Uygulamamızın birden…
Tek Bir Metod İle HTTP istekleri — part 2
Daha önceki yazımızda tek metod ile HTTP işlemlerimizi gerçekleştirmiştik.Bu kez biraz daha farklı bir şey deneyelim. Uygulamamızın birden fazla HTTP kütüphanesine ihtiyaç duyduğunu varsayalım. Yani OkHttp’ye kardeş gelsin. OkHttp dışında Apache Http de çok yaygın bir kütüphane olduğundan bahsetmiştik.
İlk önce iki kardeş kütüphanenin miras alacağı ebeveyn sınıfını oluşturalım
@SuperBuilder
public abstract class BaseRequest {
@NonNull
public String url;
@NonNull
public String method;
@Builder.Default
public String body = null;
@Builder.Default
public Map<String, String> headers = null;
public abstract String doRequest();
}
Bir şey dikkatinizi çekti mi? @SuperBuilder da nerden çıktı diyebilirsiniz. Lombok’un Builder anotasyonunda işin içerisine inheritance girince durumlar karışıyor. Burada BaseRequest sınıfımız abstract class olduğu için @Builder olduğu gibi kullanamayız. Karşımıza 2 çözüm çıkıyor; constructer seviyesinde builder veya @SuperBuilder. SuperBuilder experimental bir anotasyon olduğundan dikkatli olmalısınız. Bu özellik 1.18 versiyonuyla geldi ve deneme aşamasında. O zaman yolumuza devam edelim.
@SuperBuilder
public class OkHttpRequest extends BaseRequest {
public Map<String, String> params;
@Override
public String doRequest() {
OkHttpClient client = new OkHttpClient.Builder().build();
//.connectTimeout(1, TimeUnit.MINUTES).readTimeout(30, TimeUnit.SECONDS).writeTimeout(15, TimeUnit.SECONDS)
HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();
if (params != null) {
for (Map.Entry<String, String> param : params.entrySet()) {
httpBuilder.addQueryParameter(param.getKey(), param.getValue());
}
}
Request.Builder requestBuilder = new Request.Builder().url(httpBuilder.build());
if (method.equalsIgnoreCase("get")) {
requestBuilder.get();
} else if (method.equalsIgnoreCase("post")) {
requestBuilder.post(RequestBody.create(MediaType.parse("application/json"), body));
}
if (headers != null) {
for (Map.Entry<String, String> header : headers.entrySet()) {
requestBuilder.addHeader(header.getKey(), header.getValue());
}
}
try {
Response response = client.newCall(requestBuilder.build()).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
return "HTTPS isteginde bir hata gerceklesti";
}
}
}
OkHttp içerisinde bazı değişiklikler oldu
@SuperBuilder
public class ApacheHttpRequest extends BaseRequest {
List<NameValuePair> params;
@Override
public String doRequest() {
if (method.equalsIgnoreCase("get")) {
return doGetRequest();
} else if (method.equalsIgnoreCase("post")) {
return doPostRequest();
}
return null;
}
private String doGetRequest(){
HttpGet httpGet = new HttpGet(url);
try {
URI uri = new URIBuilder(httpGet.getUri()).addParameters(params).build();
httpGet.setUri(uri);
return execute(httpGet);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
private String doPostRequest(){
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new StringEntity(body, ContentType.APPLICATION_JSON));
return execute(httpPost);
}
private String execute(HttpUriRequestBase http) {
String result = null;
if (headers != null) {
for (Map.Entry<String, String> header : headers.entrySet()) {
http.addHeader(header.getKey(), header.getValue());
}
}
try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
try (CloseableHttpResponse response = httpclient.execute(http)) {
result = EntityUtils.toString(response.getEntity());
}
} catch (IOException | ParseException e) {
e.printStackTrace();
}
return result;
}
}
Params özelliklerini Ebeveyn sınıfından almadım. Bunun sebebi fark ettiğiniz üzere farklı bir veri tipi kullanmamız.
Classlarımız hazır peki bu sınıfları nasıl kullanacağız?
ApacheHttpRequest.builder().url(url).method("get").build().doRequest();
Aynı isteği bir de OkHttp ile çağıralım
OkHttpRequest.builder().url(url).method("get").build().doRequest();
Umarım faydalı olmuştur.
Tavsiyelerinizi yorumlarda yazarsanız sevinirim, iyi çalışmalar
메타데이터
- post_id
- 8e1ae376d02e
- slug
- tek-bir-metod-i̇le-http-istekleri-part-2-8e1ae376d02e
- url
- https://medium.com/@hbaduk/tek-bir-metod-i%CC%87le-http-istekleri-part-2-8e1ae376d02e
- canonical_url
- https://medium.com/@hbaduk/tek-bir-metod-i%CC%87le-http-istekleri-part-2-8e1ae376d02e
- author_url
- https://medium.com/@hbaduk
- status
- ok
- fetched_at
- 2026-07-21 08:50:42