1.1 บทนำสู่ HttpClient
เริ่มต้นด้วย JDK 11 นักพัฒนาของแพลตฟอร์ม Java ได้เพิ่มเครื่องมือใหม่ที่มีประสิทธิภาพให้กับ JDK สำหรับการสร้างคำขอ http ซึ่งเป็นไฟล์java.net.http
. ประกอบด้วยสี่คลาสหลัก:
- Httpไคลเอนต์
- HttpRequest
- HttpResponse
- ซ็อกเก็ตเว็บ
คลาสเหล่านี้เป็นคลาส ที่ทรงพลังมากซึ่งช่วยให้คุณสามารถดำเนินการตามคำขอได้ทุกประเภทโดยใช้HTTP
, HTTP/2
และWebSocket
นอกจากนี้ คุณสามารถใช้คลาสเหล่านี้เพื่อสร้างคำขอ http ทั้งแบบซิงโครนัสและแบบอะซิงโครนัส
การร้องขอ http ประกอบด้วยส่วนต่อไปนี้:
- สร้างวัตถุ
HttpClient
- สร้างวัตถุ
HttpRequest
- การส่งคำขอโดยใช้
send()
หรือ เมธอดsendAsync()
- การประมวลผลการตอบสนอง
HttpResponse
ตัวอย่างคำขอดังกล่าว:
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 วิธีการประกาศ
ในตัวอย่างด้านบน คุณจะเห็นตัวอย่างวิธีการเขียนโค้ดที่เรียกว่าการประกาศ มาดูตัวอย่างส่วนแรกกัน:
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();
โค้ดนี้จะมีลักษณะอย่างไรเมื่อเขียนในรูปแบบคลาสสิก:
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());
เมื่อใช้วิธีการประกาศในรหัส มีสองสิ่งที่เปลี่ยนแปลง ประการ แรกเมธอดของคลาสทั้งหมดHttpClient
จะส่งคืนอ็อบเจกต์ของตัวเองซึ่งช่วยให้คุณสามารถจัดระเบียบโค้ดในรูปแบบของเชนได้
รหัสคลาสสิก: |
---|
|
เป็นห่วงโซ่: |
|
เราโอนแต่ละวิธีไปยังบรรทัดแยกต่างหาก (นี่คือคำสั่งเดียวแบบยาว) |
|
ประการที่สองคำนำหน้าจะถูกลบออกจากวิธีการset
ซึ่งช่วยให้คุณเขียนโค้ดได้กระชับยิ่งขึ้น:
เคยเป็น |
---|
|
มันกลายเป็น |
|
โค้ดดังกล่าวอ่านง่ายกว่าแม้ว่าจะเขียนยากกว่าก็ตาม
และอีกหนึ่งจุดสำคัญ ในตัวอย่างนี้ ใช้รูปแบบตัวสร้าง มีสถานการณ์ที่การสร้างวัตถุเป็นกระบวนการที่ซับซ้อน ดังนั้นพวกเขาจึงต้องการทำให้มันเป็นทางการ: มันเริ่มต้นด้วยการเรียกเมธอดแบบมีเงื่อนไขและbegin()
จบลงด้วยการเรียกเมธอดแบบมีเงื่อนไขend()
ในตัวอย่างที่เราวิเคราะห์ วิธีHttpClient.newBuilder()
การส่งคืนวัตถุHttpClient.Builder
(นี่คือคลาสยูทิลิตี้ภายในของคลาสHttpClient
) เมธอดทุกประเภทversion()
ถูกเรียกใช้บนออบเจกต์บริการนี้เท่านั้น การเรียกใช้เมธอดbuild()
เป็นการสิ้นสุดการสร้างวัตถุและส่งคืนHttpClient
วัตถุ