Skip to content

SeanShubin/http-values

Repository files navigation

Http Values

Http without mutable state

Rationale

Java's servlet api is designed around side effects on the response. It has a signature like this:

javax.servlet.Servlet
public void service(ServletRequest req,
                    ServletResponse res)
             throws ServletException,
                    java.io.IOException

I wanted to treat the http request/response process as a function, like so

// Client
trait Sender {
  def send(request: RequestValue): ResponseValue
}

// Server
trait Receiver {
  def receive(request: RequestValue): ResponseValue
}

This allows implementors to test pure functions rather than dealing with streams.

There is also a good bit of support for handling dispatch in a testable way. A server can compose a bunch of named receivers together, an be confident that any path collisions will fail immediately with a sensible error message, rather than having an arbitrary receiver pick up the request.

Limitations

  • The request and response values are reified immediately. This is usually not a problem unless your application typically ignores large portions of the request or response and thus could be optimized by waiting until they needed to be reified.
  • By design, this library does not handle streaming. If you need streaming this is the wrong tool for the job.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published