> For the complete documentation index, see [llms.txt](https://pauloricmarinho.gitbook.io/desenvolvimento/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://pauloricmarinho.gitbook.io/desenvolvimento/webservices/web-services-and-soa.md).

# Web Services e Arquitetura Orientada a Serviços

Os Web Services representam um padrão de transporte, interface e dados entre consumidores e provedores de serviço, podem ser definidos como programas modulares que visam garantir a interoperabilidade de um serviço.&#x20;

A tecnologia de Web Services é usada como uma forma de compartilhar aplicações usando módulos que são descritos, publicados e invocados através de uma rede de forma transparente. Os Web Services se baseiam no padrão arquitetural **SOA (Service-Oriented Architecture)**.

**Service-Oriented Architecture (SOA)**

O padrão arquitetural SOA tem como princípio que as funcionalidades implementadas de por uma aplicação sejam disponibilizadas na forma  de serviços. O SOA faz a definição de uma infraestrutura para que aplicações troquem dados e participem de processo de negócio independente dos sistemas operacionais ou linguagens de programação utilizadas para suas implementações. No SOA há a interação de 3 elementos:

* **Service Provider** (provedor de serviço):  Entidade responsável por criar o serviço web, descreve o serviço em um formato padrão compreensível por qualquer cliente e publica os detalhes sobre o serviço em um registro central que esteja publicamente disponível para todos os interessados;
* **Service Broker/Registry** (registro de serviço): é a localização central onde o provedor de serviço pode relacionar seu serviço Web e, no qual um cliente de Serviços Web pode realizar pesquisas sobre serviços;
* **Service Requester/User** (cliente do serviço): é o elemento que solicita o serviço a um service broker que, por sua vez, encontra um provedor de serviços disponível e repassa o pedido para esse provedor.

![Arquitetura SOA](/files/-MIyMcjtckjHGj02a-93)

**Protocolo SOAP**

O protocolo SOAP (Simple Object Accesss Protocol) é o responsável pela troca de informação, dados e acesso a aplicações remotas, baseado em XML e mensagens de transporte HTTP, sendo assim realiza a troca de informações de forma independente de plataforma e/ou linguagens de programação.

**WSDL (Web Services Description Language)**

O Web Services Description Language (WSDL) é uma linguagem baseada em XML que permite com que os Web Services disponibilizem acesso as suas informações de uma forma padronizada e organizada através de interfaces.&#x20;

A principal função do WSDL é disponibilizar para o cliente um serviço e suas funções disponíveis independentemente de plataforma ou linguagem, fazendo assim com que uma aplicação Java se comunique com uma aplicação Perl ou com qualquer outra linguagem.

**UDDI (Universal Description Discovery and Integration)**

O Universal Description Discovery and Integration (UDDI), em português: Integração e Descoberta de Descrição Universal é uma forma de publicar WSDLs para que os clientes de um determinado serviço possam descobri-los e consumir os serviços que os mesmos disponibilizam. O UDDI descreve um conjunto de definições que descrevem os formatos de dados usados e como o mesmo pode ser acessado. A sua arquitetura técnica se divide em três partes:

**UDDI Business Registry:** É uma implementação operacional completa da especificação UDDI, que possibilita a qualquer cliente buscar dados UDDI existentes e possibilita as empresas se registrarem  bem como registram seus serviços.

**Modelo de informação UDDI:** É um XML Schema usado para a descrição de empresas e seus respectivos Serviços Web.

**API UDDI:** A API UDDI é uma API baseada em SOAP para buscar e publicar dados UDDI.

**Princípios de Projetos de Serviços**

| Princípios                   | **Descrição**                                                                                                                                                                                 |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Contrato de Serviço          | Os serviços expressam seus propósitos e capacidades por meio de um contrato em um ou mais documentos de descrição de serviços.                                                                |
| Serviço de Baixo Acoplamento | Os serviços devem minimizar dependências e só ter ciências deles próprios                                                                                                                     |
| Abstração do Serviço         | Os serviços só devem publicar o contrato e esconder dos clientes a sua lógica interna.                                                                                                        |
| Reusabilidade do Serviço     | Os serviços podem ser reutilizados por outros serviços para criação de webservices menos refinados.                                                                                           |
| Autonomia do Serviço         | Os serviços controlam seu ambiente e recursos subjacentes para que permaneçam independentes, sendo assim se torna consistentes e confiáveis.                                                  |
| Serviço sem Estado           | Os serviços transferem a responsabilidade do gerenciamento de estado para os consumidores, desde que isso não cause conflito com o que é gerenciado pela autonomia do serviço.                |
| Descoberta do Serviço        | Os serviços são descritos como metadados para que seja possível a sua descoberta e para que o contrato de serviço possa ser compreendido, permitindo que eles sejam recursos (re)utilizáveis. |
| Composição do Serviço        | Os serviços podem ser compostos dentro de serviços menos refinados, independente do tamanho e complexidade da composição em que eles se encaixam.                                             |

{% hint style="info" %}
*SOA, SOAP, WSDL, UDDI, HTTP, REST, Web Services*
{% endhint %}
