Java 11:在Java中處理HTTP和WebSocket的新方法!
藉助Java 11,Rest API呼叫非常簡單輕鬆。在本文中,Adrian D. Finlay解釋瞭如何利用Java 11中的新非同步API來執行REST API呼叫,實現HTTP和Socket/">WebSocket操作。
曾幾何時,使用Java SE(標準版)API執行常見的HTTP操作(如REST API呼叫)可能被描述為不自然且繁瑣。Java 11正式改變了這一點。
從Java 11開始,API現在完全非同步。本文將嘗試通過執行REST API呼叫向您展示新API的基本用法,我們將使用openJDK 11。
新API使用java.util.concurrent.CompleteableFuture提供的非同步,非阻塞的請求/響應行為;新API為HTTP 1.1 / 2,WebSocket提供本機支援。
新API提供核心功能的核心類和介面包括:
HttpClient類, java.net.http.HttpClient
HttpRequest類, java.net.http.HttpRequest
HttpResponse介面, java.net.http.HttpResponse
WebSocket介面,java.net.http.WebSocket
在Java 11之前呼叫http:
var HTTP_CLIENT= (HttpURLConnection)
URI.create(
new StringBuilder(API_ENDPOINT)
.append("firstName=").append(args[0])
.append("&surname=").append(args[1])
.append("&season=").append(args[2])
.toString())
.toURL()
.openConnection();
HTTP_CLIENT.setRequestMethod("GET");
var HTTP_RESPONSE = HTTP_CLIENT.getInputStream();
使用Java 11呼叫http:
var HTTP_REQUEST = HttpRequest.newBuilder()
.uri(URI.create( //Set the appropriate endpoint
new StringBuilder(API_ENDPOINT)
.append("firstName=").append(args[0])
.append("&surname=").append(args[1])
.append("&season=").append(args[2])
.toString() ) )
.timeout(Duration.ofMinutes(1))
.header("Content-Type", "application/json")
.build();
var HTTP_RESPONSE = HTTP_CLIENT.send(HTTP_REQUEST, asString);
var statusCode = HTTP_RESPONSE.statusCode();
if (statusCode == 200 || statusCode == 201)
System.out.println("Success! -- Java 11 REST API Call\n" +
args[1] + ", " + args[0] + " [" + args[3] +"]\n" + HTTP_RESPONSE.body());
else
System.out.println("Failure! -- Java 11 REST API Call");
從語義上講,新API是2018年Java API所需的一切。首先,它是詳細的。其次,它是模組化的。第三,它遵循新的OOP方式連結(或使用構建器)來構造物件。第四,它和HTTP更自然。
API感覺更加原生於HTTP。命名方法名稱(如body()和headers())比getContent()和getHeaderField(),getHeaderKey()更適合。舊的API是抽象的,並且與通用網路相關,而不針對HTTP。
優於HttpURLConnection的優點:
1.改進了對HTTP,HTTP / 2的支援
2.原生HTTP感覺,HTTP是一流的公民
3.非同步,非阻塞實現
4.新的API,更自然地與現代語言功能