fba9ff69-1dc8-4571-9a84-8cdf55a62931

O surgimento de tecnologias como XML e o advento dos Web Services foram, sem sombra de dúvidas, acontecimentos de fundamental importância do ponto de vista da integração entre sistemas informatizados. Além de possibilitar o compartilhamento de informações em tempo real, tais estruturas transformaram de maneira profunda a atuação de organizações nos mais variados ramos de negócio.

Focando no desenvolvimento de serviços que fazem pleno uso das capacidades do framework .NET, a tecnologia WCF foi concebida com o intuito de fornecer alternativas aos mais variados cenários. Outra preocupação da Microsoft ao disponibilizar este framework foi possibilitar uma fácil aderência das soluções criadas aos princípios da Orientação a Serviços (SOA).

Já a tecnologia Web API permite a implementação simplificada de serviços RESTful, valendo-se para isto de uma arquitetura similar àquela empregada em aplicações ASP.NET MVC. A adoção do modelo REST na construção de serviços vem aumentando consideravelmente nos últimos tempos, sendo favorecida por aspectos como um menor volume dos dados trafegados e o suporte oferecido pelas principais plataformas de desenvolvimento ao uso desta opção.

A ideia com este post é apresentar um comparativo entre as tecnologias WCF (Windows Communication Foundation) e ASP.NET Web API, além de referências que poderão ser úteis para o desenvolvimento de soluções baseadas nestes 2 frameworks.

WCF x Web API: um resumo comparativo

Os diferentes pontos analisados podem ser observados na próxima tabela:

Aspecto sob análise WCF Web API
Visão geral da Arquitetura A implementação de um serviço envolve a especificação de um endereço, de um binding (configurações) e de um contrato (interface descrevendo as operações suportadas). Serviços são implementados como Controllers, nos quais as funcionalidades disponíveis correspondem às Actions. Importante destacar que com o ASP.NET 5, os frameworks MVC e Web API foram unificados em um único modelo chamado MVC 6.
Configuração No arquivo .config de uma aplicação ou ainda, a partir de classes que compõem o próprio framework WCF. Via código-fonte, através de instruções definindo o comportamento de um serviço.
Protocolos suportados HTTP/HTTPS, TCP, P2P, MSMQ (Microsoft Message Queuing), dentre outros. Uma mesma solução WCF pode ser projetada para suportar mais de um protocolo (HTTP/HTTPS e TCP, por exemplo). Somente HTTP/HTTPS.
Formatos suportados SOAP, XML, JSON, binário, MTOM. JSON, XML.
Manipulação de dados Criação de classes convencionais (com a exposição de propriedades públicas) ou Data Contracts (propriedades expostas através do serviço são marcadas como Data Members). Classes convencionais (as propriedades públicas serão automaticamente expostas aos consumidores de um serviço), além de tipos anônimos ou dinâmicos.
Padrões para troca de mensagens Request-Reply, One Way, Duplex. HTTP request/response, com capacidades adicionais através do uso de WebSockets ou SignalR.
Documentação/descrição de um serviço Serviços baseados em SOAP têm sua estrutura detalhada automaticamente, através do uso do padrão WSDL (Web Services Description Language). Geração automática de documentação a partir do site da aplicação ou ainda, através de soluções como Swagger.
Hospedagem Conta com classes para self-host, além da possibilidade de hospedagem em servidores IIS. Hospedagem em servidores IIS. Há a possibilidade ainda de self-host, através do mecanismo conhecido como OWIN (Open Web Interface for .NET).
Serviços RESTful Implementados através de ajustes de configuração, com a opção de uso de JSON e/ou XML. Por default um serviço Web API é RESTful (suportando tanto JSON, quanto XML).
Integração com JavaScript/jQuery Possível através da criação de serviços RESTful. Suportada por default.
Integração com outras plataformas/linguagens Possível através da implementação de serviços SOAP ou RESTful. Possível, já que todo serviço Web API é RESTful.
Segurança Baseada no uso de SSL, além de certificados digitais, NTLM, Kerberos e tokens. SSL e autenticação baseada em tokens são possibilidades.
Open Source Sim Sim

Referências – WCF

Acessando serviços WCF via TCP
http://www.devmedia.com.br/acessando-servicos-wcf-via-tcp/25704

Implementando SOA em projetos WCF
http://www.devmedia.com.br/implementando-soa-no-wcf-revista-net-magazine-92/23082

Integração WCF x jQuery: acessando Web Services via JavaScript
http://www.devmedia.com.br/integracao-wcf-x-jquery-acessando-web-services-via-javascript/28039

Segurança em aplicações WCF
http://www.devmedia.com.br/seguranca-em-wcf-utilizando-asp-net-membership-revista-net-magazine-89/22296

WCF x REST: uma alternativa para serviços
http://www.devmedia.com.br/wcf-x-rest-uma-alternativa-para-servicos/28426

Windows Communication Foundation
https://msdn.microsoft.com/en-us/library/dd456779(v=vs.110).aspx

Referências – Web API

ASP.NET Web API
http://www.asp.net/web-api

ASP.NET Web API: Implementando serviços RESTful
http://www.devmedia.com.br/asp-net-web-api-implementando-servicos-restful/31024

Cache em serviços Web API
http://social.technet.microsoft.com/wiki/pt-br/contents/articles/31681.cache-em-servicos-web-api.aspx

Compressão em serviços Web API – Parte 1
http://netcoders.com.br/compressao-web-api/

Compressão em serviços Web API – Parte 2
http://netcoders.com.br/compressao-web-api-parte-2/

Integração Web API x jQuery: acessando serviços RESTful via JavaScript
http://www.devmedia.com.br/integracao-web-api-x-jquery-acessando-servicos-restful-via-javascript/31332

Métodos com nomes customizados no ASP.NET Web API
http://netcoders.com.br/metodos-nomes-customizados-asp-net-web-api/

Retornando objetos dinâmicos a partir de serviços Web API
http://social.technet.microsoft.com/wiki/pt-br/contents/articles/30833.retornando-objetos-dinamicos-a-partir-de-servicos-web-api.aspx

Swagger
http://swagger.io/

Visual Studio 2015: Implementando uma aplicação Web API
http://social.technet.microsoft.com/wiki/pt-br/contents/articles/30528.visual-studio-2015-implementando-uma-aplicacao-web-api.aspx

Outras referências sobre serviços

JSON x .NET: Como consumir dados em aplicações
http://www.devmedia.com.br/json-net-como-consumir-dados-em-aplicacoes/29818

Princípios de Design de Serviços
http://www.devmedia.com.br/principios-de-design-de-servicos-revista-net-magazine-93/23383

SOA x OO
http://www.devmedia.com.br/soa-x-oo-revista-net-magazine-95/24061

Utilitário Fiddler: Monitoramento de Web Services
http://www.devmedia.com.br/utilitario-fiddler-monitoramento-de-web-services/31274

Conclusão

Procurei com este artigo efetuar uma comparação sucinta entre as tecnologias WCF e Web API, levando em conta questões comuns do dia-a-dia de desenvolvedores .NET. Muito embora haja uma forte tendência para a implementação de soluções RESTful com Web API, a tecnologia WCF ainda terá seu espaço em projetos que envolvam o uso de outros protocolos (como TCP, P2P ou MSMQ).

Gostaria também de agradecer ao Rafael Carvalho, por sugerir a revisão de alguns pontos relativos à utilização de WCF.

Espero que o conteúdo aqui apresentado tenha sido útil.

Até uma próxima oportunidade!

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Comentários

comentarios