ARQUITETURA DE SERVIÇOS REST EM JAVA E IMPLEMENTAÇÃO MODULARES DE SOFTWARES UFMT / Cuiabá-MT Igor Maldonado Floôr – [email protected] No mundo atual a utilização de serviços(arquitetura orientada à serviços – SOA) está cada vez maior, tendo em vista o grande numero de possibilidades que a implementação destes dá para um sistema. Com a utilização de serviços torna possível transmitir informações por meio da web(requisições HTTP). Mesmo falando de serviços, existem dois enfoques no termo arquitetura orientada à serviços, dentre estes dois ramos de serviços, um deles é o SOAP e o outro é o REST, estes modelos possuem suas particularidades, vantagens e desvantagens. O objetivo deste trabalho é implementar um serviço REST obedecendo as suas características de arquitetura utilizando a linguagem de programação JAVA. Este estudo serve como base para sistemas de pesquisa que desejam ter seus dados disponíveis e fracamente acoplados ao sistema, desta forma torna-se mais simples grupos de pesquisa trabalharem em conjunto trocando dados na forma de requisições HTTP. Todos estes serviços trabalharão em conjunto, coordenados por um Barramento de serviços. Este trabalho foi realizado de maneira planejada, no início do projeto tinha- se as necessidades que deveriam ser supridas pela pesquisa e essas necessidades foram sendo supridas em sequencia, das mais simples para as mais complexas. Foi muito utilizado para ganho de conhecimento durante o processo de aprendizagens, artigos acadêmicos, papers, resumos, Trabalhos de conclusão de curso e livros, assim como também usei como base a tese de doutorado de Roy Fielding, idealizador da arquitetura de serviços Rest. Participaram deste projeto alunos do grupo de pesquisa GAIIA que pesquisam na área de busca de similaridade textual, alunos deste mesmo grupo que visam a implementação de um software para análise de patentes. Utilizei algumas API’s em Java para codificação dos resultados, utilizei o framework Eclipse para programação. Foram utilizados os servidores do Instituto de Computação para hospedagem dos serviços para análise dos resultados. Os resultados que obtive até o momento não são completos, pois eu apenas terei os resultados finais quando completar todos os objetivos. Até o momento eu criei serviços que representam os módulos de um sistema real e que trabalham de maneira conjunta. Desta forma consegui modularizar o sistema para que proporcionasse para o mesmo um grande desacoplamento, porém com essa modularização eu ganhei um pequeno overhead de dados durante a comunicação entre os módulos, pois o que antes era uma conexão de banco de dados por exemplo, que resultava uma grande quantidade de dados, com a modularização, tem que enviar o mesmo número de dados por requisições HTTP, o que representa um fluxo maior de dados e também uma necessidade de tempo maior para envio do mesmo conjunto de dados. Portanto chega-se a conclusão de que embora nem todos os objetivos tenham sido alcançados é possível notar um ganho de produtividade no desenvolvimento do sistema, modularizando-se as funções básicas do mesmo, assim como também ganha-se maior autonomia para cada grupo de desenvolvimento do software, pois após a API de comunicação ter sido desenvolvida cada módulo precisa apenas responder àquela API. Porém com esses ganhos, vem também um overhead de comunicação entre os módulos, pois uma comunicação que antes era nativa em bytes, agora necessita ser feita por meio de requisições HTTP, onde estas requisições possuem dados adicionais. Tendo em vista estas vantagens e desvantagens, foi-se decidido no projeto que módulos que necessitassem de grande fluxo de dados de entra e/ou saída não se comunicariam por meio requisições HTTP, e sim nativamente com conexões específicas, pois do contrário seria criado um gargalo de dados que ao invés de auxiliar o projeto poderia torna-lo extremamente lento. Cito como exemplo a persistência de dados, que é algo com um fluxo muito grande de dados. Vale ressaltar que caso o overhead criado não seja um problema pois a capacidade de transmissão e processamento de dados seja suficiente, não há problema em adotar a modularização. Palaras-chave: DESENVOLVIMENTO,SOFTWARE,SOA,ESCALABILIDADE,ACOPLAMENTO Trabalho de Conclusão de curso