HTTP client API
Michael McMahon
michael.x.mcmahon at oracle.com
Wed Sep 7 17:15:51 UTC 2016
Hi Wenbo,
First, sorry for the delay in replying. We took your comments and
prototyped how the major ones
might be accommodated. In particular, we did the following:
- moved "business logic" out of HttpRequest. The methods for sending
requests now
exist in HttpClient. Given that requests are no longer associated
with a client and can
be sent through any client, this means that some properties of a
request that used
to be inherited from the client can no longer be visible in the
HttpRequest object,
but that is not a problem as far as I can see. This changes the look
of the sample code
in HttpRequest, but doesn't make it any harder to read.
- changed some method names as suggested eg newBuilder()
- added protected constructors to the public classes. This allows
alternative implementations
for use in mocking/test frameworks etc.
- changed the PUT, POST, GET methods in the request builder to only set
the method type.
PUT, POST takes the request body processor as parameter. A new
build() method returns
the HttpRequest.
- added a method to HttpResponse which returns the "final" request that
was sent on the wire
for the particular response, which might be different from the user
initiated request.
I put an updated apidoc [1] and specdiff [2] up to show the changes. In
particular, the sample
code described in the HttpClient docs is updated to reflect the changes.
Thanks,
Michael
[1] http://cr.openjdk.java.net/~michaelm/httpclient/api.1/
[2]
http://cr.openjdk.java.net/~michaelm/httpclient/specdiffout.1/package-summary.html
On 26/08/2016, 07:59, Wenbo Zhu wrote:
> Hi Michael,
>
> Thanks for the update! The adoption of the Flow API is indeed a big
> improvement (async flow-control is very hard to get right).
>
> Attached is a feedback doc on this new version. One specific idea to
> discuss is whether it's possible to release the new HTTP client API as
> a standalone library (that works on JDK 9).
>
> Thanks,
> Wenbo
>
>
>
> On Mon, Aug 22, 2016 at 12:56 AM, Michael McMahon
> <michael.x.mcmahon at oracle.com <mailto:michael.x.mcmahon at oracle.com>>
> wrote:
>
> There is an updated version of the HTTP client API doc [1] and a
> specdiff [2] showing the changes
> proposed from the current version in JDK9 dev.
>
> The main changes are:
>
> 1) The request and response processors are now based on
> Flow.Publisher and Flow.Subscriber
>
> 2) Response bodies are retrieved synchronously with the response
> headers as part of the
> HttpRequest.response() and responseAsync() methods
>
> 3) Because of the change above, to allow code to examine the
> headers and decide what to do
> with the body before retrieving it, there is a new entity
> called a HttpResponse.BodyHandler
> which is given the status code and headers, and which returns
> a HttpResponse.BodyProcessor.
> Static implementations of both body handlers and body
> processors are provided, to make the
> simple cases easy to code.
>
> We are currently working in the sandbox repository again and will
> have these changes
> in the main JDK9 dev forest soon.
>
> Thanks,
>
> Michael
>
> [1] http://cr.openjdk.java.net/~michaelm/httpclient/api/
> <http://cr.openjdk.java.net/%7Emichaelm/httpclient/api/>
>
> [2]
> http://cr.openjdk.java.net/~michaelm/httpclient/specdiffout/package-summary.html
> <http://cr.openjdk.java.net/%7Emichaelm/httpclient/specdiffout/package-summary.html>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/net-dev/attachments/20160907/4ac1fcd7/attachment.html>
More information about the net-dev
mailing list