Todos os anos, no passado, mais e mais estruturas Java surgiam. Como o JavaScript, todo mundo pensa que sabe como deve ser a funcionalidade de uma boa estrutura. Até minha velha avó agora usa uma estrutura que eu nunca ouvi e provavelmente nunca usará. O mercado da estrutura inchado é saturado pela estrutura inchada que pode fazer quase qualquer coisa, mas como julgá -lo? Este artigo tem como objetivo fornecer as melhores estruturas RESTful Java disponíveis no momento. Eu apenas apresento produtos leves, pulando aquelas estruturas inchadas super-projetadas. Ao mesmo tempo, eu só quero que eles sejam estáveis e maduros, fornecendo recursos simples e leves. Eu apenas quebrei essa regra ao introduzir estruturas de reprodução, o motivo é dado posteriormente. Qual estrutura Java Restful a ser usada em projetos futuros depende inteiramente de suas necessidades atuais. Para facilitar suas escolhas, listarei os recursos mais proeminentes da estrutura, esperando que isso economize algum tempo.
DropWizard
Tempo de nascimento: 2011
Classificação: 4.5/5
A DropWizard fornece uma biblioteca Java estável e madura e a encapsula em um pacote simples e leve.
DropWizard está em algum lugar entre a estrutura e a biblioteca. Ele fornece todas as necessidades necessárias para desenvolver um aplicativo da Web. Graças à modularidade interna, um aplicativo pode permanecer pequeno e magro, reduzindo o tempo de desenvolvimento e manutenção e reduzindo a carga.
O DropWizard usa a biblioteca HTTP existente para jato para incorporar seu projeto sem a necessidade de um servidor externo. Todos os projetos DropWizard têm um método principal para gerenciar o servidor HTTP integrado.
Link <br /> site oficial documentação do github
vantagem
Construção rápida do projeto e startup
Modular
Incrível rápido (pelo menos com base nos resultados medidos pela métrica interna)
Jetty para HTTP, Jersey para descansar e Jackson para JSON
Ele também suporta outras bibliotecas, como bigode, logback, JDBI, validador de hibernação, goiaba,…
Monitoramento de suporte com métricas
O método principal inicia o servidor jetty, que pode ser depurado e mantido facilmente
Forte força da comunidade
falha
A documentação do DropWizard é a principal fonte de conhecimento, mas não é excelente. Pode ser necessário pesquisar e descobrir documentos para bibliotecas de terceiros.
Por alguma razão, o erro é tratado como texto simples, se você deseja que o resultado da resposta seja sempre JSON, isso pode ser problemático
Certifique-se de usar o mais recente DropWizard, algumas versões mais antigas usam bibliotecas de terceiros abandonadas. E foi difícil atualizar o Dropwizzard precoce
exemplo
pacote com.example.helloworld; importar io.dropwizard.Application; importar io.dropwizard.setup.bootstrap; importar io.dropwizard.setup.environment; importar com.example.helloworld.resources.helloworldReSource; import.example.helloworld.Health.TemplateHeckCk; classe pública HelloworldApplication estende o aplicativo <HelloworldConfiguration> {public static void main (string [] args) lança exceção {new helloworldApplication (). run (args); } @Override public string getName () {return "hello-world"; } @Override public void Initialize (bootstrap <HelloworldConfiguration> bootstrap) {// nada a fazer ainda} @Override public void run (configuração do HelloworldConfiguration, ambiente ambiente) {// nada a fazer ainda}} NOTA <BR /> Pessoalmente, não quero recomendar essa estrutura para grandes projetos. Mas se você quiser experimentar, não ficará desapontado. Principalmente, essa estrutura usa os melhores componentes da web java moderna e se reúne em uma estrutura simples e fácil de usar.
Infelizmente, isso também traz seus problemas. A combinação dessas bibliotecas pode levar a problemas imprevistos. É por isso que perdi 0,5 estrelas por isso, sem classificá -lo como uma pontuação completa de 5 estrelas.
Jersey
Tempo de nascimento: 2012 (Jersey 2.x)
Classificação: 5/5
A estrutura de Jersey Restful é uma estrutura RESTful de código aberto que implementa a especificação Jax-RS (JSR 311 e JSR 339). Ele estende a implementação do JAX-RS e fornece mais recursos e ferramentas que podem simplificar ainda mais o serviço RESTful e o desenvolvimento do cliente. Apesar de ser relativamente novo para Xinyi, já é uma estrutura de serviço RESTful de grau de produto e estrutura do cliente.
Link <br /> site oficial documentação do github
vantagem
Excelente documentação e exemplos
rápido
Roteamento super fácil
Integração suave do Junit
Pessoalmente, ao desenvolver um serviço RESTful, a implementação do JAX-RS é melhor que as estruturas do MVC.
Pode ser integrado a outras bibliotecas/estruturas (Grizzly, Netty). Essa também pode ser a razão pela qual muitos produtos o usam.
Apoie a ligação assíncrona
Não gosta de recipientes para servlet? Você pode usá -los ao usar Jersey.
WADL, suporte XML/JSON
Incluído em Glassfish
falha
Jersey 2.0+ usa alguma implementação complexa de injeção de dependência
Provavelmente não é uma coisa ruim. Jersey 1.x implementos usando o Jax-RS mais antigo
Um grande número de bibliotecas de terceiros suporta apenas Jersey 1.x e não está disponível em Jersey 2.x
exemplo
pacote org.glassfish.jersey.examples.helloworld; importar javax.ws.rs.get; importar javax.ws.rs.path; importar javax.ws.rs.produces; @Path ("helloworld") classe pública helloworldresource {public static final string cliched_message = "hello world!" ; @Get@produz ("text/plana") public string gethello () {return cliched_message; }} anotação
Jersey é minha escolha, 5 estrelas.
Ninja Web Framework
Tempo de nascimento: 2012
Classificação: 3.5/5
A Ninja Web Framework é uma estrutura da web em pilha completa. Estável, rápido, confiável, grau de produto.
Ele fornece tudo o que desenvolve, testa, publica e mantém aplicativos da Web RESTful (servlets, Guice, JPA, Migrações de Flyway, Maven, etc.).
Assim como o DropWizzard, o Ninja Web Framework é uma pilha de software integrada. Você não precisa construir o seu próprio, basta usar o arquétipo Maven para gerar um novo projeto, importar -o para o IDE e começar a codificar.
Link <br /> site oficial documentação do github
vantagem
rápido
Construção rápida do projeto e startup
Modular
XML, HTML, JSON Rendering
Outras bibliotecas também são suportadas (como guice, logback, goiaba etc.)
Boa persistência de dados e cache
Não gosta de servlet contêiner? Você pode escolher o recipiente que você gosta
Se você não gosta de contêineres, pode usar o modo independente e usar o jetty como um frasco de auto-execução
falha
Da mesma forma, como Dropwizzard, a documentação tem, mas não é boa o suficiente. Levei muito tempo para conhecer isso. Essa estrutura também se baseia em muitas outras bibliotecas e, às vezes, é problemático obter as informações necessárias.
Não é muito famosa e pequena comunidade. Há rumores de que essa estrutura foi criada pelo Play 2.x Usuários que mudaram para Scala
exemplo
controladores de pacotes; public class ApplicationController {public Result Index () {Person Pessoa = new Person (); pessoa.name = "John Johnson"; RETORES DE RETORNO. }}NOTA <br /> parece bom, mas vou jogá -lo de lado antes de amadurecer.
Estrutura de jogo
Tempo de nascimento: 2011
Classificação: 4/5
Use a estrutura de reprodução para criar, criar e publicar aplicativos da Web com suporte Java e Scala. Ele usa Akka, baseado em uma arquitetura apátrida leve. Ele deve ser usado para aplicações com baixa CPU e consumo de memória em larga escala.
Link <br /> site oficial documentação do github
vantagem
Fácil de desenvolver
Rápido, mas não tão rápido quanto outras estruturas
Com base na rede, ele suporta E/S não bloqueador. É excelente ao lidar com chamadas remotas em paralelo.
A comunidade é grande
Construção rápida do projeto e startup
Modular
MVC
Descanse, json/xml, soquetes da web, E/S não bloqueando
Basta atualizar o navegador para ver as últimas mudanças
Suporte assíncrono
Existem livros publicados
falha
A versão 2.0 é a estrutura Java mais controversa. A mudança para Scala fez com que alguns desenvolvedores Java ultrapassassem.
Não é compatível com versões anteriores; Jogue 2.x reescrito
É conhecido como leve, mas é um pouco inchado
Ferramenta de construção SBT. Conhecido como o Maven Killer, mas nunca se destaca para substituí -lo. Difícil de aprender e configurar
Não servidor
Quebrando mudanças nos lançamentos
exemplo
Controladores de pacotes Importar play.api._import play.api.mvc._ Classe Aplicativo Extende o controlador {def hello (nome: string) = ação {ok ("hello" + name + "!")}}NOTA <BR /> Não importa o quanto eu reclamo, ainda gosto e escolhi essa estrutura primeiro. Infelizmente, só posso dar 4 estrelas. Acredito firmemente que uma estrutura baseada no JAX-RS é mais adequada para serviços da Web RESTful.
RestExpress
Tempo de nascimento: 2009
Classificação: 3/5
O RestExpress é um wrapper de pilha http leve não-container, para facilitar a criação de serviços RESTful Java.
O objetivo do RestExpress é apoiar as melhores práticas repousantes.
Link
Github
vantagem
Microframework real
Desempenho superior, rápido e confiável
XML/JSON
Uma das estruturas repousas mais antigas e estáveis
falha
Sem documentação
Quase sem apoio
Uma comunidade muito pequena
exemplo
pacote com.example; importar java.io.ioException; importar io.netty.handler.codec.http.httpmethod; importar org.restExpress.restExpress; classe pública Main {public static restexpress startServer (string [] args) lança 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); servidor de retorno; } public static void main (string [] args) lança exceção {RestExpress Server = startServer (args); System.out.println ("Hit Enter para pará -lo ..."); System.in.read (); server.shutdown (); }}NOTA <BR /> Embora essa estrutura seja super rápida, também não quero recomendá -la. A falta de documentação e a falta de apoio tornam -a uma estrutura subdesenvolvida. Dê 3 estrelas para velocidade.
RestLet
Tempo de nascimento: 2005
Classificação: 4.5/5
O RestLet ajuda os programadores Java a criar APIs rápidas e rápidas em larga escala que estão em conformidade com os padrões de arquitetura RESTful.
Ele fornece sistemas poderosos de roteamento e filtragem. A API Java do cliente/servidor unificada atende a todas as principais plataformas (Java SE/EE, Google AppEngine, OSGI, GWT, Android) e fornece inúmeras extensões para atender às necessidades dos programadores.
Até onde eu sei, é a primeira estrutura da Web Java Restful. Muitas empresas o usam, mas você pode nunca ter ouvido falar, como se não fosse mais visível.
Link <br /> site oficial documentação do github
vantagem
poderoso
Estrutura de nível corporativo
Multi-plataforma Java SE, Java EE, Google Web Toolkit, Google AppEngine, Android, Osgi Ambientes
Apoie Jax-Rs (assim como Jersey)
Apoio RESTful mais avançado
Modular
Apoie outras bibliotecas
O desenvolvimento tem sido ativo
Inclinação inteligente de URL, roteamento de URI com recursos completos
Existem livros relacionados
falha
Curva de aprendizado muito acentuada
Comunidade fechada, aberta mesmo em Stackoverflow
Não é mais popular, mais por causa da estrutura e Jersey
exemplo
classe pública Part03 estende o serverResource {public static void main (string [] args) lança Exceção {// Crie o servidor HTTP e ouça na porta 8182 novo servidor (protocol.http, 8182, part03. class) .start (); } @Get ("txt") public string tostring () {return "hello, World"; }}NOTA <BR /> Embora essa estrutura tenha sido popular o tempo todo, não posso dar 5 estrelas à sua conclusão atual e atual.
RestX
Tempo de nascimento: 2013
Classificação: 3.5/5
O RESTX é uma estrutura de repouso Java de código aberto super rápido, modular, multi-com vários recursos e de código aberto.
Link <br /> site oficial documentação do github
vantagem
Rápido, leve
Fácil de construir
Microframework real
Modular
Apoie outras bibliotecas
Apoie MongoDB
falha
Documentação confusa. Espero melhor documentação para este tipo de estrutura
Muito jovem
Assíncrono assíncrono ainda não foi suportado
exemplo
@Get ("/message/{id}") mensagem pública dizhello (string id, // path param string who // Query param) {return new message (). SetMessage (string.format ("hello %s, é %s", quem, datetime.now (). Tostring ("hh: mm: ss"); } @Post ("/message/{id}") Public Message dizhello (string ID, // PATE Param message msg // Body param) {return msg.setMessage (String.Format (" %s @ %s", msg.getMessage (), DATETime.now (). }Observe <r /> Para ser sincero, não gastei muito tempo nessa estrutura. Não vale a pena gastar muito esforço em outra estrutura, quero dizer, o mercado da estrutura Java está se tornando cada vez mais fragmentado, assim como o mercado de JavaScript, essa tendência deve ser interrompida.
Spark Framework
Tempo de nascimento: 2011
Classificação: 3.5/5
Não se confunda com a Spark Big Data da Apache, a estrutura do Spark aqui está uma estrutura da Web Java leve para o desenvolvimento rápido (50% dos usuários do Spark usam o Spark para criar APIs REST). É inspirado no Ruby Framework Sinatra.
Possui um kernel minimizado de menos de 1 milhão e fornece todos os recursos básicos para criar aplicativos Web RESTful ou tradicional.
Link <br /> site oficial documentação do github
vantagem
Rápido, leve
Excelente protótipo rápido
Fácil de construir
Frequentemente usado com angularjs
Microframework real
Usando o cais
Pode ser usado em recipientes ou executar independentemente
falha
A documentação pode ser melhor, não é adequada para iniciantes
Não é adequado para grandes projetos
Comunidade pequena
exemplo
importar faísca estática.Spark.*; classe pública helloworld {public static void main (string [] args) {get ("/hello", (req, res) -> "hello world"); }}NOTA <BR /> Esta estrutura é adequada para o desenvolvimento inicial. Usado principalmente como pequenos projetos ou protótipos.