Skip to content

Commit

Permalink
Add changelog (#228)
Browse files Browse the repository at this point in the history
  • Loading branch information
tmattio committed Nov 29, 2020
1 parent 5dee70c commit 980105d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
35 changes: 35 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
# 0.19.0

This release is a complete rewrite of the Opium's internal that switches from Cohttp to Httpaf.
As demonstrated in several benchmarks, Httpaf's latency is much lower than Cohttp's in stress tests, so it is expected that Opium will perform better in these high pressure situations with this change.

The underlying HTTP server implementation is now contained in the `rock` package, that provides a Service and Filter implementation, inspired by Finagle's. The architecture is similar to Ruby's Rack library (hence the name), so one can compose complex web applications by combining Rock applications.

The `rock` package offers a very slim API, with very few dependencies, so it should be an attractive option for other Web framework to build on, which would allow the re-usability of middlewares and handlers, independently of the framework used (e.g. one could use Sihl middlewares with Opium, and vice versa).

Apart from the architectural changes, this release comes with a lot of additionnal utilities and middlewares which should make Opium a better candidate for complex web applications, without having to re-write a lot of common Web server functionnalities.

The Request and Response modules now provide:

- JSON encoders/decoders with `Yojson`
- HTML encoders/decoders with `Tyxml`
- XML encoders/decoders with `Tyxml`
- SVG encoders/decoders with `Tyxml`
- multipart/form encoders/decoders with `multipart_form_data`
- urlencoded encoders/decoders with `Uri`

And the following middlewares are now built-in:

- `debugger` to display an HTML page with the errors in case of failures
- `logger` to log requests and responses, with a timer
- `allow_cors` to add CORS headers
- `static` to serve static content given a custom read function (e.g. read from S3)
- `static_unix` to to serve static content from the local filesystem
- `content_length` to add the `Content-Length` header to responses
- `method_override` to replace the HTTP method with the one found in the `_method` field of `application/x-www-form-urlencoded` encoded `POST` requests.
- `etag` to add `ETag` header to the responses and send an HTTP code `304` when the computed ETag matches the one specified in the request.
- `method_required` to filter the requests by method and respond with an HTTP code `405` if the method is not allowed.
- `head` to add supports for `HEAD` request for handlers that receive `GET` requests.

Lastly, this release also adds a package `opium-testing` that can be used to test Opium applications with `Alcotest`. It provides `Testable` modules for every Opium types, and implements helper functions to easily get an `Opium.Response` from an `Opium.Request`.

# 0.18.0

* Make examples easier to find and add documentation related to features used in them. (#125, @shonfeder)
Expand Down
2 changes: 1 addition & 1 deletion opium/src/opium.mli
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ module Middleware : sig
(** {3 [method_required]} *)

(** [method_required] creates a middleware that filters the requests by method and
respond with a [`Method_not_allowed] status ([HTTP 304]) if the method is not
respond with a [`Method_not_allowed] status ([HTTP 405]) if the method is not
allowed. *)
val method_required : ?allowed_methods:Method.t list -> unit -> Rock.Middleware.t

Expand Down

0 comments on commit 980105d

Please sign in to comment.