Webservices em PHP

Recentemente fui escalada na empresa para realizar a construção de um webservice PHP, era um novo desafio, já que nunca tinha participado da construção de um webservice antes. O Primeiro passo foi realizar pesquisas a respeito, percebi no google que a maioria dos exemplos mostrava a utilização de codigo javascript e não em PHP especificamente.
Também percebi que tudo era um pouco confuso, já que os exemplos misturavam o envio e recebimento de informações, e quando se tratava do PHP a ênfase era apenas apresentar as funções nativas de JSON e mais nada.
De fato, a maioria dos webservices apresentam praticidade quando o envio e recebimento de pacote de dados é feito utilizando o JSON, no meu caso estava enviando dados em linguagem PHP/JSON, e a outra empresa que estava recebendo tratava os dados JSON na linguagem JAVA, é fantástico fazer dois sistemas “conversarem” mesmo que em linguagens diferentes.
O Que é JSON?
JSON é a abreviatura de Javascript Object Notation, mas não se deixe enganar pelo nome, embora soe como se fosse especifico para Javascript, esse formato pode ser facilmente lido e escrito por uma ampla variedade de linguagens de programação. Possui um formato bem simples, leve, que pode representar dados aninhados e estruturados.
Lembra um array associativo ou objeto com propriedade, onde uma { (chave) será utilizada para indicar níveis de profundidade da estrutura, e as chaves e os valores são separados por dois pontos, e cada registro de nível é separado por uma virgula. veja o exemplo abaixo:
{“mensagem”: {“en”:”hello friend”, “pt”:”oi amigo”}}
JSON E PHP
Para gerar essa estrutura através do PHP utiliza-se a função nativa do php json_encode, neste caso você estaria “empacotando” os dados para serem enviados, veja a linha abaixo:
echo json_encode(array(“message” => “hello you”));
No caso de você “receber” o pacote de dados em JSON e for necessário transforma-los em estrutura php, basta usar a função nativa json_decode, veja a linha abaixo:
$data = json_decode(‘{“message”:”hello you”}’);
var_dump($data);
Tudo bem, com certeza você viu esses exemplos nos google, utilizando as funções nativas do PHP, a grande duvida e que não resolvia o meu problema e nem o seu é: “COMO ENVIAR OS DADOS PARA O OUTROS SERVIDOR?”
Fiz diversas pesquisas no google e nada de encontrar algo que explica-se minha necessidade, foi então que procurei por livros que tratavam sobre o tema, encontrei o livro “Web Services em PHP” da autora Lorna Jane Mitchell, editora O’REILLY novatec. Fui até a livraria e percebi que o livro era muito curtinho, fininho e com um preço um pouco acima do imaginado para o livro, dei uma passada rápida nas paginas e vi o que poderia ser a solução do meu problema, decidi levar o livro pra casa, e encontrei o que precisava.
O Livro é muito bom, tem muitas abordagens, e em uma das paginas encontrei como enviar os dados para uma aplicação existente. Segue abaixo um trecho do código onde se utiliza funções nativas também para se fazer o envio dos dados.
//dados que você vai enviar
$data = json_encode($queryresult);
//url pra onde será enviado os dados, seu parceiro deverá lhe fornecer um
$url = “http://www.urldaaplicacaodoparceiro.com”;
$ch = curl_init($url);
//abaixo ele seta as opções, como envio via get ou post, os dados data, content type, e depois os retornos de transferência.
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type: application/json’,
                                                                                              ‘Authorization: token ‘ . $access_token)
                               );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$data = json_decode($result, true);
var_dump($data);
Quero lembrar que o código acima é um código fictício e incompleto, recomendo uma boa leitura neste livro que indiquei, pois ele contem dicas valiosas, assim como novas pesquisas no google pode orientá-los melhor quanto ao envio de dados para outro servidor via webservice.
Quanto ao processo de recebimento de dados, confesso que não sei exatamente qual a melhor forma de montar, receber e tratar os dados, pois não participei dessa etapa de construção. Quem sabe futuramente tenha algo novo referente a isto para aprender e repassar para vocês.

Boa sorte e até a próxima.
Share