Scala
sergeykolbasov and vkostyukov Add support for content-type-based decoding of request body (#966)
Add support for content-type-based decoding of a request body
Latest commit 5746531 Jul 15, 2018
Permalink
Failed to load latest commit information.
argonaut/src Bump sbt to 1.0.3 Nov 21, 2017
benchmarks/src/main/scala/io/finch Optimize charsetOrUtf8 Jun 14, 2018
circe/src Remove circe-jackson dependency Feb 9, 2018
core/src Add support for content-type-based decoding of request body (#966) Jul 15, 2018
docs/src/main Add support for content-type-based decoding of request body (#966) Jul 15, 2018
examples/src Remove deprecations since 0.16 Jan 3, 2018
generic/src Deprecate .as[A] for Endpoint[String] (#875) Nov 28, 2017
iteratee/src Introduce Trace (what endpoint was matched) [RFC] Jul 5, 2018
json-test/src/main/scala/io/finch/test Update to iteratee.io 0.15.0 and Cats 1.0.0-RC1 Nov 10, 2017
json4s/src Remove encoding for exceptions from all of the json projects. May 15, 2017
project Bump a couple of sbt plugins Jul 12, 2018
refined/src Add finch-refined module with refined types support (#944) Jun 13, 2018
sprayjson/src Remove encoding for exceptions from all of the json projects. May 15, 2017
sse/src Move ToResponse/ToService under io.finch Jun 15, 2017
test/src/main/scala/io/finch/test Update Cats, circe, ScalaCheck, and ScalaTest versions Nov 2, 2016
.codecov.yml Disable patch coverage check Nov 27, 2017
.gitignore improve DecodeRequest API to return Try instead of Option Feb 3, 2015
.travis.yml Update some patch versions May 9, 2018
CONTRIBUTING.md removed mentions of "request reader" across the docs Aug 1, 2016
LICENSE Fix #46 (Licensing) Jul 17, 2014
NOTICE Add note about maintainers Mar 17, 2017
README.md Bump version to 0.22 Jul 12, 2018
build.sbt Bump version to 0.22 Jul 12, 2018
finch-logo.png Add new logo Dec 10, 2014
scalastyle-config.xml Introduce Header Jun 7, 2017

README.md

Finch is a thin layer of purely functional basic blocks atop of Finagle for building composable HTTP APIs. Its mission is to provide the developers simple and robust HTTP primitives being as close as possible to the bare metal Finagle API.

Badges

Build Status Coverage Status Gitter Maven Central

Modules

Finch uses multi-project structure and contains of the following modules:

Installation

Every Finch module is published at Maven Central. Use the following sbt snippet ...

  • for the stable release:
libraryDependencies ++= Seq(
  "com.github.finagle" %% "[finch-module]" % "0.22.0"
)
  • for the SNAPSHOT version:
resolvers += Resolver.sonatypeRepo("snapshots")

libraryDependencies ++= Seq(
  "com.github.finagle" %% "[finch-module]" % "0.23.0-SNAPSHOT" changing()
)

Hello World!

This "Hello World!" example is built with just finch-core.

import io.finch._, io.finch.syntax._
import com.twitter.finagle.Http

val api: Endpoint[String] = get("hello") { Ok("Hello, World!") }

Http.server.serve(":8080", api.toServiceAs[Text.Plain])

See examples sub-project for more complete examples.

Performance

We use wrk to load test Finch+Circe against Finagle+Jackson to get some insight on how much overhead, an idiomatic Finch application written in a purely functional way, involves on top of Finagle/Jackson. The results are quite impressive (for a pre-1.0 version): Finch performs on 95% of Finagle's throughput.

Here is the first three runs of the benchmark on 2013 MB Pro (2.8 GHz Intel Core i7 w/ 16G RAM).

Benchmark Run 1 Run 2 Run 3
Finagle + Jackson 29014.68 req/s 36783.21 req/s 39924.42 req/s
Finch + Circe 28762.84 req/s 36876.30 req/s 37447.52 req/s

Finch is also load tested against a number of Scala HTTP frameworks and libraries as part of the TechEmpower benchmark. The most recent round showed that Finch performs really well there, scoring a second place across all the Scala libraries.

Documentation

Adopters

Related Projects

Contributing

There are plenty of ways to contribute into Finch:

  • Give it a star
  • Join the Gitter room and leave a feedback or help with answering users' questions
  • Submit a PR (there is an issue label "easy" for newcomers)
  • Be cool and wear a Finch T-Shirt

The Finch project supports the Typelevel code of conduct and wants all of its channels (Gitter, GitHub, etc.) to be welcoming environments for everyone.

Finch is currently maintained by Vladimir Kostyukov, Travis Brown, Ryan Plessner, and Sergey Kolbasov. After the 1.0 release, all pull requests will require two sign-offs by a maintainer to be merged.

License

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.