1.1 HttpClient ilə Tanışlıq
JDK 11-dən başlayaraq Java platformasının tərtibatçıları JDK-ya çəkici bir alət əlavə ediblər — java.net.http
paketi. O, dörd əsas sinifdən ibarətdir:
- HttpClient
- HttpRequest
- HttpResponse
- WebSocket
Bunlar, HTTP
, HTTP/2
və WebSocket
protokolları üzrə istənilən növ sorğuları həyata keçirməyə imkan verən çox güclü siniflərdir.
Bundan əlavə, bu siniflər vasitəsilə sinxron və asinxron http-sorğuları da həyata keçirilə bilər.
Http-sorğusunun icrası aşağıdakı hissələrdən ibarətdir:
HttpClient
obyektinin yaradılmasıHttpRequest
obyektinin yaradılmasısend()
və yasendAsync()
metodu ilə sorğunun göndərilməsiHttpResponse
cavabının işlənməsi
Bu cür sorğuya bir nümunə:
HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
1.2 Deklarativ Yanaşma
Yuxarıdakı nümunədə sən deklarativ kod yazma yanaşmasının bir nümunəsini görürsən. Gəlin nümunənin ilk hissəsini təhlil edək:
HttpClient client = HttpClient.newBuilder()
.version(Version.HTTP_1_1)
.followRedirects(Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(20))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
.authenticator(Authenticator.getDefault())
.build();
Bu kod klassik üslubda necə görünürdü:
HttpClient client = HttpClient.new();
client.setVersion(Version.HTTP_1_1);
client.setFollowRedirects(Redirect.NORMAL);
client.setConnectTimeout(Duration.ofSeconds(20));
client.setProxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)));
client.setAuthenticator(Authenticator.getDefault());
Deklarativ yanaşma istifadə edərkən kodda iki şey dəyişir. Birincisi, HttpClient
sinifinin metodları öz obyektlərini qaytarırlar, bu da kodu zəncir şəklində təşkil etməyə imkan verir.
Klassik kod: |
---|
|
Zəncir şəklində: |
|
Hər metodu ayrıca bir sətrə keçirdirik (bu bir uzun statementdir) |
|
İkincisi, metodlardan set
prefiksi qaldırılır, bu da kodu daha kompakt yazmağa imkan verir:
Əvvəl |
---|
|
Sonra |
|
Bu kod oxumaq daha asandır, baxmayaraq ki, yazmaq bir az çətindir.
Və daha bir vacib məqam. Bu nümunədə Builder patternindən istifadə olunub. Obyektin yaradılması kompleks proses olarsa, bu skenarilərdə onu formallaşdırmağa üstünlük verirlər: o, şərti begin()
metodunun çağırılması ilə başlayır və şərti end()
metodu ilə bitir.
Təhlil etdiyimiz nümunədə metod HttpClient.newBuilder()
HttpClient.Builder
obyektini qaytarır (bu, HttpClient
sinfinin daxili xidmət sinfidir). Belə xidmət obyektlərində hər cür version()
tipli metodlar çağırılır. Bəs metod build()
obyektin qurulmasının sonunu göstərir və HttpClient
obyektini qaytarır.
GO TO FULL VERSION