Taverna /dev/All

Criar clientes rest com java

fala pessoal blz, o que vcs estão usando para criar cliente rest com java ?, feign ? retrofit ? okhttp ?

Excelente pergunta: minha resposta é… varia com o caso!

O Feign é muito bom quando você quer criar o cliente de forma automática, uma mão na roda e funciona realmente super bem.

Tirando isto, na esmagadora maioria das vezes uso algo até mais simples: a classe HTTPURLConnection HttpURLConnection (Java Platform SE 8 ) que já vêm no próprio Java e nos dá suporte a praticamente tudo o que precisamos.

Outra alternativa que gosto bastante também é o Apache HTTP Client (http://hc.apache.org/) que uso quando preciso de coisas um pouco mais avançadas, ele facilita um pouco minha vida quando, por exemplo, preciso lidar com alguns certificados digitais.

E, finalmente, outra alternativa que também é bacana demais da conta é o REST Template do Spring: Getting Started | Consuming a RESTful Web Service

sempre usei o restTemplate do spring também para tudo, to estudando algumas outras possibilidades as 3 melhores que achei ate agora foi o feign o unirest e o okhttp, fazendo logo uma segunda pergunta estou em um projeto que vamos varias integrações com empresas parceiras sera alguns rest outros soap para trazer informações de produtos , como vcs acham que seria a melhor forma de fazer isso, cada integração um projeto maven separado ? alguem ja fez algo do tipo ?

este é meu dia a dia :slight_smile:

no caso de REST com SOAP você tem uma vantagem do lado SOAP que são os geradores de clientes que são realmente muito bons, como o clássico wsdl2java que inclusive vêm no JDK ou o antigo Apache CXF.

Então acabo neste caso tendo parte usando alguma das opções que te mostrei acima e a outra parte usando estes geradores de cliente (eis algo que é muito lindo no SOAP e pouca gente fala, né?).

Quanto a ter projetos separados ou não: varia demais de acordo com o caso. A questão de ter cada integração em projeto separado está no custo de manutenção que você vai ter no futuro. De forma ingênua você vai pensar: “hmm… bases pequenas, fáceis de manter”, e está certo. Por outro lado, são bases pequenas que precisam se integrar entre si, então sempre busco um meio termo aí.

Se a integração que vou realizar é do tipo passiva, isto é, eu receberei as requisições, muitas vezes vale à pena ter uma implantação separada para que, caso esta receba uma “pancada” de requisições, não tire o resto da plataforma do ar.

Mas a pergunta que você deve se responder é: vale à pena manter a orquestração de projetos independentes? Este é o ponto pra mim.

ja usei esses geradores de cliente do soap também (ultima que fiz com soap foi do uma versão do magento que infelizmente não segue o um padrão para poder ser gerado o cliente), te explicando um pouco o projeto que to , é de uma logistica que esta expandido então o projeto é a gente vai integrar com essas plataformas pra fazer busca de produtos e gravar na base desta empresa de logistica

curioso: estou em um projeto da mesma área (logística) e vamos precisar integrar com um monte de clientes diferentes.

neste caso específico está sendo um bom negócio termos os integradores como projetos separados. Realizamos a comunicação entre eles usando mensageria.

a vantagem no nosso caso é que temos um número significativo de integrações, então vale à pena, até pra facilitar a implantação pois elas sofrerão com certeza uma série de mudanças, e ter um monolito neste caso não seria uma boa.

o pior da area de logistica é que ainda usa muita integração via arquivo

dica: já deu uma olhada no Apache Camel? (https://camel.apache.org)

usei o spring integration, to dando uma estudada no camel agora

o último q usei foi o okhttp, comecei a usar ele depois q conheci em um projeto de app android. achei fácil de usar e dava conta do recado pois eram projetos simples e pequenos

entre os dois use o Camel: a quantidade de componentes é astronomicamente superior e a DSL em Java também é um recurso muito interessante

Gente, vi um tanto de nominho e sigla aí pra cima que nunca testei. Mas faz algum tempo que sempre que preciso uso interfaces anotadas com rertrofit. Acho simples e intuitivo, e mapeio só aquilo que preciso do endpoint. Usando no Spring, deixo a conf do retrofit na fábrica, aí vario a URL base com propriedade de ambiente, aquelas coisas… Inclusive parece que o retrofit usa o okhttp por trás, prq quando preciso por exemplo forçar acesso a HTTPS não confiável, tenho que configurar o okhttp na fábrica setar ele no retrofit.

1 Curtida

Acho que estou ficando ultrapassado :grinning:, eu geralmente uso a api HTTP do java mesmo, pra mapear o JSON eu uso uma lib que facilite (jackson ou gson).

1 Curtida

se você tá usnado a API Java eu diria que você tá sendo pragmático (o mais) :slight_smile:

1 Curtida

itexto