<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.caelum.com.br &#187; cejug</title>
	<atom:link href="http://blog.caelum.com.br/tag/cejug/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caelum.com.br</link>
	<description>blog dos desenvolvedores da Caelum</description>
	<lastBuildDate>Thu, 09 Feb 2012 13:04:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Os 7 hábitos dos desenvolvedores de WebServices altamente eficazes</title>
		<link>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/</link>
		<comments>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 10:38:30 +0000</pubDate>
		<dc:creator>Paulo Silveira</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[ceara]]></category>
		<category><![CDATA[cejug]]></category>
		<category><![CDATA[fj-31]]></category>
		<category><![CDATA[fj-91]]></category>
		<category><![CDATA[fortaleza]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[pox]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[soap]]></category>
		<category><![CDATA[webservices]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.caelum.com.br/2008/02/18/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/</guid>
		<description><![CDATA[Esta semana tive o prazer de palestrar no Café Com Tapioca, evento do CeJUG realizado em Fortaleza. Estavam presentes dois conhecidos evangelistas da Sun: Reggie Hutcherson e Simon Ritter. O agradecimento fica ao Rafael Carneiro, do PortalJava e do CeJUG, pela organização geral do evento. Agradeço também à equipe do grupo Fortes pela minha vinda <a href="http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/#more-186'" class="more-link">more &#187;</a>]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://farm3.static.flickr.com/2018/2261621995_814a044b52_m.jpg" width="240" />
		</p><p>Esta semana tive o prazer de palestrar no <a href="http://www.cejug.org/display/cejug/2008/02/03/Recheio+da+Tapioca+de+Coco">Café Com Tapioca</a>, evento do <a href="http://www.cejug.org/">CeJUG</a> realizado em Fortaleza. Estavam presentes dois conhecidos evangelistas da Sun: Reggie Hutcherson e <a href="http://blogs.sun.com/simonri/">Simon Ritter</a>.</p>
<p><center><br />
<a href="http://www.flickr.com/photos/silveira/2261620995/" title="DSC01766 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2045/2261620995_19718597e1_m.jpg" width="240" height="180" alt="DSC01766" /></a> <a href="http://www.flickr.com/photos/silveira/2261621995/" title="DSC01773 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2018/2261621995_814a044b52_m.jpg" width="240" height="180" alt="DSC01773" /></a><br />
<a href="http://www.flickr.com/photos/silveira/2261621465/" title="DSC01770 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2403/2261621465_02e8082782_m.jpg" width="240" height="180" alt="DSC01770" /></a> <a href="http://www.flickr.com/photos/silveira/2261620513/" title="DSC01763 by Paulo Silveira, on Flickr"><img src="http://farm3.static.flickr.com/2403/2261620513_67bbd9b9b6_m.jpg" width="240" height="180" alt="DSC01763" /></a><br />
</center></p>
<p>O agradecimento fica ao <a href="http://www.rafaelcarneiro.org/blog/">Rafael Carneiro</a>, do PortalJava e do CeJUG, pela organização geral do evento. Agradeço também à equipe do grupo Fortes pela minha vinda ao Ceará: ao Clavius Tales, <a href="http://www.igocoelho.com.br/">Igo Coelho</a>, Antônio Israel, <a href="http://blog.ronaldomoreira.com/">Ronaldo Moreira</a>, <a href="http://tiagomoraes.blogspot.com/">Tiago Moraes</a>, <a href="http://thinkabouttests.blogspot.com/">Rodrigo Maia</a> e tantos outros. Vale reparar como a comunidade java cearense é ativa nos blogs! Nesse sábado também ministrei um<a href="http://www.cejug.org/pages/viewpage.action?pageId=17530896">workshop sobre Arquitetura e Design Java</a> aqui em Fortaleza.</p>
<p>Durante esses dias aqui, muitas pessoas perguntaram bastante sobre webservices: em especial JSON e Rest. Compilei alguns dos pontos que foram recorrentes nas discussões e considerados como boas práticas:</p>
<p><strong>Cuidado com a granularidade</strong> &#8211; a granularidade do seu serviço não pode ser muito fina, caso contrário seus seviços sofrerão dos mesmos problemas que o EntityBean do EJB2 exposto remotamente: uma enorme quantidade de requisições serão disparadas para executar pequenas tarefas, como getters! Seus serviços devem realizar uma quantidade significativa de tarefas, para evitar um número alto de roundtrips!</p>
<p><strong>Exponha serviços, não dados</strong> &#8211; é comum ouvir a frase &#8220;<em>Vou criar webservices para expor os meus dados</em>&#8220;. O grande perigo aqui é deixar toda a lógica de negócio na mão do cliente, o que descentralizará seu serviço e forçará o cliente a realizar muitas requisições ao servidor. Devemos expor serviços, e não dados em sua forma mais crua.</p>
<p><strong>Nunca parsear WSDL/SOAP manualmente</strong> &#8211; antes das ferramentas que trabalham com webservices terem atingido sua maturidade, era muito comum ver por aí as pessoas gerando o SOAP manualmente, através de bibliotecas XML ou às vezes até mesmo concatenando <code>String</code> com o uso de <code>StringBuffer</code>! O SOAP é o protocolo de comunicação, e assim como quando você usa RMI/CORBA e você não enxerga absolutamente nada do JRMP/IIOP, você nunca deveria ter contato direto com o protocolo de comunicação! O SOAP e o WSDL devem ser utilizados por ferramentas, e não pela sua própria aplicação. Hoje em dia qualquer ferramenta como o Apache Axis, Apache CXF, ou mesmo o <a href="http://blog.caelum.com.br/2007/07/11/webservices-sem-servidor-de-aplicacao-no-java-6/">wsimport</a>, que já vem no JDK 6, auxilia nossa tarefa de gerar Stubs que sabem trabalhar com o SOAP, sem que você nem mesmo precise ve-lo um dia. Se você está usando um servidor de aplicação, <a href="http://blog.caelum.com.br/2006/08/17/criando-um-webservice-com-a-jsr-181/">esta tarefa é ainda mais fácil</a>, até mesmo para fazer o deploy do serviço.</p>
<p><strong>Não enviar XML dentro de XML</strong> &#8211; outra prática comumente encontrada em aplicações antigas que usam Webservices: dentro do SOAP é enviado um outro XML como um dos parâmetros, então mesmo usando ferramentas para gerar os stubs você fica com uma <code>String</code> que dentro dela há um XML e este precisa ser parseado por sua própria aplicação. Isto é uma má interpretação do conceito que &#8220;<em>Webservices é comunicação via XML</em>&#8220;. Concordo que em alguns raros casos isso possa fazer sentido, como por exemplo se o valor do que você quer realmente é um outro XML, mas no geral isto é feito sem necessidade nenhuma, como é o famoso caso do <a href="http://www.correios.com.br/parcerias/cep/office2003/">WebService MS Office dos Correios do Brasil</a>.</p>
<p><strong>Considerar protocolo binário</strong> &#8211;  são muitas as reclamações de que o SOAP acaba sendo um XML grande e pesado para ser transportado. Hoje em dia há muitas formas de contornar isso, como o uso do padrão <a href="http://java.sun.com/developer/technicalArticles/xml/fastinfoset/">Fast InfoSet</a> para compressão do XML. Uma outra forma seria o uso de protocolos proprietários, como o <a href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=3&#038;url=http%3A%2F%2Fdownload.macromedia.com%2Fpub%2Flabs%2Famf%2Famf3_spec_121207.pdf&#038;ei=yz-2R4r1LKXaefWTuPAM&#038;usg=AFQjCNEpZD9SPSQD-pukeDrZduoOFTuhow&#038;sig2=ikzhe6DLaBpXOBmP4ggL6A">AMF</a> da Adobe, que é uma opção comum no uso do Flex.</p>
<p><strong>Considerar não usar WSDL/SOAP</strong> &#8211; pelas diversas críticas a burocracia exagerada do WSDL/SOAP, muitas pessoas estão optando por usar algo mais simples, como o bom e velho XML (POX), JSON ou até mesmo uma forma qualquer de estruturar dados. Caso você precise de simplicidade e velocidade no desenvolvimento com outras plataformas, essa é uma boa opção. <strong>Cuidado</strong>: muita gente está considerando qualquer webservice que não use WSDL/SOAP como sendo REST. Os <a href="http://www.flickr.com/services/api/">webservices do flickr</a> e da <a href="http://aws.amazon.com/">Amazon</a> são um bom exemplo: tudo é via GET (as vezes POST) e não há recurso identificado pela URI. Na verdade ele usa apenas um esquema HTTP+XML (POX), <a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=7a2f3df2-83f7-471b-bbe6-2d8462060263/">considerado apenas em parte como RESTful</a>. Você pode ver que esses webservices são muito diferentes do modelo RESTful do <a href="http://tools.ietf.org/html/rfc5023">Atom Publishing Protocol</a>. <a href="http://www.xml.com/pub/a/2004/12/01/restful-web.html">Criar um protocolo realmente REST como este</a> não é fácil: porém teremos esse trabalho bastante simplificado com a  <a href="http://jcp.org/en/jsr/detail?id=311 ">JAX-RS (JSR 311)</a>, e já podemos ver isso através do <a href="https://jersey.dev.java.net/">Glassfish Jersey</a>.</p>
<p><strong>Considerar usar JSON</strong> &#8211; <a href="http://www.json.org/">JSON</a> é um formato que tem ganho muita popularidade. Não é a toa: além de ser um simples para debugar, parsear e gerar, com javascript basta fazer um <code>eval</code> em um resultado JSON que ele já estará pronto para usar. É uma excelente opção para o consumo via AJAX e criação de mashups. JSON tem ganho bastante força na comunidade Flex, tornando-o uma ótima opção como ponte entre Flex e Java. A escolha por JSON abre portas para muitos tipos diferentes de clientes, e em especial o browser, que é nossa plataforma global. </p>
<p><em>Update</em>: numa abordagem mais REST, a granularidade pode ser sim fina (e focada nos dados), tomando cuidado para deixar isso explícito, e sempre atento aos headers que possibilitarão o cache. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-de-webservices-altamente-eficazes/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

