Criando um web service básico usando PHP, MySQL, XML e JSON

setembro 16, 2009 at 3:32 pm 1 comentário

Os web services estão dominando todo o mundo. Algumas pessoas creditam o vertiginoso crescimento do Twitter a disponibilização de uma simples, mas rica, API. Por que não utilizar este mesmo modelo para os seus próprios sites?

Segue um exemplo de como criar um web service básico que provê uma resposta XML ou JSON usando apenas PHP e MySQL. O objetivo deste webservice é listar os últimos artigos de determinado autor em um blog do WordPress, mas entendendo a idéia, você poderá criar qualquer outra coisa. (fonte)

<?php

	/* Solicita o parâmetro "usuario"  */
	if(isset($_GET['usuario']) and intval($_GET['usuario'])) {
	
		/* verifica se a variável foi passada, ou define o valor das variáveis */
		$numero_de_artigos = isset($_GET['artigos']) ? intval($_GET['artigos']) : 10; //10 é o padrão
		$formato = (isset($_GET['formato']) and strtolower($_GET['formato']) == 'json') ? 'json' : 'xml'; //xml é o padrão
		$id_do_usuario = intval($_GET['usuario']); //sem valor padrão
		
		/* conecta ao banco de dados */
		$conexao = mysql_connect('servidor','usuario','senha') or die('Não foi possível conectar ao banco de dados');
		mysql_select_db('banco',$conexao) or die('Não foi possível selecionar o banco de dados');
		mysql_set_charset('utf8', $conexao); //se o seu servidor suporta, é uma boa prática. Veja: http://bit.ly/W38Xy
		
		/* seleciona os artigos do banco de dados */
		$consulta = "SELECT post_title, guid FROM wp_posts WHERE post_author = $id_do_usuario AND post_status = 'publish' 
		ORDER BY ID DESC LIMIT $numero_de_artigos";
		
		$resultado = mysql_query($consulta,$conexao) or die('Consulta com problemas:  '.$consulta);
		
		/* cria um array mestre com os registros */
		$artigos = array();
		if(mysql_num_rows($resultado)) {
			while($artigo = mysql_fetch_assoc($resultado)) {
				$artigos[] = array('post'=>$artigo);
			}
		}
		
		/* extrai os dados no formato expecificado */
		if($formato == 'json') {
			header('Content-type: application/json');
			echo json_encode(array('artigos'=>$artigos));
		}
		else {
			header('Content-type: text/xml');
			echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
			echo '<posts>'."\n";
			foreach($artigos as $indice => $artigo) {
				if(is_array($artigo)) {
					foreach($artigo as $chave => $valor) {
						echo "\t<",$chave,'>'."\n";
						if(is_array($valor)) {
							foreach($valor as $tag => $val) {
								echo "\t\t".'<',$tag,'>',$val,'</',$tag,'>'."\n";
							}
						}
						echo "\t".'</',$chave,'>'."\n";
					}
				}
			}
			echo '</posts>'."\n";
		}
		
		/* desconecta do banco de dados */
		@mysql_close($conexao);
	}

?>

Com o aumento do número de pessoas que acessam seu web service ( que felicidade! ), você precisará adequar a validação antes de se conectar ao banco de dados para evitar ataques de injeção SQL.

Este web service funciona assim: Quando tivermos os resultados desejados do banco de dados, ciclicamente pegamos os resultados e preencheos nosso vetor de resultados. Dependendo do tipo de resposta desejada, nós enviamos os cabeçalhos adequados e o resultado no formato solicitado.

Segue um exemplo de URL que pode ser utilizada para se obter o resultado deste web service:

http://enderecodomeusite.com/web-service.php?usuario=2&artigos=15

About these ads

Entry filed under: Internet, PHP, Programação Web. Tags: , , , .

O padrão MVC A opção “template da página” sumiu do WordPress

1 comentário Add your own

  • 1. anonimo  |  outubro 12, 2012 às 8:44 pm

    Perfeito!!! Simples e objetivo. Obrigado amigo, me ajudou muito. Abraço!

    Resposta

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Trackback this post  |  Subscribe to the comments via RSS Feed


RSS Cassio Santos

  • Ocorreu um erro. É provável que o feed esteja indisponível. Tente mais tarde.

Categorias

Calendário

setembro 2009
S T Q Q S S D
« jun    
 123456
78910111213
14151617181920
21222324252627
282930  

Feeds


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: