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]

Reply via email to