Posts TaggedProgramação Web

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

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.

<?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

Add comment Setembro 16, 2009


RSS Cassio Santos

Categorias

Calendário

Dezembro 2009
S T Q Q S S D
« Set    
 123456
78910111213
14151617181920
21222324252627
28293031  

Feeds

Tags

Aritmética Atribuição Basic Cassio Santos Concatenação Controller Funções recursivas IDE Internet Lógica Model Model-View-Controller Modelo de página MVC Net Beens Operadores Page Template Drop Down PHP Programação Programação Web Progressão Aritimética rss Sucessão Aritimética VB VB.Net View Visual Basic webservice Wordpress WP

Internet