Java 11:在Java中處理HTTP和WebSocket的新方法!

banq發表於2018-10-08
藉助Java 11,Rest API呼叫非常簡單輕鬆。在本文中,Adrian D. Finlay解釋瞭如何利用Java 11中的新非同步API來執行REST API呼叫,實現HTTP和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();
<p class="indent">


使用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");
<p class="indent">


從語義上講,新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,更自然地與現代語言功能

github

Java 11: A new way to handle HTTP & WebSocket in J

相關文章