Skip to content
Karan Parikh edited this page Mar 26, 2014 · 76 revisions

What is Rest.li?

Rest.li is a REST+JSON framework for building robust, scalable service architectures using dynamic discovery and simple asynchronous APIs.

Rest.li fills a niche for building RESTful service architectures at scale, offering a developer workflow for defining data and REST APIs that promotes uniform interfaces, consistent data modeling, type-safety, and compatibility checked API evolution.

No, Really. What is Rest.li?

Oh, you want to see some code, don't you?

Basically, Rest.li is a framework where you define schemas for your data:

    {
      "name" : "Greeting", "namespace" : "com.example.greetings", "type" : "record",
      "fields" : [
        { "name" : "message", "type" : "string" }
      ]
    }

Write servers:

    @RestLiCollection(name = "greetings")
    class GreetingsResource extends CollectionResourceTemplate<Long, Greeting> {
      public Greeting get(Long key) {
        return new Greeting().setMessage("Good morning!");
      }
    }

And then write clients:

    Greeting response = restClient.sendRequest(new GreetingsBuilders.get().id(1L)).getResponseEntity();
    System.out.println(response.getMessage());

And get all the benefits of a robust, scalable REST+JSON framework.

Using Rest.li JARs

If you are not modifying the rest.li source code, you don't need to build rest.li. You can simply depend on the artifacts in the maven central repository. The current latest version in Maven Central is 1.15.2.

To build from source, please see this page.

Twitter Account

Follow us @rest_li

Discussion Group

Linkedin Rest.li Group

Quickstart Guides and Examples

Design Principles

  • Promote uniform interfaces through consistent data modeling and REST conventions
  • Seamlessly integrate a JSON serializable data layer including a data schema language and generated language bindings
  • Provide published interface definitions, generated from server code
  • Make calling services dead simple with generated type-safe client bindings
  • Versioning with automated compatibility checking
  • Simple asynchronous API
  • Dynamic discovery with load balancing

Requirements

  • Java 1.6+
  • Gradle 1.8+ or SBT 0.13.0+

Documentation

Make sure to check out the various wiki pages as well!

Clone this wiki locally