Over the past year, more and more Java frameworks have sprung up. Like JavaScript, everyone thinks they know what a good frame should be. Even my old grandmother now uses a framework that I have never heard of and may never use. Joke to joke, can do almost anything bloated frame market is saturated, but how to judge it? This article is designed to provide the best Java restfulful framework. I'm only introducing lightweight products, skipping over those bloated, overly-designed frameworks. At the same time, I just want them to be stable and mature, providing simple, lightweight features. I only break this rule when I introduce play frameworks, for the reason given later. Which Java restful framework to use in future projects depends entirely on your current requirements. To make your choice, I'll list the most prominent frame features and hopefully this will save you some time.
Dropwizard
Birth time: 2011
Rating: 4.5/5
Dropwizard provides a stable, mature Java library and encapsulates it into a simple lightweight package.
Dropwizard between frames and libraries. It provides all the necessary to develop a Web application. Because of the built-in modularity, an application can maintain small and lean features, reduce development and maintenance time, and reduce the burden.
Dropwizard uses an existing Jetty HTTP library and embeds it into your project without the need for an external server. All Dropwizard projects have a main method to manage the built in HTTP server.
Link
Official Site GITHUB Documents
Advantages
Fast Project building and start-up
of modular
Incredibly fast (at least according to the metric measured results)
Jetty for HTTP, Jersey for REST, and Jackson for JSON
Other libraries are also supported, such as mustache, Logback, JDBI, Hibernate Validator, guava, ...
Using Metrics support monitoring
The main method launches the Jetty server, which makes it easy to debug and maintain
Strong community Strength
Disadvantages
Dropwizard documentation is a major source of knowledge, but not excellent. You may need to search and discover the documentation for the third party class library.
Because errors are treated as plain text for some reason, if you want the response to always be JSON, this may be problematic
Make sure you use the latest dropwizard, and some older versions use obsolete Third-party libraries. And early dropwizzard are hard to upgrade.
Example
package com.example.helloworld;
Import io.dropwizard.Application;
Import Io.dropwizard.setup.Bootstrap;
Import io.dropwizard.setup.Environment;
Import Com.example.helloworld.resources.HelloWorldResource;
Import Com.example.helloworld.health.TemplateHealthCheck; public class Helloworldapplication extends application
Annotations
Individuals do not want to recommend this framework for large projects. But if you want to try, you won't be disappointed. The main thing is that this framework uses the best modern Java Web Components and assembles them into a simple and easy-to-use framework.
Unfortunately, this has also brought about its problems. The combination of these libraries can lead to unforeseen problems. That's why I lost 0.5 stars to it, not 5 stars.
Jersey
Birth time: (Jersey 2.X)
Rating: 5/5
The Jersey RESTful Framework is an Open-source RESTful framework that implements the Jax-rs (JSR 311 & JSR 339) specification. It expands the JAX-RS implementation and provides additional features and tools to further simplify RESTful service and client development. Although relatively new, it is already a product-level RESTful service and client framework.
Link
Official Site GITHUB Documents
Advantages
Excellent documentation and examples
Fast
Super easy to Route
Smooth JUnit Integration
Personally, the JAX-RS implementation is better than the MVC framework when developing RESTful service.
can be integrated into other libraries/frameworks (Grizzly, Netty). This may also be the reason why many products use it.
Support for asynchronous links
Don't like servlet container? You can use jersey without them.
WADL, Xml/json support
Included in the GlassFish
Disadvantages
Jersey 2.0+ uses a number of complex dependency injection implementations
May not be a bad thing. Jersey 1.X is implemented using older Jax-rs
A lot of third-party libraries only support Jersey 1.X, not available at Jersey 2.X
Example
Package Org.glassfish.jersey.examples.helloworld;
Import Javax.ws.rs.GET;
Import Javax.ws.rs.Path;
Import javax.ws.rs.Produces;
@Path ("HelloWorld") public
class Helloworldresource {public
static final String cliched_message = ' Hello world !" ;
@GET
@Produces ("Text/plain") public
String Gethello () {return
cliched_message;
}
}
Annotations
Jersey is my choice, 5 stars.
Ninja Web Framework
Birth time: 2012
Rating: 3.5/5
The Ninja web framework is a full stack of Java Web frameworks. Stable, fast, reliable, product level.
It provides everything from developing, testing, publishing, and maintaining RESTful Web applications (Servlets, Guice, JPA, flyway migrations, Maven, etc).
Like Dropwizzard, the Ninja Web Framework is an integrated software stack. You don't have to build your own, just use Maven archetype to build a new project and import it into the IDE to start coding.
Link
Official Site GITHUB Documents
Advantages
Fast
Fast Project building and start-up
of modular
XML, HTML, JSON rendering
Other libraries (such as Guice, logback, guava, etc) are also supported.
Good data persistence and caching
Don't like servlet container? You can choose the container you like
If you don't like the container at all, you can use the standalone mode to use jetty as a self executing jar
Disadvantages
Again, just like Dropwizzard, documents have but not good enough. It took me a long time to understand it. This framework also relies on many other libraries, and sometimes it's cumbersome to get the information you need.
Not very well known, small community. Rumor has it that this framework was created by those who switched to Scala's play 2.X user
Example
package controllers;
public class Applicationcontroller {public result
index () {person person
= new person ();
Person.name = "John Johnson";
Return Results.json (). render (person);
}
Annotations
It looks good, but I'll throw it aside before it matures.
Play Framework
Birth time: 2011
Rating: 4/5
Use the play Framework to easily create, build, and publish Web applications that support Java & Scala. It uses Akka, based on a lightweight, stateless architecture. It should be applied to a large scale of low CPU and memory consumption applications.
Link
Official Site GITHUB Documents
Advantages
Easy to develop
Quick, but there are no other frames fast
Supports non-blocking I/O based on Netty. It's good to handle remote calls in parallel.
The community is big.
Fast Project building and start-up
of modular
Mvc
REST, Json/xml, Web Sockets, non-blocking I/O
Just refresh the browser to see the latest changes
Support Async
There are books published.
Disadvantages
Version 2.0 is the most controversial Java framework. Switch to the switch to Scala made some Java developers outraged.
Not backward compatible; Play 2.X has rewritten
Supposedly lightweight, but somewhat bloated
SBT build Tools. The so-called Maven killer, but never good to replace it. Difficult to learn and configure
Non-servlet
Breaking Changes across releases
Example
Package Controllers
Import play.api._
import Play.api.mvc._
class application extends Controller {
def hello (name:string) = Action {
ok ("Hello" + name +!)
}
}
Annotations
Complaining back to complaining, I have always liked and preferred this framework. Unfortunately, I can only give it 4 stars. I firmly believe that the JAX-RS framework is more suitable for RESTful Web services.
Restexpress
Birth time: 2009
Rating: 3/5
Restexpress is a container-less lightweight Netty HTTP stack wrapper to make it easier to create Java RESTful services.
The restexpress goal is to support the best RESTful practice.
Link
GITHUB
Advantages
The real micro-frame
Top performance, fast, reliable
Xml/json
One of the oldest and most stable RESTful frames
Disadvantages
No document
Almost no support
A small community.
Example
Package com.example;
Import java.io.IOException;
Import Io.netty.handler.codec.http.HttpMethod;
Import org.restexpress.RestExpress;
public class Main
{public
static restexpress startserver (string[] args) throws IOException
{
Restexpress Server = new Restexpress ();
MyResource r = new MyResource ();
Server.uri ("/myapp/myresource", R)
. Method (Httpmethod.get)
. noserialization ();
Server.uri ("/myapp/myresource", R)
. Method (Httpmethod.post);
Server.bind (8080);
return server;
}
public static void Main (string[] args) throws Exception
{
restexpress server = StartServer (args);
System.out.println ("Hit Enter to stop it ...");
System.in.read ();
Server.shutdown ();
}
Annotations
Even though the framework is super fast, I don't want to recommend it. Lack of documentation and unsupported support make it a poor framework. Give it 3 stars for the sake of speed.
Restlet
Birth time: 2005
Rating: 4.5/5
Restlet helps Java programmers build large-scale, fast web APIs that conform to RESTful schema patterns.
It provides a powerful routing and filtering system. A unified client/server Java API. Meet all the major platforms (Java Se/ee, Google appengine, OSGi, GWT, Android) and provide countless extensions to meet the needs of programmers.
As far as I know, it is the first Java RESTful web framework. A lot of companies are using it, but you probably never heard of it, as if it was already invisible.
Link
Official Site GITHUB Documents
Advantages
Powerful
Enterprise-Class Framework
Multi-platform Java SE, Java EE, Google Web Toolkit, Google AppEngine, Android, OSGi environments
Support Jax-rs (just like Jersey)
Most advanced RESTful support
of modular
Support for other libraries
Development has been active
Intelligent URL binding, fully functional URI routing
There are books related to
Disadvantages
A very steep learning curve
Closed the community, though StackOverflow was still open on the
No longer popular, more because the play Framework and Jersey
Example
public class Part03 extends Serverresource {public
static void Main (string[] args) throws Exception {
//Create T He HTTP server and listen on port 8182
new Server (Protocol.http, 8182, Part03. Class). Start ();
@Get ("TXT") public
String toString () {return
' Hello, world ';
}
}
Annotations
Although this framework has been popular, but to its and the current degree of completion, I can not give it 5 stars.
Restx
Birth time: 2013
Rating: 3.5/5
RESTX is a lightweight, modular, feature-wide, super fast Open source Java REST framework.
Link
Official Site GITHUB Documents
Advantages
Fast, lightweight
Easy to build
The real micro-frame
of modular
Support for other libraries
Support MongoDB
Disadvantages
Unfriendly and confusing document. I expect a little better documentation for this type of framework.
Too young
Asynchronous async is not currently supported
Example
@GET ("/message/{id}") public message
SayHello (string ID,//path param
string who//query param
) {
re Turn new Message (). Setmessage (String.Format (
"Hello%s, it's%s", who
, DateTime.Now (). toString ("HH:mm:ss")) ;
}
@POST ("/message/{id}") public message
SayHello (String ID,//path param
msg//body param
) {
return msg.setmessage (String.Format (
"%s @%s",
msg.getmessage (), DateTime.Now (). toString ("HH:mm:ss") ));
}
Annotations
I don't really spend too much time on this frame. It's not worth spending too much energy on another frame, I mean, the Java framework market is becoming more fragmented, like the JavaScript market, which should stop this trend.
Spark Framework
Birth time: 2011
Rating: 3.5/5
Instead of messing with Apache's big data frame Spark, the Spark framework here is a lightweight Java web framework for rapid development (50% Spark users to create REST APIs using Spark). It is inspired by the Ruby framework Sinatra.
It has a minimized kernel of less than 1M, providing all the basic features that are used to build RESTful or traditional Web applications.
Link
Official Site GITHUB Documents
Advantages
Quick, lightweight
Excellent Quick prototyping
Easy to build
Often paired with Angularjs
The real micro-frame
Using Jetty
Can be used in a container or run independently
Disadvantages
Documentation can be better, it's not for beginners
Not suitable for large projects
Community Small
Example
Import static Spark. spark.*;
public class HelloWorld {public
static void Main (string[] args) {get
("/hello", (req, res)-> "Hello World" );
}
}
Annotations
This framework is suitable for initial development. Used primarily as a small project or prototype.