<?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>Horizontes Digitais &#187; SOA</title>
	<atom:link href="http://horizontesdigitais.com/category/soa/feed/" rel="self" type="application/rss+xml" />
	<link>http://horizontesdigitais.com</link>
	<description>Desenvolvimento, Segurança e Negócios</description>
	<lastBuildDate>Sat, 24 Jul 2010 20:34:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>REST, Web Services sem WSDL &#8211; Parte 2</title>
		<link>http://horizontesdigitais.com/2008/04/29/rest-web-services-sem-wsdl-parte-2/</link>
		<comments>http://horizontesdigitais.com/2008/04/29/rest-web-services-sem-wsdl-parte-2/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 23:13:24 +0000</pubDate>
		<dc:creator>Fernando Chucre</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://horizontesdigitais.com/2008/04/29/rest-web-services-sem-wsdl-parte-2/</guid>
		<description><![CDATA[Continuando o post do meu colega Claudio eu vou aprofundar o conceito de REST e forma de uso dos mesmo. Este artigo é uma serie de artigos que ira mostrar o uso de aplicações REST usando o PHP. A ideia é ter no final dessa serie uma aplicação funcional usando REST, provendo REST usando a [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando o <a href="http://horizontesdigitais.com/2008/04/18/rest-web-services-sem-wsdl/">post </a>do meu colega <a href="http://horizontesdigitais.com/author/claudioulisse/">Claudio </a>eu vou aprofundar o conceito de REST e forma de uso dos mesmo. Este artigo é uma serie de artigos que ira mostrar o uso de aplicações REST usando o PHP. A ideia é ter no final dessa serie uma aplicação funcional usando REST, provendo REST usando a técnica MVC.</p>
<p>O que é REST?</p>
<p>Segundo a <a href="http://pt.wikipedia.org/wiki/REST">Wikipedia </a>“A Transferência de Estado Representacional (Representational State Transfer) ou somente (REST) é uma técnica de engenharia de software para sistemas hipermídia distribuídos como a World Wide Web. O termo se originou no ano de 2000, em uma tese de doutorado (PHD) sobre a web escrita por Roy Fielding, um dos principais autores as especificação do protocolo HTTP que é utilizado por sites da internet ”.<span id="more-29"></span></p>
<p>Com essa técnica é possível criar serviços na WEB sem a necessidade de RPC ou SOAP. A definição dos serviços são através de recursos. Esse recursos são identificados por suas URLs, cada URL é um recurso   único e de deve estar definido em local único, assim se você tiver, por exemplo, uma aplicação MVC, que tem 2 controles, neste exemplo, Contas e Feeds, você deverá eleger quais recursos estarão disponíveis aos seus clientes.</p>
<p>Vamos imaginar que você quer disponibilizar o recurso http://nossorest.example.com/api/account/ para informações e edição de uma conta no sistema. Neste casso você quer por exemplo que o controle AccountController seja usando com a action infoAction e editAction. Para isso você deve mapear nas suas rotas que quando a requisição para esse URL seja encaminhada para o controle e ação correta. Nesse artigo não vou considerar o uso de MVC ou outra metodologia. Apenas vou ter 2 arquivos que vão implementar os recursos.</p>
<p>O REST trabalha com os códigos do protocolo HTTP e seus verbos, a seguir você vera os principais códigos de retorno e seus usos e os verbos utilizados. Uma coisa que é importante ressaltar é que o REST é principalmente semântico, assim dispensa muitos arquivos de documentação.</p>
<p>Principais códigos de retorno</p>
<p>O protocolo HTTP trabalha com classes de retorno que são 5, o numero inicial do código de retorno indica a classe de retorno, por exemplo o retorno 200 é da classe 2 que é sucesso.</p>
<p>Classes</p>
<ul>
<li> 1 – Continue, usando para continuar a mesma ação com varias requirições.</li>
<li> 2 – Sucesso.</li>
<li> 3 – Redirecionamento</li>
<li> 4 – Erro do cliente</li>
<li> 5 – Erro do servidor</li>
</ul>
<p>Códigos mais usados pelas aplicações REST</p>
<ul>
<li>200 – Sucesso, mais trivial resultado, usado por padrão</li>
<li>201 – Criado.</li>
<li>401 – Não autorizado, possivelmente porque não houve uma autenticação no servidor.</li>
<li>403 – Acesso negado</li>
<li>404 – Recurso não encontrado.</li>
<li>412 – Precondição falhou, quando um dado não foi informado ou informado de forma equivocada.</li>
<li>500 – Erro interno no servidor, geralmente usado quando uma exceção sem tratamento é lançada.</li>
<li>501 – Recurso não implementado, geralmente quando esta na especificação e não foi ainda implementado.</li>
</ul>
<p>Os verbos</p>
<ul>
<li>GET – usado para obter um recurso ou uma lista deles.</li>
<li>POST – usado para incluir um recurso</li>
<li>PUT – usado para editar um recurso</li>
<li>DELETE – usado para deletar um recurso</li>
</ul>
<p>O corpo da resposta pode ser em qualquer estrutura que você quiser. Usaremos a estrutura JSON, mas poderia ser XML ou outra estrutura, inclusive texto puro.</p>
<p>Os nossos arquivos conterão a seguinte estrutura:</p>
<p>/api/acount/index.php</p>
<p><code><br />
&lt;?<br />
/* Nossa classe de conta. */<br />
require_once 'Classe/Account.php';</code></p>
<p>$accounts = new Account();</p>
<p>/* verifica se p metodo é o GET */<br />
if ($_SERVER['REQUEST_METHOD'] == &#8216;GET&#8217;)<br />
{<br />
/*Caso seja, busca os dados do conta solicitada, caso não, toda  a lista */<br />
if ($_GET['id'])<br />
{<br />
$account = $account-&gt;find($$_GET['id'])-&gt;current();</p>
<p>/* verifica se o recursos existe */<br />
if ($account)<br />
{<br />
/*caso exista imprime uma estrutura json com a estrutura da conta */<br />
echo json_encode($account-&gt;toArray());<br />
}<br />
else<br />
{<br />
/* retorna o código de retorno 404, recursos não encontrado. */<br />
http_send_status(&#8217;404&#8242;);<br />
}<br />
}<br />
}<br />
elseif ($_SERVER['REQUEST_METHOD'] == &#8216;PUT&#8217;)<br />
{<br />
/* o método PUT é utilizado para editar um recurso */<br />
if ($_GET['id'])<br />
{<br />
$account = $accounts-&gt;find($_GET['id'])-&gt;current();<br />
if ($account)<br />
{<br />
$account-&gt;name = $_GET['name'];<br />
$account-&gt;email = $_GET['email'];</p>
<p>try<br />
{<br />
/* não precisamos mudar o código do retorno, pois será 200 */<br />
$account-&gt;save();<br />
}<br />
catch (Exception $e)<br />
{<br />
/* erro interno no servidor; */<br />
http_send_status(&#8217;500&#8242;);<br />
}</p>
<p>}<br />
else<br />
{<br />
/* retorna o código de retorno 404, recursos não encontrado. */<br />
http_send_status(&#8217;404&#8242;);<br />
}<br />
}<br />
else<br />
{<br />
/* se o recurso não foi indicado envia um erro de falha de precondição */<br />
http_send_status(&#8217;412&#8242;);<br />
}<br />
}<br />
else<br />
{<br />
/* acesso negado para os métodos POST e DELETE */<br />
http_send_status(&#8217;403&#8242;);<br />
}<br />
?&gt;<br />
O segundo recurso (Feed)que esta na URL http://nossorest.example.com/api/feed/ será usado para incluir, listar e deletar feeds de uma determinada conta.</p>
<p>/api/feed/inde.php<br />
<code><br />
&lt;?<br />
/*Nossa classe de conta.*/<br />
require_once 'Classe/Account.php';</code></p>
<p>$accounts = new Account();</p>
<p>/*verifica se o metodo é o GET*/<br />
if ($_SERVER['REQUEST_METHOD'] == &#8216;GET&#8217;)<br />
{<br />
/*Caso seja, busca os dados da conta solicitada*/<br />
if ($_GET['id'])<br />
{<br />
$account = $account-&gt;find($$_GET['id'])-&gt;current();</p>
<p>/*verifica se o recursos existe*/<br />
if ($account)<br />
{<br />
/*caso exista imprime uma estrutura json com a estrutura da conta*/<br />
echo json_encode($account-&gt;getFeeds());<br />
}<br />
else<br />
{<br />
/*retorna o código de retorno 404, recursos não encontrado.*/<br />
http_send_status(&#8217;404&#8242;);<br />
}<br />
}<br />
else<br />
{<br />
/*se o recurso não foi indicado envia um erro de falha de precondição*/<br />
http_send_status(&#8217;412&#8242;);<br />
}<br />
}<br />
elseif ($_SERVER['REQUEST_METHOD'] == &#8216;POST&#8217;)<br />
{<br />
/*Caso seja, busca os dados da conta*/<br />
if ($_GET['id'] and $_GET['feed'])<br />
{<br />
$account = $account-&gt;find($$_GET['id'])-&gt;current();</p>
<p>/*verifica se o recursos existe*/<br />
if ($account)<br />
{<br />
/*caso exista inclui a feed na lista da conta*/<br />
$account-&gt;addFeed($_GET['feed']);<br />
}<br />
else<br />
{<br />
/*retorna o código de retorno 404, recursos não encontrado.*/<br />
http_send_status(&#8217;404&#8242;);<br />
}<br />
}<br />
else<br />
{<br />
/*se o recurso não foi indicado envia um erro de falha de precondição*/<br />
http_send_status(&#8217;412&#8242;);<br />
}<br />
}<br />
elseif ($_SERVER['REQUEST_METHOD'] == &#8216;DELETE&#8217;)<br />
{<br />
/*o método PUT é utilizado para editar um recurso*/<br />
if ($_GET['id'] and $_GET['id_feed'])<br />
{<br />
$account = $accounts-&gt;find($_GET['id'])-&gt;current();<br />
if ($account)<br />
{<br />
$account-&gt;delFeed($_GET['id_feed']);<br />
}<br />
else<br />
{<br />
/*retorna o código de retorno 404, recursos não encontrado.*/<br />
http_send_status(&#8217;404&#8242;);<br />
}<br />
}<br />
else<br />
{<br />
/*se o recurso não foi indicado envia um erro de falha de precondição*/<br />
http_send_status(&#8217;412&#8242;);<br />
}<br />
}<br />
else<br />
{<br />
/*acesso negado para o método PUT*/<br />
http_send_status(&#8217;403&#8242;);<br />
}<br />
?&gt;<br />
Com esses exemplos práticos você já pode começar a imaginar como serão seus serviços e<br />
começar a mapeá-los. Durante essa semana estarei publicando mais artigos que elucidaram ainda mais como criar aplicações em PHP com REST e MVC com o Zend Framework.</p>
<p>Abraços,<br />
Fernando Chucre</p>
]]></content:encoded>
			<wfw:commentRss>http://horizontesdigitais.com/2008/04/29/rest-web-services-sem-wsdl-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REST, Web Services sem WSDL</title>
		<link>http://horizontesdigitais.com/2008/04/18/rest-web-services-sem-wsdl/</link>
		<comments>http://horizontesdigitais.com/2008/04/18/rest-web-services-sem-wsdl/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 14:51:36 +0000</pubDate>
		<dc:creator>Claudio Ulisse</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://horizontesdigitais.com/2008/04/18/rest-web-services-sem-wsdl/</guid>
		<description><![CDATA[Olá, durante o horário de trabalho tenho a sorte de debater com pessoas competentes e interessadas, sobre os assuntos mais quentes de tecnologia, um tipo de &#8220;otium&#8221;(ócio em latim) criativo coletivo. È sempre um prazer discutir idéias com amigos-colegas. Em um desses papos eruditos sobre tecnologia, estava conversando com meu amigo Christiano Milfont sobre umas [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>durante o horário de trabalho tenho a sorte de debater com pessoas competentes e interessadas, sobre os assuntos mais quentes de tecnologia, um tipo de &#8220;otium&#8221;(ócio em latim) criativo coletivo. È sempre um prazer discutir idéias com amigos-colegas. Em um desses papos eruditos sobre tecnologia, estava conversando com meu amigo <a href="http://www.milfont.org">Christiano Milfont</a><br />
sobre umas das tecnologias mais exóticas da web 2.0 : a tecnologia REST. Na verdade REST é um conceito, uma arquitetura web, é uma diferente maneira de implementar serviços web. Se trata de implementar serviços web orientados a recursos. Com REST Web services são reimplementados através de URI,HTTP,XML. REST é diferente de SOAP ou RPC. REST não é um padrão W3C, é uma arquitetura web, assim como Ajax.</p>
<p>Porque URI, HTTP e XML? As tres são interfaces extensiveis . Podem ser formadas um numero infinito de URIs e por isso podem ser usadas para ser identificadoras de recursos. Indicam o endereço e o nome dos recursos publicados. HTTP é um protocolo que suporta métodos, cabeçalhos e URIs nativamente. XML &#8230;acho que não precisa nem de explicações. As tres sustentam a web. Até aqui nada de novo.</p>
<p>A novidade vem com como que vou arranjar essas três tecnologias para consumir recursos.</p>
<p>Primeiro, os recursos são o que? Podem ser qualquer formato do XML ao JSON, do TXT ao Html,ou um JPEG,GIF&#8230; Não importa qual o formato o importante é que pode-se interagir diretamente com esses recursos via HTTP.</p>
<p>Por exemplo:</p>
<p>quero acessar claudio/servico/relatorio, acessando retorna um arquivo(recurso) xml.</p>
<p>&#8220;claudio/servico&#8221; é o endereco, &#8220;relatorio&#8221; é o nome do recurso que retorna um xml, juntos são um ID único do recurso na web.</p>
<p>O interessante é que os componentes da web em que são hospedados esses recursos conversam entre si com um protocolo comum, o HTTP. O HTTP possui metodos, URI, status, cabeçalhos e tipos MIME.</p>
<p>Alguns desses métodos são POST, GET, PUT, DELETE. Cada um desse métodos tem finalidades precisas POST=Create, GET=Read, PUT=Update DELETE=Delete &#8230;lembra alguma coisa? Um CRUD? Isso mesmo. Podemos agir em cima dos recursos via métodos HTTP assim como se faz com um crud.</p>
<p>Logo em seguida publicarei um exemplo para entender melhor essa tecnologia</p>
<p>Abçs</p>
<p>Claudio Ulisse</p>
]]></content:encoded>
			<wfw:commentRss>http://horizontesdigitais.com/2008/04/18/rest-web-services-sem-wsdl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Design pattern + SOA = SOA pattern</title>
		<link>http://horizontesdigitais.com/2008/04/04/design-pattern-soa-soa-pattern/</link>
		<comments>http://horizontesdigitais.com/2008/04/04/design-pattern-soa-soa-pattern/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 14:48:10 +0000</pubDate>
		<dc:creator>Claudio Ulisse</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[SOA pattern]]></category>

		<guid isPermaLink="false">http://horizontesdigitais.com/2008/04/04/design-pattern-soa-soa-pattern/</guid>
		<description><![CDATA[Ultimamente estou me interessando em estudar um assunto ainda pouco explorado: SOA pattern. É um assunto tão novo que até agora só vi 2 ou 3 livros recém lançados. Design patter é, na computação, a abstração de um problema prático no desenvolvimento de software, ou melhor, é um modelo reusável de resolução de problemas. Um [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente estou me interessando em estudar um assunto ainda pouco explorado: SOA pattern. É um assunto tão novo que até agora só vi 2 ou 3 livros recém lançados.</p>
<p>Design patter é, na computação, a abstração de um problema prático no desenvolvimento de software, ou melhor, é um modelo reusável de resolução de problemas. Um design pattern explica os passos fundamentais para resolver um problema em geral. Ele não ajuda a implementar o código em si, mas ajuda na lógica da resolução do problema. Os design pattern conhecidos são orientados a objetos mostrando as interações entre objetos e as estratégias para lidar com eles, dependendo do problema. Mesmo assim não definem a arquitetura da aplicação, com os componentes, módulos e sub-módulos. Esses são outros tipos de patterns, chamados arquiteturais, que definem o esqueleto do software. O foco dos design patterns são objetos e as interações entre eles.</p>
<p>O foco do SOA são os serviços. Muito já se falou a respeito de SOA e com certeza é o presente e o futuro do desenvolvimento corporativo.  Os Arquitetos SOA se deparam com problemas similares dos analistas de sistemas de informação, afinal os dois tem que arranjar de maneira eficiente componentes que no conjunto tem que funcionar. O analista SI pensa &#8220;com qual padrão vou arranjar as minhas classes e objetos? qual vai ser a cara mo deu sistema?&#8221;, enquanto o arquiteto SOA pensa &#8220;como que vou arranjar os meus serviços? qual o design para o meu problema e que me garanta baixo acoplamento?&#8221;. Nesse ponto SOA pattern são um assunto novo. Inclusive livros e documentação sobre isso está saindo agora das editoras. Atualmente, o que eu descobri fuçando na web é que existem 60 SOA pattern, que na verdade são propostas de patterns. Existem livros com várias propostas, o que eu não vi até agora é uma sistematização dos padrões( ops é pattern!) SOA.</p>
<p>Convido vocês a comentar sobre esse assunto e espero muitas sugestões a respeito, porque a minha intenção é postar mais sobre isso.</p>
<p>Claudio Ulisse</p>
]]></content:encoded>
			<wfw:commentRss>http://horizontesdigitais.com/2008/04/04/design-pattern-soa-soa-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
