Projeto de estudo comunicação WebService simples com PHP

Esta potagem não tem nenhum objetivo profissional nem recursos avançados, tem apenas o objetivo de criar o registro de estudos executados e gerar uma base de dados para consultas futuras.

Primeiramente vamos criar um banco de dados onde vamos armazenar usuários, anotações, perguntas e respostas.

Agora em PHP criaremos uma APIRest para que possamos manipular os dados de diversas linguagens e plataformas através de um link. Em uma subpasta em nosso servidor vamos criar o index.php, essa página será responsável por identificar o Módulo e o Método que desejamos executar capturando o REQUEST.

Essa rotina sempre irá retornar um JSon composto de Status e Dados.

Em Status teremos a mensagem de Sucesso ou Erro.

Em Dados teremos a mensagem do erro, resultado de algum tratamento ou os dados que iremos devolver.

<?php

header('Content-Type: application/json; charset=utf-8');

require_once 'classes/Login.php';
require_once 'classes/Perguntas.php';

class Rest
{
	public static function open($requisicao)
	{
		$url = explode('/', $requisicao['url']);
		
		$classe = ucfirst($url[0]);
		array_shift($url);
		
		$metodo = $url[0];
		array_shift($url);		

		$parametros = array();
		$parametros = $requisicao;

		try {
			if (class_exists($classe)) {
				if (method_exists($classe, $metodo)) {
					$retorno = call_user_func_array(array(new $classe, $metodo), [$parametros]);

					return json_encode(array('status' => 'sucesso', 'dados' => $retorno));
				} else {
					return json_encode(array('status' => 'erro', 'dados' => 'Metodo '.$metodo.' inexistente!'));
				}
			} else {
				return json_encode(array('status' => 'erro', 'dados' => 'Classe '.$classe.' inexistente!'));
			}	
		} catch (Exception $e) {
			return json_encode(array('status' => 'erro', 'dados' => $e->getMessage()));
		}
	}
}

if (isset($_REQUEST)) {
	echo Rest::open($_REQUEST);
}

Em um exemplo estamos criando a aplicação APIRest dentro do domínio projetos onde está diretamente criado o arquivo index.php, para organizar criamos uma subpasta classes onde colocaremos as classes e métodos.

Exemplo da classe Login.php

<?php
class Login{
	private $servername = "localhost";
	private $username   = "usuairo";
	private $password   = "senha";
	private $dbname     = "banco_AppTable";	
	
	public function logar($parametros){
		//Exemplo: http://XXX/APIRest/Login/logar?login=admin&senha=admin1001

		// Create connection
		$conn = mysqli_connect($this->servername, $this->username, $this->password, $this->dbname);
		// Check connection
		if (!$conn) {
			throw new Exception("Falha na conexão com DB: " . mysqli_connect_error());
		}

		$sql = "SELECT * FROM usuario WHERE login = '" . $parametros['login'] . "'";
		$result = mysqli_query($conn, $sql);

		while($row = mysqli_fetch_assoc($result)) {
			$resultados[] = $row;
		}

		if (!$resultados){
			throw new Exception("Usuario ".$parametros['login']." nao localizado");
		} else {
			if (strcmp($resultados[0]['senha'], $parametros['senha']) != 0){
				throw new Exception("Senha invalida");
			} else {
				return $resultados;
			}
		}
	}
	
