Os serviços JSON RESTful surgiram com uma promessa de revolucionar a forma de interconexão de dados.
Eles fornecem um mecanismo padrão e universal de intercambiar informações de uma maneira simples; são componentes que permitem às aplicações enviar e receber dados no formato JSON.
A grande sacada desta arquitetura de software é que a camada de apresentação e as lógicas de negócios são coesas com baixo acoplamento.
Com o JSON embarcado é possível aplicações WEB e Mobile se comunicarem diretamente com o serviço.
Esta característica surge devido ao JSON ser um formato de Notação de Objetos Javascript interpretado pelo navegador e por linguagens de programação como o Java, PHP, Phyton etc.
Existem dezenas de frameworks e linguagens de programação que implementam a arquitetura REST. Vamos apresentar o Slim Framework, que é simples. Seu único propósito é criar rotas de serviços REST.
Se você acessar o site oficial, poderá ver todas as características que o framework possui.
O requisito para começar é instalar o Composer. O Composer serve para baixar as dependências diretamente dentro de seu projeto. Outro framework recomendável para realizar as conexões com o banco de dados é o MeekroDB.
Ambos os componentes como o Slim Framework e o MeekroDB podem ser instalados com o composer declarando em seu arquivo composer.json o seguinte:
{ "require": { "slim/slim": "^3.0", "sergeytsalkov/meekrodb": "*" } }
Neste exemplo criamos um serviço JSON RESFUl com o Slim Framework e o MeekroDB. O comportamentoé o seguinte:
use \Psr\Http\Message\ServerRequestInterface as Request; use \Psr\Http\Message\ResponseInterface as Response; //Import Libs require './vendor/autoload.php'; require 'GuiaController.php'; //Init Objects $app = new \Slim\App; //Define Routes //Busca Eventos de Hoje $app->get('/busca/', function (Request $request, Response $response) use ($app) { //Content Type JSON Cross Domain JSON $newResponse = $response->withHeader('Content-type', 'application/json') ->withHeader('Access-Control-Allow-Origin', '*') ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization') ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); //Return Eventos for today $data = GuiaController::getEventosDeHoje(); //Response Busca Hoje return $newResponse->withJson($data, 201); });
No passo 4 a chamada ao banco de dados é realizada de forma simple conforme o exemplo abaixo:
//Database configuration DB::$user = 'XXXXX'; DB::$password = 'XXXXXXX'; DB::$dbName = 'XXXXXXXXXX_app'; DB::$host = 'localhost'; DB::$port = '3306'; DB::$error_handler = 'my_error_handler'; class DAO extends stdClass { public static function getEventosDeHoje() { $today = date("Y-m-d"); $query = "select * from viewEventPlaces where dtUntil >= '$today'"; $eventos = DB::query($query); // misspelled SELECT //Return Object $stdGuia = new stdClass(); $stdGuia->e = []; foreach ($eventos as $row) { $std = new stdClass(); $std->nrPhone = $row['nrPhone']; $std->deLogo = $row['deLogo']; $std->deAddress = $row['deAddress']; $std->deEvent = $row['deEvent']; $std->deDetail = $row['deDetail']; $std->dtFrom = $row['dtFrom']; $std->dtUntil = $row['dtUntil']; $std->idType = $row['idType']; $std->nrCep = $row['nrCep']; $std->nrLat = $row['nrLat']; $std->nrLng = $row['nrLng']; //Adiciona $stdGuia->e[] = $std; } //get types descriptions $query = "SELECT * FROM Type;"; //RUn qyery $types = DB::query($query); // misspelled SELECT //Prepare another return $stdGuia->t = []; foreach ($types as $row) { $std = new stdClass(); $std->idType = $row['idType']; $std->deType = $row['deType']; $stdGuia->t[] = $std; } //Close Connection DB::disconnect(); return $stdGuia; } }
Happy Coding! 😀