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