com.seanshubin.http.values:http-values-domain

HTTP as a pure function

Лицензия

Лицензия

Категории

Категории

Doma Данные ORM
Группа

Группа

com.seanshubin.http.values
Идентификатор

Идентификатор

http-values-domain
Последняя версия

Последняя версия

1.0.1
Дата

Дата

Тип

Тип

jar
Описание

Описание

com.seanshubin.http.values:http-values-domain
HTTP as a pure function

Скачать http-values-domain

Как подключить последнюю версию

<!-- https://jarcasting.com/artifacts/com.seanshubin.http.values/http-values-domain/ -->
<dependency>
    <groupId>com.seanshubin.http.values</groupId>
    <artifactId>http-values-domain</artifactId>
    <version>1.0.1</version>
</dependency>
// https://jarcasting.com/artifacts/com.seanshubin.http.values/http-values-domain/
implementation 'com.seanshubin.http.values:http-values-domain:1.0.1'
// https://jarcasting.com/artifacts/com.seanshubin.http.values/http-values-domain/
implementation ("com.seanshubin.http.values:http-values-domain:1.0.1")
'com.seanshubin.http.values:http-values-domain:jar:1.0.1'
<dependency org="com.seanshubin.http.values" name="http-values-domain" rev="1.0.1">
  <artifact name="http-values-domain" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.seanshubin.http.values', module='http-values-domain', version='1.0.1')
)
libraryDependencies += "com.seanshubin.http.values" % "http-values-domain" % "1.0.1"
[com.seanshubin.http.values/http-values-domain "1.0.1"]

Зависимости

compile (2)

Идентификатор библиотеки Тип Версия
org.scala-lang : scala-library jar 2.12.3
javax.servlet : javax.servlet-api jar 4.0.0

test (1)

Идентификатор библиотеки Тип Версия
org.scalatest : scalatest_2.12 jar 3.0.4

Модули Проекта

Данный проект не имеет модулей.

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.

Версии библиотеки

Версия
1.0.1
1.0