API com PHP e Flutter


Como consumir qualquer tipo de API com PHP e aplicar no Flutter

.

Hoje a gente vai aprender de uma vez por todas a consumir qualquer tipo de API com PHP. Então, iremos desenvolver a nossa própria comunicação assim você vai entender de uma vez por todas, em todas as etapas, como consumir uma API seja ela qual for.

API

Significa Application Programming Interface que é uma interface de programação disponibilizada para que você possa se comunicar com outras aplicações ou permitir que outras aplicações se comuniquem com você e assim vice-versa. Então a gente vai utilizar isso para consumir um serviço externo, por exemplo, fazer uma consulta no correio, para fazer um pagamento no web service, ter essa camada na sua aplicação para poder construir um aplicativo mobile que vai se comunicar com essa camada para poder consumir o seu site e aí pode ser consumindo o blog ou até mesmo gerenciais artigos (postar, publicar, entre diversas outras funções).

O PHP tem um protocolo principal para isso que é o REST onde você faz o POST, GET, DELETE, UPDATE, enfim é um padrão de comunicação que a gente tem que a maioria dos desenvolvedores de PHP aplicam.

Esta é uma breve introdução dos conceitos, porém não irei me aprofundar neste tema, só irei postar aqui o código pronto para que cada um utilize da maneira que acher mais adequada.

 

CRIANDO A API

Vamos criar um arquivo .htaccess que ira permitir que usemos ao invés de www.flutterbrasil.com/index.php?login=entrar utilizemos www.flutterbrasil.com/login/entrar, ou seja, url amigáveis.

Criando o arquivo .htaccess na nossa pasta principal, no meu caso, irei criá-lo em http://www.servidor.com/api-test/.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Criando a nossa index.php: primeiramente é importantíssimo acrescentar um header no php header("Access-Control-Allow-Origin: *"); para que nós possamos acessar o json que irá ser gerado pelo flutter web:

‹?php
// para acessar por meio do flutter web é necessário ter esse header
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json; charset=utf-8');

require_once 'classes/api.php';

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

// deixa ucfirst somente a primeira letra maiúscula
$classe = ucfirst($url[0]);
// elimina o primeiro item depois da primeira /
array_shift($url);

$metodo = $url[0];
array_shift($url);

$parametros = array();
$parametros = $url;

try {
if (class_exists($classe)) {
if (method_exists($classe, $metodo)) {
// pega o conteúdo que veio do método mostrar
$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' =› 'método inexistente'));
}
} else {
return json_encode(array('status' = 'erro', 'dados' =› 'classe inexistente'));
}

} catch (Exception $e) {
return json_encode(array('status' = 'erro', 'dados' =› $e-getMessage()));
}
}
}

// se existir uma requisição, request consegue capturar GET ou POST
// entre outras
if (isset($_REQUEST)) {
echo Rest::open($_REQUEST);
}
?›

Criando uma pasta chamada de classes na nossa pasta raiz da API,http://www.servidor.com/api-test/classes, onde irei colocar todos as nossas classes e métodos e criar alí dentro um arquivo api.php:

‹?php
// classe
class Login{
// metodo clientes
public function clientes()
{
$conecta = mysqli_connect("localhost", "usuario", "senha", "bdname");

function converteArrayParaUtf8($result){
array_walk_recursive($result, function($item,$key){

if (!mb_detect_encoding($item, 'utf-8', true)) {
$item = utf8_encode($item);
}
});

return $result;
}

$id = $_POST['id'];
$consulta_usuario = "SELECT *";
$consulta_usuario .= " FROM clientes";
// caso queira colocar um POST em seu método
//$consulta_usuario .= " WHERE id='".$id."'";
$usuarios = mysqli_query($conecta, $consulta_usuario);

// verificar se há falhas
if (!$usuarios){
throw new Exception("Nenhum cliente cadastrado", 1);
}

while($registro = converteArrayParaUtf8(mysqli_fetch_assoc($usuarios))){
$result[]=$registro;
}

return $result;
}

Pronto, nossa API está pronta, na prática você cria quantas classes e métodos desejar.

Para testá-la basta digitar http://www.servidor.com/[localondeestaohtaccess]/[nomeclasse]/[metodoclasse] , ou seja,  http://www.servidor.com/api-teste/login/clientes.

[em desenvolvimento]

 

110 Visualizações