<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.4" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: REST : Mais uma nova McOferta</title>
	<link>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/</link>
	<description>Edgar Silva</description>
	<pubDate>Wed, 20 Aug 2008 06:52:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.4</generator>

	<item>
		<title>by: Edgar Silva</title>
		<link>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7245</link>
		<pubDate>Mon, 14 Apr 2008 03:20:09 +0000</pubDate>
		<guid>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7245</guid>
					<description>Oi Bruno,

Muito bons seus comentários, aprendi um bocado, de fato o servico pode ser query/atributo1/atributo2/from/{entidade} no caso /o * é para deixar proxima do contexto de linguagem de SQLs, JPA-QL e afins. 

A minha Java Magazine chegou hj no meu apto, eu nao tive tempo de ler ainda pq tive q viajar hj de noite, estou em Goiania :), mas assim que eu voltar vou dar uma lida com certeza. 

Abracos
Edgar</description>
		<content:encoded><![CDATA[<p>Oi Bruno,</p>
<p>Muito bons seus comentários, aprendi um bocado, de fato o servico pode ser query/atributo1/atributo2/from/{entidade} no caso /o * é para deixar proxima do contexto de linguagem de SQLs, JPA-QL e afins. </p>
<p>A minha Java Magazine chegou hj no meu apto, eu nao tive tempo de ler ainda pq tive q viajar hj de noite, estou em Goiania <img src='http://edgarsilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , mas assim que eu voltar vou dar uma lida com certeza. </p>
<p>Abracos<br />
Edgar
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Bruno Pereira</title>
		<link>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7244</link>
		<pubDate>Sun, 13 Apr 2008 12:30:27 +0000</pubDate>
		<guid>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7244</guid>
					<description>Oi Edgar, realmente temos total liberdade para moldar o protocolo de comunicação REST de acordo com as nossas preferências. Isto é muito bom e traz bastante liberdade. 

A única "ressalva" quanto a isso é que se implementarmos um protocolo de comunicação que fuja muito das principais boas práticas, os clientes que precisarem consumir os serviços terão um pouco mais de dificuldade para conhecer o seu protocolo.

Sobre o seu serviço, de fato eu me enganei. Eu não tinha visto o serviço como uma query, mas como uma URI de acesso ao recurso "vertical". Se o serviço é Query, realmente ficou bem mais adequado do que eu havia comentado. 

Só uma pequena observação: eu acho o "*" um pouco redundante na URI /rest/query/*/from/verticais. Eu acho que fica melhor você colocar /rest/query/from/verticais a não ser que você tenha planos de usar esta estrutura para pegar atributos individuais. Se você pretende ter uma URI /rest/query/*/from/verticais e outra URI /rest/query/id/from/verticais, aí faz sentido manter o *. Caso contrário acho mais legal tirá-lo.

Sobre a implementação, a maioria dos serviços REST que eu implementei foram com Servlets simples e com o XStream mesmo. Entretanto, para implementar uma aplicação com vários serviços, e recursos ricos, acho melhor usar o Jersey.

Uma bela dica que deixo é que você dê uma olhada na RFC do Atom Publishing Protocol, a RFC 5023. O AtomPub pode ser visto como um blueprint de serviços REST, e muita gente o toma como referência para modelar o protocolo de comunicação dos serviços. É uma ótima leitura.

Grande abraço,

Bruno Pereira</description>
		<content:encoded><![CDATA[<p>Oi Edgar, realmente temos total liberdade para moldar o protocolo de comunicação REST de acordo com as nossas preferências. Isto é muito bom e traz bastante liberdade. </p>
<p>A única &#8220;ressalva&#8221; quanto a isso é que se implementarmos um protocolo de comunicação que fuja muito das principais boas práticas, os clientes que precisarem consumir os serviços terão um pouco mais de dificuldade para conhecer o seu protocolo.</p>
<p>Sobre o seu serviço, de fato eu me enganei. Eu não tinha visto o serviço como uma query, mas como uma URI de acesso ao recurso &#8220;vertical&#8221;. Se o serviço é Query, realmente ficou bem mais adequado do que eu havia comentado. </p>
<p>Só uma pequena observação: eu acho o &#8220;*&#8221; um pouco redundante na URI /rest/query/*/from/verticais. Eu acho que fica melhor você colocar /rest/query/from/verticais a não ser que você tenha planos de usar esta estrutura para pegar atributos individuais. Se você pretende ter uma URI /rest/query/*/from/verticais e outra URI /rest/query/id/from/verticais, aí faz sentido manter o *. Caso contrário acho mais legal tirá-lo.</p>
<p>Sobre a implementação, a maioria dos serviços REST que eu implementei foram com Servlets simples e com o XStream mesmo. Entretanto, para implementar uma aplicação com vários serviços, e recursos ricos, acho melhor usar o Jersey.</p>
<p>Uma bela dica que deixo é que você dê uma olhada na RFC do Atom Publishing Protocol, a RFC 5023. O AtomPub pode ser visto como um blueprint de serviços REST, e muita gente o toma como referência para modelar o protocolo de comunicação dos serviços. É uma ótima leitura.</p>
<p>Grande abraço,</p>
<p>Bruno Pereira
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Edgar Silva</title>
		<link>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7243</link>
		<pubDate>Sun, 13 Apr 2008 05:10:08 +0000</pubDate>
		<guid>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7243</guid>
					<description>Olá Bruno,

Obrigado pelos comentários, sempre são bem vindos. Seu comentário na verdade só enriqueceu o post.

Algumas questoes apenas: Um entendimento que eu tive a respeito de REST é que elementos facilitadores devem ser aplicados, onde o protocolo pode ser flexivel, ao passo que acredito que servicos como os do FaceBook, Flickr, del.ic.ous,Ning etc , podem ser desenhados no padrão que cabe a cada um deles, do contrário REST seria tão burocrático quanto seu irmao mais velho WS. 

Quando a interpretação do meu servico, será que voce imaginou que o servico na verdade é Query, e que as minhas RegExp se tornam na verdade um pequeno analisador similar ao de um SQL? Será que ainda assim, ficaria errado?

Para me ambasar melhor, li a seção 3.6.2 Request Matching, da Spec JSR311, onde vi:
1. Identify the root resource class: 
(a) Set U = request URI path,C = {root resource classes},E = {} 
(b) For each class in C add a regular expression (computed using the function R(A) described in 31
section 3.6.3) to E as follows: 32
• Add R(Tclass) where Tclass is the URI path template specified for the class.

Partindo desses padrões, acredito que possa modelar um pouco mais próximo da Spec as urls dos meus servicos, do contrário fica tão pessoal quanto alguns desenhos de processos em BPM.

Eu nao usei nenhum framework, e sim um bom e velho Servlet, uma coisa interessante é q fiz alguns testes com Interceptors para "simular" meus eventos dentro do barramento ESB.</description>
		<content:encoded><![CDATA[<p>Olá Bruno,</p>
<p>Obrigado pelos comentários, sempre são bem vindos. Seu comentário na verdade só enriqueceu o post.</p>
<p>Algumas questoes apenas: Um entendimento que eu tive a respeito de REST é que elementos facilitadores devem ser aplicados, onde o protocolo pode ser flexivel, ao passo que acredito que servicos como os do FaceBook, Flickr, del.ic.ous,Ning etc , podem ser desenhados no padrão que cabe a cada um deles, do contrário REST seria tão burocrático quanto seu irmao mais velho WS. </p>
<p>Quando a interpretação do meu servico, será que voce imaginou que o servico na verdade é Query, e que as minhas RegExp se tornam na verdade um pequeno analisador similar ao de um SQL? Será que ainda assim, ficaria errado?</p>
<p>Para me ambasar melhor, li a seção 3.6.2 Request Matching, da Spec JSR311, onde vi:<br />
1. Identify the root resource class:<br />
(a) Set U = request URI path,C = {root resource classes},E = {}<br />
(b) For each class in C add a regular expression (computed using the function R(A) described in 31<br />
section 3.6.3) to E as follows: 32<br />
• Add R(Tclass) where Tclass is the URI path template specified for the class.</p>
<p>Partindo desses padrões, acredito que possa modelar um pouco mais próximo da Spec as urls dos meus servicos, do contrário fica tão pessoal quanto alguns desenhos de processos em BPM.</p>
<p>Eu nao usei nenhum framework, e sim um bom e velho Servlet, uma coisa interessante é q fiz alguns testes com Interceptors para &#8220;simular&#8221; meus eventos dentro do barramento ESB.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Bruno Pereira</title>
		<link>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7242</link>
		<pubDate>Fri, 11 Apr 2008 11:43:15 +0000</pubDate>
		<guid>http://edgarsilva.com.br/2008/04/11/rest-mais-uma-nova-mcoferta/#comment-7242</guid>
					<description>Oi Edgar, tudo bem?

Na minha humilde opinião, esta URI que você falou não é RESTful. De uma maneira geral, a URI dos serviços deve indicar O QUE (QUAL recurso) você está manipulando, e o método (ou verbo) HTTP deve indicar COMO você está manipulando. 

Neste seu exemplo, se o seu recurso é uma "vertical", eu colocaria a URI como /vertical. A URI /vertical/{id} indicaria uma vertical específica. A URI /vertical sem especificar o ID indicaria a coleção inteira de verticais.

O formato da URI que você colocou é mais no formato fazerEssaOperacao, estilo WS-*. Eu sugiro tentar sempre moldar as URIs no sentido de deixar claro QUAL é o recurso, ou possivelmente associações entre recursos. 

Por exemplo, eu nem sei o que representa "vertical" na sua aplicação, mas supondo que você tenha o recurso "vertical" e outro chamado "horizontal", uma URI que represente a relação entre uma determinada "vertical" e uma determinada "horizontal" poderia ser: /vertical/123/horizontal/456, onde 123 e 456 são os respectivos IDs.

Eu escrevi o artigo da capa da Java Magazine desse mês, sobre serviços REST. Talvez você ache interessante :)

Ah, e algo que eu recomendo é começar com Servlets e XStream mesmo. Quando você já tiver identificado pontos onde gostaria de melhorar, dá uma olhada na JSR-311 e no Jersey, a implementação de referência da JSR. O Jersey é muito interessante, e resolve problemas como o mapeamento de URIs em Classes e métodos, e faz os bindings XML para você. Na verdade ele faz bem mais que isso, mas depois você dá uma olhada.

Parabéns pelo blog.

Grande abraço,

Bruno Pereira</description>
		<content:encoded><![CDATA[<p>Oi Edgar, tudo bem?</p>
<p>Na minha humilde opinião, esta URI que você falou não é RESTful. De uma maneira geral, a URI dos serviços deve indicar O QUE (QUAL recurso) você está manipulando, e o método (ou verbo) HTTP deve indicar COMO você está manipulando. </p>
<p>Neste seu exemplo, se o seu recurso é uma &#8220;vertical&#8221;, eu colocaria a URI como /vertical. A URI /vertical/{id} indicaria uma vertical específica. A URI /vertical sem especificar o ID indicaria a coleção inteira de verticais.</p>
<p>O formato da URI que você colocou é mais no formato fazerEssaOperacao, estilo WS-*. Eu sugiro tentar sempre moldar as URIs no sentido de deixar claro QUAL é o recurso, ou possivelmente associações entre recursos. </p>
<p>Por exemplo, eu nem sei o que representa &#8220;vertical&#8221; na sua aplicação, mas supondo que você tenha o recurso &#8220;vertical&#8221; e outro chamado &#8220;horizontal&#8221;, uma URI que represente a relação entre uma determinada &#8220;vertical&#8221; e uma determinada &#8220;horizontal&#8221; poderia ser: /vertical/123/horizontal/456, onde 123 e 456 são os respectivos IDs.</p>
<p>Eu escrevi o artigo da capa da Java Magazine desse mês, sobre serviços REST. Talvez você ache interessante <img src='http://edgarsilva.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ah, e algo que eu recomendo é começar com Servlets e XStream mesmo. Quando você já tiver identificado pontos onde gostaria de melhorar, dá uma olhada na JSR-311 e no Jersey, a implementação de referência da JSR. O Jersey é muito interessante, e resolve problemas como o mapeamento de URIs em Classes e métodos, e faz os bindings XML para você. Na verdade ele faz bem mais que isso, mas depois você dá uma olhada.</p>
<p>Parabéns pelo blog.</p>
<p>Grande abraço,</p>
<p>Bruno Pereira
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
