Fwd: Http Client API for JDK 8

Jim Gish jim.gish at oracle.com
Thu May 3 12:43:21 PDT 2012


-------- Original Message --------
> Subject: 	Http Client API for JDK 8
> Date: 	Thu, 03 May 2012 11:22:00 +0100
> From: 	Michael McMahon <michael.x.mcmahon at oracle.com>
> To: 	OpenJDK Network Dev list <net-dev at openjdk.java.net>
>
>
>
> Hi,
>
> Attached is a zipped bundle of a proposed new Http client API for JDK 8.
> The Javadoc can also be inspected at the following URI
>
> http://cr.openjdk.java.net/~michaelm/httpclient/v0.2/javadoc/
>
> The documentation is still somewhat sparse, but I hope there is enough
> to understand the intent behind all of the new classes/methods.
> It is still in an early stage of definition. So, all comments are welcome.
>
> Thanks,
> Michael
>
Hi Michael,

I have little expertise in this area, so I have only a few comments on 
content, but overall it looks good.  However, here are a few things that 
I noticed.

 1. An Overview would be helpful
 2. I think I understand the why you have capitalized Upgrade when
    referring to an "HTTP Upgrade" being done.  However, it doesn't
    strike me as necessary or particularly correct.  I would just use
    "upgrade".
 3. When viewing the http javadoc via the URL above, and horizontally
    expanding and shrinking the window,  the Method and Description
    content under Method Summary/Methods does not wrap and thus gets
    truncated - forcing the user to do horizontal scrolling to see the
    content.  This is also true for some, but not all, Method
    Detail(s).  For example, in httpclient.AsynchronousHttpClient, the
    method signatures for send and setAsynchronousChannelGroup do not
    wrap, although the descriptions for those methods do.  (This may be
    a consequence of doclet behavior rather than anything you are doing
    -- I don't know).
 4. HttpCompletionHandler
     1. "The HttpCompletionHandler is the completion handler implemented
        by applications that make use of the asynchronous mode in order
        to obtain notification when the HttpResponse is ready to be
        read." -- I would strike "the completion handler", yielding "The
        HttpCompletionHandler is the completion handler implemented by
        applications that make use of the asynchronous mode in order to
        obtain notification when the HttpResponse is ready to be read.
     2. "This method is always invoked once only for every request,
        regardless of whether an actual response was received from the
        serve." -> "This method is always invoked once only for every
        request, regardless of whether an actual response was received
        from the /*server*/. " (missing "r")
 5. Similarly to above, AsynchronousUpgradeConnection -- "The
    AsynchronousUpgradeConnection represents a connection obtained as
    the successful result of an HTTP Upgrade using the client in
    asynchronous mode."  -> "An AsynchronousUpgradeConnection is 
    obtained as the successful result of an HTTP Upgrade using the
    client in asynchronous mode."
 6. HttpConnectionCache - "The client calls before every request to
    either get an existing cached or newly opened connection.  When
    finisthed with a connection it calls" would be better as "The
    methods on this interface are called by the client prior to using or
    creating a connection and also to inform the cache that a connection
    is no longer needed by the client." (The second sentence as it is
    incomplete.)
     1. I think returnToCache should be called either releaseConnection
        or clear or freeConnection.  Actually, is this method really
        needed at all?  It seems like the close() on the connection
        should take care of this.  Either that or the method should be
        on the connection itself.
     2. "Represents a cache of idle TCP connections that can be managed
        according to a user (or application) defined policy"  -> should
        be "user-defined" or "application-defined", hence "user- (or
        application-)defined"  (Yeah I know.  This is a /real /nit! :-) )
 7. AsynchronousHttpClient -- "The type of client that sends an
    asynchronous request and receives the asynchronous response at some
    undetermined time later."  -> "A client that sends a request and
    asynchronously receives a response." (unless the server is pushing
    responses before getting a request, you typically would receive the
    response /later/ than the request :-)).  Also, I don't think you are
    /sending/ the request asynchronously, are you? Aren't  you sending a
    request to which you are requiring an asynchronous /response. /You
    certainly can describe this as an asynchronous request, but it's not
    quite correct to say that the request is being made asynchronously
    (unless of course it really is).  There is similar language in the
    send() methods' descriptions.
 8. AsynchronousByteChannel - getBody() "Returns an asynchronous byte
    channel to read read the response body." -> 'Returns an asynchronous
    byte channel to read read the response body." (2 occurrences -
    method summary and method detail)
 9. DataSource - "It can also be implemented by Filter modules for the
    purpose filtering all request or response body data." -> "It can
    also be implemented by Filter modules for the purpose /*of*
    /filtering all request or response body data. Note."
10. HttpMethodBase  - "MExtesible enum interface" /MExtesible/ ?
11. HttpUpgradeHandler
     1. "This interface is implemented by the client side of an Http
        Upgrade protocol handshake..." ->  "HTTP" or "http" instead of
        "Http"  for consistency throughout the doc. (Although, given the
        usage of camel case in the interface/class/method names, maybe
        not. In any case,  all three forms are used in various places in
        the docs)  Also, as before Upgrade -> upgrade.
     2. "If so, the Http Client library will request a reference to the
        protocol specific connection object by calling the getConnection
        method." -> /protocol-specific/
     3. "The HttpResponse obtained from an HttpRequest with an
        HttpUpgradeHandler carries the active connection
        (UpgradeConnection) object object created as a result of the
        handshake (if successful)." -> "The HttpResponse obtained from
        an HttpRequest with an HttpUpgradeHandler carries the active
        connection (UpgradeConnection) object object created as a result
        of a successful handshake."
12. UpgradeConnection
     1. "Interface to represent a connection managed in the
        HttpConnection Pool and which Encapsulates a SocketChannel"  -
        no need to capitalize "encapsulates."
     2. "The channel remains private and hidden. But all channels used
        by the client must be expose this API"  -> "The channel remains
        private and hidden, but all channels used by the client must
        expose this API." ("But. The"-> "but, the" and adding missing
        period after "API").
13. BlockingHttpClient -"The type of client that sends a request,
    blocking the current thread of execution until the response is ready
    to read."  ->  "A client that ....." (less wordy)
14. ByteBufferWrapper -implRestart()  "should be overridden if this
    class needs to do something when restart called Default is to do
    nothing."  no need to capitalize "default"
15. Filter - "The new request will sent and the response to that request
    will be linked back to the original request. ie the calling code
    will see the response to the new request as the response to the
    original request." -> "The new request will */be/* sent and the
    response to that request will be linked back to the original
    request*/, i.e./* the calling code will see the response to the new
    request as the response to the original request."
16. HttpClient
     1. "Each instance is responsible for a series of connections which
        all have the same characteristics (in particular execution
        mode), some of which can be overriden for a particular request,
        for example default request timeout."  -> "Each instance is
        responsible for a series of connections.  Each connection has
        the same characteristics, and in particular, the execution mode.
        Some of the characteristics, such as the default request
        timeout, can be overridden for a particular request."
     2. "Notes on Thread Safety For the blocking client, the API will be
        threadsafe." ->  "Notes on thread safety"  (should this be
        paragraph header with  "For the blocking client, the API will be
        threadsafe." the first sentence?
17. HttpConnectionCache.CachedConnection
     1. isProxy() - "returns if this connection is to a proxy," ->
        "returns */true/* if this connection is to a proxy,"
     2. getAge() - "returns age of TCP connection in milli-seconds at
        time of object creation." -> "returns /*the*/ age of TCP
        connection in milli-seconds at time of object creation."
     3. getUseCount() - "returns number of times the connection has been
        used" -> "returns /*the */number of times the connection has
        been used"
     4. isClosed() - "returns whether the connection is closed" ->
        "returns true iff the connection is closed"
     5. close() -- as I said before, perhaps this is all that is needed
        to "return" the connection to the cache.
18. HttpRequest - setBody() - "Sets this request's request body
    statically, ie. it is provided up-front. in the given ByteBuffer[]."
    -> "Sets this request's request body statically, /*i.e.*/ it is
    provided up-front. in the given ByteBuffer[]." (extraneous period
    between "up-front" and "in the given").
19. SimpleHttpConnectionCache - "Connections are stored in a HashMap." 
    Implementation details shouldn't be in the description.
20. HttpHeaderNames, HttpMethod -- aren't this elsewhere already?

Thanks,
    Jim



-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/net-dev/attachments/20120503/92915b4b/attachment.html 


More information about the net-dev mailing list