Date: 2005-01-10T01:33:04
Editor: OlegKalnichevski
Wiki: Jakarta-HttpClient Wiki
Page: HttpClientApiRedesign
URL: http://wiki.apache.org/jakarta-httpclient/HttpClientApiRedesign
no comment
New Page:
##language:en
= GOALS =
* Transform HttpClient from a client-side monolithic library into a toolset of
loosely coupled components.
* Provide a more modular structure enabling the users to assemble custom
client- and server-side HTTP services
* Resolve the deficiencies of the 3.0 API
= COMPONENT STRUCTURE =
This is a purely logical distinction. The below listed components may be
distributed separately or as a part of a larger package (jar).
== http-common ==
depends on
* Java 1.4 (shall we consider 1.5? vote?)
* commons-logging (really needed? if feasible I'd rather do without this
dependency)
provides
* Http header primitives as defined in RFC 822
a. {{{ HttpHeader }}} class
a. {{{ HttpHeaderElement }}} class
a. {{{ HttpHeaderGroup }}} class
* Http request line and Http status line primitives as defined in RFC 2616
a. {{{ HttpVersion }}} class
a. {{{ HttpStatus }}} class
a. {{{ HttpRequestLine }}} class
a. {{{ HttpSatusLine }}} class
* Http parameter primitives (see preference architecture in 3.0 API)
a. {{{ HttpParams }}} interface
a. {{{ DefaultHttpParams }}} class implementing {{{ HttpParams }}} interface
* Http request and Http response interfaces as defined in RFC 2616 and their
generic implementation
a. {{{ HttpRequest }}} interface
a. {{{ HttpResponse }}} interface
a. {{{ HttpEntityEnclosingRequest }}} interface
a. {{{ HttpRequestParams }}} class
a. {{{ BasicHttpRequest }}} class implementing {{{ HttpRequest }}}
a. {{{ BasicHttpResponse }}} class implementing {{{ HttpResponse }}}
a. {{{ BasicHttpEntityEnclosingRequest }}} class implementing {{{
HttpEntityEnclosingRequest }}}
* Http parser interface and the RFC 2616 compliant implementation of it. The
parser must only be able to parse well formed Http requests and responses.
a. {{{ HttpParser }}} interface
a. {{{ NIOHttpParser }}} class based on NIO (makes use of {{{ SocketChannel
}}} and {{{ CharBuffer }}} )
* Http connection interface including a simple dependency mechanism to inject
an Http parser implementation, and a generic implementation of Http connection
a. {{{ HttpConnection }}} interface
a. {{{ HttpConnectionParams }}} class
a. {{{ NIOHttpConnection }}} class based on NIO (makes use of {{{
SocketChannel }}} )
* Input / output chunking streams
a. {{{ ChunkedInputStream }}} class
a. {{{ ChunkedOutputStream }}} class
* Http filter interface allowing for request pre-processing and response
post-processing without having to subclass a given {{{ HttpRequest }}} or {{{
HttpResponse }}} implementing classes
a. {{{ HttpFilter }}} interface
* Http method executor capable of executing http requests and receiving Http
responses. This class also is capable of retrying failed requests and provides
a means of injecting a number of Http filters. This class DOES NOT provide
connection pooling/management facilities, and DOES NOT handle redirects and
authentication challenges.
a. {{{ HttpMethodExecutor }}} class
a. {{{ HttpRequestRetryHandler }}} interface
a. {{{ DefaultHttpRequestRetryHandler }}} class implementing {{{
HttpRequestRetryHandler }}} interface
== http-cookie ==
depends on
* Java 1.4
* commons-logging (really needed? if feasible I'd rather do without this
dependency)
* http-common (really needed? if feasible I'd rather do without this
dependency)
provides
* Http cookie interface as defined in RFC2965 and RFC2109 and compatible with
Netscape cookie draft and servlet specification. Generic Http cookie
implementation.
a. {{{ HttpCookie }}} interface
a. {{{ Cookie class }}} (client side cookie)
a. {{{ SetCookie }}} class (Server side cookie)
* Http cookie specification interface that defines the contract for cookie
parsing, validation, formatting and matching.
a. {{{ HttpCookieSpec }}} interface
a. {{{ CompatibilityCookieSpec }}} class
a. {{{ RFC2965CookieSpec }}} class as defined in RFC 2965
a. {{{ RFC2109CookieSpec }}} class as defined in RFC 2109
a. {{{ NetscapeCookieSpec }}} class as defined in the Netscape cookie draft
== http-auth ==
depends on
* Java 1.4
* commons-logging (*) (if feasible I'd rather do without this dependency)
* commons-codec
* http-common
provides
* Http credentials primitives
a. {{{ Credentials }}} interface
a. {{{ BasicCredentials }}} class implementing {{{ Credentials }}} interface
a. {{{ WindowsCredentials }}} class implementing {{{ Credentials }}}
interface
* Http authentication primitives. Authentication schemes should be able to be
produce and respond to authentication challenges (both client and server side)
a. {{{ AuthScheme }}} interface
a. {{{ BasicScheme }}} class implementing {{{ AuthScheme }}}
a. {{{ DigestScheme }}} class implementing {{{ AuthScheme }}}
a. {{{ NTLMScheme }}} class implementing {{{ AuthScheme }}}
a. {{{ AuthChallengeParser }}} class
== http-client ==
depends on
* Java 1.4
* commons-logging (shall we consider logging UGLI instead? vote?)
* commons-codec
* commons-pool (really needed? vote?)
* http-common
* http-cookie
* http-auth
provides
* Http connection manager / connection pool interface and most common
implementations of it.
a. {{{ HttpConnectionManagerParams }}} class
a. {{{ HttpConnectionManager }}} interface
a. {{{ SimpleConnectionManager }}} class implementing {{{
HttpConnectionManager }}} interface
a. {{{ PoolingConnectionManager }}} class implementing {{{
HttpConnectionManager }}} interface
* Http state primitives. Http state stores Http session data: credentials,
cookies.
a. {{{ HttpState }}} interface
a. {{{ CredentialsProvider }}} interface
a. {{{ InMemoryHttpState }}} class implementing {{{ HttpState }}} interface
* Http agent primitives
a. {{{ HttpClientParams }}} class
a. {{{ AuthChallengeHandler }}} interface
a. {{{ StdAuthChallengeHandler }}} class implementing {{{
AuthChallengeHandler }}} interface
a. {{{ RedirectHandler }}} interface
a. {{{ StdRedirectHandler }}} class implementing {{{ RedirectHandler }}}
interface
a. {{{ StdAuthChallengeHandler }}} class implementing {{{
AuthChallengeHandler }}} interface
a. {{{ HttpHost }}} class
a. {{{ HttpProxyHost }}} class
a. {{{ HttpHostParams }}} class
a. {{{ HostConfig }}} class
a. {{{ HttpClient }}} class. Supports a simple dependency injection
mechanism to inject {{{ HttpConnectionManager }}}, {{{ AuthChallengeHandler
}}}, {{{ RedirectHandler }}}, {{{ HttpFilter }}} and possibly other
dependencies.
== http-client-3-compat ==
depends on
* Java 1.4
* commons-logging
* commons-codec
* http-common
* http-cookie
* http-auth
* http-client
Provided there are any volunteers to maintain it.
== http-spider ==
A web crawler of a sort. Provided there is a healthy community around it.
depends on
* Java 1.4
* commons-logging
* commons-codec
* http-common
* http-cookie
* http-auth
* http-client
ideas?
== http-proxy ==
A simple reverse proxy of a sort. Provided there is a healthy community around
it.
depends on
* Java 1.4
* commons-logging
* commons-codec
* http-common
* http-cookie
* http-auth
* geronimo-network (appropriate? better options? shall we implement our own
network protocol stack? vote?)
ideas?
== http-server ==
A simple embeddable HTTP server of a sort. Provided there is a healthy
community around it.
depends on
* Java 1.4
* commons-logging
* commons-codec
* http-common
* http-cookie
* http-auth
* geronimo-network (appropriate? better options? shall we implement our own
network protocol stack? vote?)
ideas?
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]