← Back to list

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…

Huseyin Baduk · 2025-01-11 23:22 · 1 claps · 1.6 min read
#okhttp #http-request #builder-pattern #java #superbuilder
Open on Medium ↗
Wiki topics: 🐾 · Pets & Animals

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