[RESOLVIDO] Quando utilizar um Webservice?

Boa noite galera,
tudo bem?

Sou iniciante na linguagem Java (média de 6 meses … conhecimentos estão em JE22, TomCat, Mysql, Maven e SpringMVC) e estou querendo me “aventurar” no mundo dos webservices. Tenho lido bastante, mas ainda estou com um pouco de dificuldade para responder a pergunta descrita no título, quando preciso utilizar um webservice?

De modo bem amplo, até já consegui compreender. Entendo que em cenários onde terei um website, uma app para Android, um app para iOS e etc … faz sentido construir um webservice que proverá as interações entre as aplicações e o banco de dados. Então, agora sendo bem especifico, em um cenário onde o cliente possui um banco de dados local e quer integrar em uma solução na Nuvem(de maneira bi-direcional), como por exemplo o SalesForce, preciso de um webservice? Porque?

Obrigado.

Abraço.

Um webservice é uma forma de distribuir processamento / remote procedure call

Localmente vc pode fazer “servicos” (classes, componentes, dlls). Mas se vc pode precisar comunicar diferentes componentes que podem ou não estar no mesmo servidor fisico, ou precisa de isolamento/integração de diferentes tecnologias, ai vc tem uma gama de tecnologias ( SOAP, Corba, Rest, EJB, mensagerias, arquivo/batch)

O webservice usa o mecanismo de transporte http(s). Se vc pode acessar com o browser, ta valendo.

Http tem vantagens como os códigos 2xx 3xx e 4xx padronizados, headers, etc. é muito fácil lidar com cache (esse etag mudou? Ô recurso foi modificado desde dia x?), rate limit, mime-type, por exemplo. Fora diferentes formas de autenticação, load balance pode ser trivial, etc. E existem infinidade de bibliotecas pra isso.

Na sua arquitetura os componentes tem que fazer sentido. Por exemplo vc pode ter vários componentes acessando o banco de dados diretamente - integração via database - mas isso gera uma serie de problemas como: precisar duplicar regras de negócios em casa componente. Usar UM componente pra acessar o banco é melhor. Se este componente vai ser um webservice, so os requisitos vao dizer

Agora vc tem php, java, cloud… Talvez falar http seja adequado. se é so java parece que um jar acessando via hibernate é suficiente

Arquitetura distribuida tem N formas de fazer cada uma tem latencias e features diferentes. Vc pode acessar por rest, pode passar por mensageria (rabbitmq) + callback, pode usar o q for preciso

Se fizer sentido. Casa parte distribuida é um sistema pra desenvolver e monitorar.

sobre sua duvida em especifico

Então, agora sendo bem especifico, em um cenário onde o cliente possui um banco de dados local e quer integrar em uma solução na Nuvem(de maneira bi-direcional), como por exemplo o SalesForce, preciso de um webservice? Porque?

o seu banco de dados é uma forma de serializar dados.

em um sistema distribuido cada componente é uma dor de cabeça. vc tem que planejar, nao pode simplesmente mudar tudo, as mudanças tem impacto, o codigo fica distribuido pro N projetos, etc.

o cenario q vc descreveu vc tem um sistema local e um sistema na nuvem e eles precisam conversar. simples assim.

faz sentido colocar um webservice na frente do seu banco pra falar com o Salerforce? SIM. pq sao dois sistemas interagindo

Olá peczenyj!

Muito obrigado pela sua resposta. Me ajudou bastante.

Abraço.