	public function criarLogin($parametros){
		//Exemplo: http://XXX/APIRest/Login/criarLogin?login=usuario&nome=nomeusuario&email=emailusuario&senha=senhausuario&level=0&pontuacao=0
		
		// Create connection
		$conn = mysqli_connect($this->servername, $this->username, $this->password, $this->dbname);
		// Check connection
		if (!$conn) {
			throw new Exception("Falha na conexão com DB: " . mysqli_connect_error());
		}

		$sql = "SELECT * FROM usuario WHERE login = '" . $parametros['login'] . "'";
		$result = mysqli_query($conn, $sql);

		while($row = mysqli_fetch_assoc($result)) {
			$resultados[] = $row;
		}

		if ($resultados){
			throw new Exception("Usuario ".$parametros['login']." já existe");
		} else {
			$date = date('Y-m-d H:i:s');
			$sql = "INSERT INTO usuario(login, nome, email, senha, level, pontuacao, dt_update)".
                   " VALUES ".
				   "('".$parametros['login']."', '".$parametros['nome']."', '".$parametros['email']."', '".$parametros['senha']."', ".$parametros['level'].", ".$parametros['pontuacao'].", '".$date."')";
			
			var_dump($sql);
			
			//"INSERT INTO usuario (empresa, proprietario, contato, email, telefone, celular, endereco, numero, bairro, cidade, uf, site, complemento) VALUES ('$empresa','$proprietario','$contato','$email','$telefone','$celular','$endereco','$numero','$bairro','$cidade','$uf','$site','$complemento')";
			if (mysqli_query($conn, $sql)) {
			  return 'Login criado com sucesso!';
			} else {
			  throw new Exception('Não foi possível cadastrar esse usuario' . mysqli_error($conn));
			}
		}
	}

	public function atualizarLogin($parametros){
		//Exemplo: http://XXX/APIRest/Login/atualizarLogin?login=usuario&nome=nomeusuario&email=emailusuario&senha=senhausuario&level=0&pontuacao=0
		
		// Create connection
		$conn = mysqli_connect($this->servername, $this->username, $this->password, $this->dbname);
		// Check connection
		if (!$conn) {
			throw new Exception("Falha na conexão com DB: " . mysqli_connect_error());
		}

		$sql = "SELECT * FROM usuario WHERE login = '" . $parametros['login'] . "'";
		$result = mysqli_query($conn, $sql);

		while($row = mysqli_fetch_assoc($result)) {
			$resultados[] = $row;
		}

		if ($resultados){
			throw new Exception("Usuario ".$parametros['login']." já existe");
		} else {
			$date = date('Y-m-d H:i:s');
			$sql = "UPDATE usuario SET ".
			"nome='".$parametros['nome']."', ".
			"email='".$parametros['email']."', ".
			"senha='".$parametros['senha']."', ".
			"level=".$parametros['level'].", ".
			"pontuacao=".$parametros['pontuacao'].", ".
			"dt_update='".$date."'".
   		    " WHERE ".
		    "login='".$parametros['login'];
			
			var_dump($sql);
			
			//"UPDATE usuario SET id=[value-1],login=[value-2],nome=[value-3],email=[value-4],senha=[value-5],level=[value-6],pontuacao=[value-7],dt_update=[value-8] WHERE 1";
			if (mysqli_query($conn, $sql)) {
			  return 'Login atualizado com sucesso!';
			} else {
			  throw new Exception('Não foi possível atualizar esse usuario' . mysqli_error($conn));
			}
		}
	}

	public function listaUsuarios($parametros){
		//Exemplo: http://XXX/APIRest/Login/logar?login=admin&senha=admin1001

		// Create connection
		$conn = mysqli_connect($this->servername, $this->username, $this->password, $this->dbname);
		// Check connection
		if (!$conn) {
			throw new Exception("Falha na conexão com DB: " . mysqli_connect_error());
		}

		$sql = "SELECT * FROM usuario";
		$result = mysqli_query($conn, $sql);

		while($row = mysqli_fetch_assoc($result)) {
			$resultados[] = $row;
		}

		if (!$resultados){
			throw new Exception("Usuarios nao localizados");
		} else {
			return $resultados;
		}
	}	
}

Assim quando houver uma requisição tipo: http://XXX/APIRest/Login/logar?login=admin&senha=admin1001

o sistema ira capturar “Login/logar?login=admin&senha=admin1001” no REQUEST, irá recortar “Login” como classe e “logar” como método a ser executado e o restante após “?” será capturado como parâmetro.

O resultado será:

{"status":"sucesso","dados":[{"id":"1","login":"admin","nome":"Administrador","email":"admin@admin.com.","senha":"admin1001","level":"1","pontuacao":"0","dt_update":"0000-00-00 00:00:00"}]}

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.