[REST] Dúvidas sobre como arquitetar uma solução

Bom dia pessoal, tudo bem?

Eu gostaria de trocar umas figurinhas sobre RESTful.

Penso em desenvolver WS com essa arquitetura, mas ainda estou me acostumando com esse paradigma. A minha intenção é, à partir de schemas que representam os XMLs de entrada e resposta (WSDL?) construir os serviços.

Dei uma estudada sobre um FMK que implementa a JAX-RS (RestEasy). O que acham dele?

É mais vantajoso usar essa abordagem do que gerar um WSDL? (Não preciso de mecanismos de segurança e conservação do estado em meus serviços)

Grande abraço.

Na verdade, apesar dos xiitas de REST não gostarem da idéia, ele é perfeitamente compatível com WSDL. REST é uma alternativa a SOAP, não ao contrato.

Quanto à sua dúvida, dado o que eu falei acima, é perfeitamente válido: se em algum momento, você precisar da flexibilidade do REST, você usa diretamente. Se você precisar anexar isso com alguma ferramenta que precise de contrato (ou até pra gerar um client pro serviço, de um jeito fácil), você usa o contrato.

Na verdade, desse ponto de vista, é praticamente indiferente se você usa SOAP ou REST. A diferença deles, falando na prática, é o Header do SOAP, que pode possuir informações como usuário e senha, tokens de autenticação e até metadados do negócio com o qual você está trabalhando (ressaltando este último ponto, REST não tem a capacidade de passar isso como metadados, ou seja, se você precisar de metadados específicos, tem que colocar no corpo da própria requisição).

Enfim… se você puder dar mais informações a respeito da sua necessidade, seria perfeito!

EDIT: Minha opinião pessoal: não gosto do RestEasy (já tentei usar uma vez e não achei exatamente Easy…). Você poderia dar uma chance pro Restfulie, o que acha?

[]´s

Obrigado pela resposta.

Vamos lá. Estou definindo alguns serviços (modelando) e, nesse sentido, pensei em fazer (ou não?) o WSDL para me ajudar nas implementações.
Primeiramente, construí os XSDs que vão ser a base para validar (com os Analistas de Negócio) o que deve ser a entrada e a saída do WS.

Posto o que vc disse, gostaria de saber qual é o ‘gerador’ de cliente para a arquitetura REST.

Sobre o RestEasy, dei uma breve olhada na documentação e senti que não simpatizei muito, vou olhar esse que mencinou.

Mas é isso aí, vamos conversar melhor que parece que vou sair com uma boa solução baseada em REST!

Abraço

O próprio JAX-WS pode gerar o seu cliente! Na verdade, JAX-WS não é restrito a SOAP, e isso vale tanto para o lado cliente como para o lado servidor. Você também pode tentar alternativas - o próprio Restfulie tem uma API para tradução dos resultados em objetos, mas não tenho certeza se ele tem algum módulo de geração de clients. Aliás, eu mesmo estou desenvolvendo um framework de clients para serviços, mas como o projeto ainda está um pouco longe de produzir um beta, nem digo nada.

Vale lembrar que o Restfulie é uma iniciativa da Caelum; normalmente, o pessoal de lá dá umas respostas bastante rápidas a respeito do uso do framework aqui no GUJ mesmo, lá na seção de Frameworks Brasileiros.

Ah, se você puder dizer quais as suas necessidades no projeto, eu agradeceria - eu poderia ver se não estou esquecendo de nada no meu framework…

[]´s

[quote=asaudate]
Vale lembrar que o Restfulie é uma iniciativa da Caelum; normalmente, o pessoal de lá dá umas respostas bastante rápidas a respeito do uso do framework aqui no GUJ mesmo, lá na seção de Frameworks Brasileiros.

Ah, se você puder dizer quais as suas necessidades no projeto, eu agradeceria - eu poderia ver se não estou esquecendo de nada no meu framework…
[]´s[/quote]
Eu ainda preciso elencar alguns pontos e discutir quais são as premissas para a construção desse serviço, por exemplo: trabalho com produtos Oracle, então, ainda não sei se o meu projeto pode adicionar mais bibliotecas de terceiros para fazer algo que as bibliotecas do Weblogic já fazem, entende?

