nov 16

Requisições XML-RPC com Zend Framework

PHP, Programação, XML-RPC, Zend Framework, Zend_XmlRpc 1 Comentário Zend Framework

Muitas vezes durante o desenvolvimento de algumas aplicações precisamos realizar conexões entre dois servidores para enviar ou buscar informações, existem diferentes protocolos para realizar esse tipo de atividade, mas nesse artigo vou tratar um pouco sobre o protocolo RPC, mais especificamente sobre a variante desse protocolo que transporta mensagens no formato XML, o XML-RPC.

Realizando Conexão com um Servidor XML-RPC

Antes de se conectar a um servidor é preciso saber se esse servidor suporta o protocolo XML-RPC, se esse servidor realmente suportar o protocolo muito provavelmente haverá uma documentação da interface de conexão com esse servidor, você irá precisar dela para saber os nomes dos métodos que poderá chamar para realizar as consultas ou enviar informações.

Como exemplo vou assumir que está sendo feita uma conexão com um servidor, que suporta o protocolo XML-RPC e que está localizado no endereço “http://servidor.xmlrpc.com/xmlrpc.php”, e que implementa apenas um método “toEnglish” da classe “translate” responsável por receber palavras ou frases em português e retornar sua tradução em inglês.

Para se conectar a esse servidor tudo que precisa ser feito é o seguinte:

$client = new Zend_XmlRpc_Client('http://servidor.xmlrpc.com/xmlrpc.php');

Essa instrução está criando uma instância da classe Zend_XmlRpc_Client, passando como parâmetro o endereço do servidor e armazenando essa instância na variável $client

Realizando Chamadas aos Métodos

Para chamar o método previamente descrito tudo o que precisa ser feito é o seguinte:

$result = $client->call('translate.toEnglish', array('Olá Mundo'));
echo $result; //Hello World

Está sendo chamado o método call da instância de classe armazenada anteriormente na variável $client passando como primeiro parâmetro o nome da classe e método a serem chamados separados por “.” e em seguida um array com os parâmetros requisitados por esse método, nesse exemplo apenas a frase em português que deve ser traduzida, caso o método do servidor tenha sido corretamente implementado ele deverá retornar a String “Hello World”.

Verificando Erros e Faltas

Quando estamos trabalhando com conexões com servidores diferentes muitos fatores podem ocasionar falhar nessa comunicação e muitos deles não estão sob o controle do desenvolvedor, nesse caso tudo o que se pode fazer é verificar se algum erro ocorreu e informar essa falha, isso pode ser feito através de um bloco try-catch da seguinte forma:

try{
	echo $client->call('translate.toEnglish', array('Olá Mundo'));
}catch (Zend_XmlRpc_Client_FaultException $e) {
	echo 'XmlRpc Fault ['.$e->getCode().']: '.$e->getMessage();
}catch (Zend_XmlRpc_Client_HttpException $e) {
	echo 'Erro de HTTP ['.$e->getCode().']: '.$e->getMessage();
}

Nesse caso a requisição XmlRpc está inserida dentro de um bloco try-catch, caso a mesma seja bem sucedida será impresso na tela a tradução da String enviada como parâmetro, caso contrário existem duas possibilidades de erros, a primeira quando a conexão foi realizada com sucesso mas o servidor remoto retornou uma falta, isso pode acontecer caso a string enviada tenha algum caractere inválido ou caso alguma verificação do servidor não tenha sido bem sucedida, nesse caso é impresso na tela o código e mensagem de erro retornados pelo servidor.

Outra possibilidade é que ocorra uma falha na comunicação com o servidor, o servidor pode estar fora do ar temporariamente ou não ser encontrado, nesse caso a classe Zend_XmlRpc retorna um erro de HTTP, esse erro é impresso na tela juntamente com seu código da mesma forma que o anterior. Dessa forma é possível controlar melhor a comunicação entre as duas aplicações.

Conclusão

Com Zend_XmlRpc a comunicação entre duas aplicações se torna muita mais fácil do que caso fosse feita manualmente, com isso é possível acessar API públicas ou proprietárias que forneçam suporte ao esse protocolo e melhorar significamente a sua aplicação.

Uma resposta para “Requisições XML-RPC com Zend Framework”

  1. […] algum tempo atras escrevi um artigo sobre Conexão com Servidores XML-RPC, essa é uma das formas de se obter informações de uma aplicação externa, mas em algumas […]

Deixe uma resposta