O que é Web service?
Web Service é um conjunto de métodos que podem ser utilizadas usando os protocolos padrão da Web, como por exemplo HTTP, HTTPS, FTP, FTPS dentre outros. Ele transfere dados via protocolos de comunicação, que são definidos de acordo com os tipos de dados. Não só isso, mas também, possibilita a integração entre aplicações independentemente da plataforma, linguagem de programação e paradigma.
Portanto o serviço web é uma aplicação dispobilizada via HTTP ou HTTPS, na intranet ou internet que através de uma URL pode ser acessado por aplicativos clientes usando protocolos.
Como funciona ?

Se são linguagens diferentes, como conseguem comunicar?
Para que a comunicação seja possível é necessário uma linguagem intermédia que faça a garantia da comunicação entre a linguagem do Web service e o sistema que está requisitando o serviço web. Para isso, existem protocolos de comunicação como o SOAP (Simple Object Access Protocol) e estilos de arquitetura de software que definem um conjunto de restrições a serem usadas para a criação de web services como o REST (Representational State Transfer).
SOAP x REST
REST versus SOAP. Já é um problema há algum tempo. E, na verdade, são apenas duas respostas para a mesma pergunta: como acessar serviços da web.
- SOAP
(Simple Object Access Protocol) é um protocolo de acesso a serviços da Web baseado em padrões que existe há muito tempo. Desenvolvido originalmente pela Microsoft, o SOAP não é tão simples quanto a sigla sugere. SOAP depende exclusivamente de XML para fornecer serviços de mensagens. A Microsoft desenvolveu originalmente o SOAP para substituir tecnologias mais antigas que não funcionam bem na Internet, como o Distributed Component Object Model (DCOM) e a Common Object Request Broker Architecture (CORBA). Essas tecnologias falham porque dependem de mensagens binárias. A mensagem XML que o SOAP emprega funciona melhor na Internet.
- REST
REST é a abreviatura de Representational State Transfer, que em português significa “Transferência de Estado Representacional”. REST é uma de arquitetura de software, que possui algumas boas práticas, definidas por Roy T. Fielding, para criação de aplicações web. Ele procura corrigir os problemas com o SOAP e fornecer um método mais simples de acessar serviços da web. REST oferece uma alternativa mais leve. Ao contrário do que muitos imaginam, REST não é necessariamente um protocolo de comunicação. REST é um estilo de arquitetura, ou seja, uma série de restrições que devem ser seguidas no processo de criação de um web service.
RESTful seria, então, a API que está de acordo com todas as restrições definidas por Roy.
E é aí que a maior parte das APIs RESTful caem por terra, pois dificilmente atendem todos os requisitos.
Os principais critérios para uma API ser RESTful são:
- Uniform Interface;
- Stateless;
- Cacheable;
- Client-Server;
- Layered system.
Sem seguir todas estas restrições, sua API não será RESTful, será apenas mais uma implementação RPC em cima do protocolo HTTP. Observação: RPC (Remote Procedure Call) define um protocolo para execução remota de procedures em computadores ligados em rede. Dentre todas elas, existe uma restrição que é geralmente menos atendida, a interface uniforme (Uniform interface). Mas, o que significa isso?
Alcançar uma interface uniforme significa atingir mais alguns critérios:
- Resource-based: Em contraposição ao comum RPC, REST tenta lidar com recursos invés de métodos. Caso você esteja criando um post chamando /posts/create?title=lorem você não está seguindo o padrão REST, devido ao tratamento de métodos na url. Nesse cenário, o ideal seria fazer uma chamada POST para a coleção de /posts.
- Manipulation of resources through representations: O cliente acessa os recursos através de uma representação (JSON, XML, etc.), que contenha informação suficiente para manipular este no servidor, desde que tenha permissão pra isso.
- Self-descriptive Messages: As respostas são auto-descritivas, incluindo informação suficiente para que o cliente saiba como utilizá-las. Usando HTTP, por exemplo, é necessário uma propriedade "Content-Type incluída no cabeçalho da requisição (Header) para descrever que tipo de representação é utilizada.
Para que serve ?
O único e exclusivo objetivo é:
Interoperabilidade entre sistemas independentemente de plataforma de desenvolvimento, execução, provedor de tecnologia, linguagem e paradigma de desenvolvimento.
Interoperabilidade é a capacidade de um sistema informatizado ou não de se comunicar de forma transparente ou o mais próximo disso com outro sistema semelhante ou não.
O que há de mais novo sobre Web service?
GraphQL é uma linguagem de consulta de dados em grafos, desenvolvido pelo Facebook, sua prioridade é fornecer exatamente os dados que os clientes solicitam. É uma alternativa à estrutura REST, pois permite aos desenvolvedores contruir aplicações que extraem os dados de várias fontes em uma única chamada de API.
Vantagens:
- As chamadas do GraphQL são processadas em uma única transmissão com ida e volta. Os clientes recebem exatamente o que solicitam, sem mais dados do que o necessário (overfetching).
- Os tipos de dados são bem definidos, o que reduz as falhas de comunicação entre o cliente e o servidor.
- Há muitas extensões open source disponíveis para o GraphQL e várias oferecem funcionalidades que não estão presentes nas APIs REST.
- O GraphQL não determina uma arquitetura de aplicação específica. Ele pode ser introduzido em uma API REST existente e funciona com as ferramentas de gerenciamento de API que você já tem.
Desvantagens:
- Desenvolvedores acostumados com as APIs REST terão que enfrentar uma certa curva de aprendizado com o GraphQL.
- O armazenamento em cache é mais complexo do que na arquitetura REST.
- O GraphQL direciona muito do trabalho de consulta de dados para o servidor, o que aumenta a complexidade para os desenvolvedores.
Um vídeo com maiores explicações:
https://www.youtube.com/watch?v=LTiyUd74mZQ&t=3s
Referências
https://www.opensoft.pt/web-service/https://www.devmedia.com.br/web-services/2873 https://www.gta.ufrj.br/grad/05_1/webservices/definicao.htm https://www.udemy.com/course/introducao-web-services/learn/lecture/13235566#overview https://smartbear.com/blog/soap-vs-rest-whats-the-difference/ https://www.redhat.com/pt-br/topics/api/what-is-graphql http://penta.ufrgs.br/rc952/trab1/rpc.html https://blog.geekhunter.com.br/sua-api-nao-e-restful-entenda-por-que/ https://www.redhat.com/pt-br/topics/integration/whats-the-difference-between-soap-rest