A minha necessidade é bem simples: construir serviços sem se preocupar com o estado e sem usar autenticação/autorização. deixar exposto para as aplicações que quiserem consumir e só.

Enfim, estou estudando se REST pode ser uma alternativa, se vai suprir a minha necessidade, sendo os consumidores em Java ou não.

Uma outra questão quase off-topic, como vc faz para agregar resusabilidade de Schemas?

[quote=felipeguerra]Eu ainda preciso elencar alguns pontos e discutir quais são as premissas para a construção desse serviço, por exemplo: trabalho com produtos Oracle, então, ainda não sei se o meu projeto pode adicionar mais bibliotecas de terceiros para fazer algo que as bibliotecas do Weblogic já fazem, entende?
[/quote]

Não conheço o tão bem o Weblogic a ponto de te dar uma resposta afirmativa pra isso, mas tenho quase certeza que sim… posto que os serviços precisam usar uma implementação para uma especificação (no caso, a JAX-RS) e o Weblogic possui suporte a bibliotecas externas, não vejo como ele “bloquearia” isso. Mas é questão de pesquisa.

Quanto à reusabilidade de schemas, é questão apenas de deixar todos num mesmo lugar! O grande problema é que todos estamos acostumados a desenvolver a implementação dos serviços antes do contrato, o que acaba gerando dor de cabeça mais tarde… ou seja, se desenvolvermos o contrato antes, e referenciarmos os schemas que já existem, problema resolvido. Esse é um ponto, outro ponto é garantir que estes schemas sejam reusáveis, certo? Uma tática seria usar o chamado modelo canônico, ou seja, padronizar os dados que vão trafegar na sua aplicação. Outra seria deixar os seus dados razoavelmente espalhados (ou seja, colocar uma entidade em um xsd, outra em outro…) e ir “compondo” usando <xsd:import … />.

Para desenvolver contract-first, você tem uma infinidade de maneiras… eu expús no meu blog como fazer pra desenvolver um, mas o drawback é que o serviço vai passar a lidar com XML puro, ao invés de objetos. Outra maneira seria colocar o contrato na pasta META-INF/wsdl na pasta do ejb-jar (isso funciona no JBoss, não sei se funciona no Weblogic). Outra maneira seria usar o Spring (como visto aqui). Enfim… tem milhares de maneiras, basta fazer uma consulta por “contract first Java” no Google, OK?

[]´s!

Eu quis dizer que há um conjunto de bibliotecas utilizadas pelos projetos já existentes (uma quantidade razoável), então, ainda não foi definido se é para se trabalhar com o que tem.

Ah sim, existe um projeto só contendo os schemas e que deve ser utilizado pelos outros projetos.
E eu estou definindo o contrato primeiro, a implementação pra mim é algo que deriva disso. Ainda tenho dúvidas mais específicas, por exemplo, sou preguiçoso e não gosto de escrever código caso exista uma ferramenta que faça isso corretamente, como eu importo XSDs ao meu WSDL?

Lidar com XML puro, trouxe dores de cabeça?

[quote=asaudate]
Outra maneira seria colocar o contrato na pasta META-INF/wsdl na pasta do ejb-jar (isso funciona no JBoss, não sei se funciona no Weblogic).
[]´s![/quote]
Deve ter algo similar.

Valeu!

Não conheço nada nesse sentido, lamento…

No meu caso, não, porque sempre que eu usei esse recurso ou foi quando precisei simplesmente repassar o XML (coisas do tipo: logar o XML, repassar o XML com alguma coisa a mais, etc…) ou quando precisei de algo com tanta flexibilidade que precisava executar um XPath de maneira dinâmica (coisas realmente bastaaaante difíceis de acontecer na maioria dos projetos!).

Pode ser que não seja exatamente problemático, mas lidar com objetos é quase sempre melhor, certo?

[]´s