REST-APIs Implementation tool: Finatra


Finatra

Finatra is an open-source project by Twitter that can be used to build REST APIs in Scala programming language. Finatra builds on top of Twitter’s Scala stack — twitter-server, finagle, and twitter-util.

Twitter-server   defines a template from which servers at Twitter are built. It provides common application components such as an administrative HTTP server, tracing, stats, etc. These features are wired in correctly for use in production at Twitter.

Finagle   is an extensible RPC system for the JVM, used to construct high-concurrency servers. Finagle implements uniform client and server APIs for several protocols, and is designed for high performance and concurrency. Most of Finagle’s code is protocol agnostic, simplifying the implementation of new protocols.

Finagle is written in Scala, but provides both Scala and Java idiomatic APIs.

twitter-util   A bunch of idiomatic, small, general purpose tools.

We are discussing here about Finatra version 2 . Finatra version 2 is a complete rewrite of finatra and is significantly faster(50 times according to documentation) than version 1.x.

Why Finatra ??

Finatra2.0 depicts a full rewrite of the codebase from v1.x. In this version, they set out to significantly increase the testability, modularity and performance of the framework. they want to make it easy to work with the codebase as well as intuitive to write really powerful tests for your API.

  • ~50x speed improvement over the previous v1.6 release in many benchmarks
  • Powerful integration testing support
  • Optional JSR-330 style dependency injection using Google Guice
  • JSON enhancements supporting required fields, default values, and custom validations
  • Fully Async using Futures
  • Transport Layer Security(TLS) and Secure Sockets Layer (SSL) support
  • Modern logging via SLF4J, Finagle client utilities, and more.

How it is better than others :

  •  Finatra is a lightweight framework for building fast, testable, scala applications
  • Main key point Its testing :

At a high-level, the philosophy of testing in Finatra revolves around the following testing definitions:

  1. Feature tests — the most powerful tests enabled by Finatra. These tests allow you to verify feature requirements of the service by exercising its external interface. Finatra supports both “black-box” and “white-box” testing against a locally running version of your server. You can selectively swap out certain classes, insert mocks, and perform assertions on internal state. Take a look at an example feature test.
  2. Integration tests — similar to feature tests but the entire service is not started. Instead, a list of modules are loaded and then method calls and assertions are performed at the class-level. You can see an example integration test.
  3. Unit tests — these are tests of a single class and since constructor injection is used throughout the framework, Finatra stays out of your way.

Here is code snippet that illustrate the concept:

import com.twitter.finagle.http.Request
import com.twitter.finatra.HttpServer
import com.twitter.finatra.http.Controller
import com.twitter.finatra.http.filters.CommonFilters
import com.twitter.finatra.http.routing.HttpRouter

object HelloApp extends HelloServer

class HelloServer extends HttpServer {
  override protected def configureHttp(router: HttpRouter): Unit = {

    router
      .filter[CommonFilters]
      .add[HelloController]
  }
}

class HelloController extends Controller {

  get("/hello") { request: Request =>
    "Finatra says hello :)..."
  }

}

So, We just covered here what is finatra and what its advantages and how it is better than others REST APIs frameworks . For more better understanding to start with finatra here is an example link hello-finatra that will help you to understand practically.   🙂

Hope it helped you to give a basic idea and start with finatra.

Reference: Finatra

Like it & Share it  like share

KNOLDUS-advt-sticker

Advertisements
This entry was posted in Scala and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s