Criando serviços JSON RESTful com Slim Framework

porLuis Augusto Moretto

Criando serviços JSON RESTful com Slim Framework

Construa Serviços JSON RESTFul para integrar seu Site, App e Sistemas Inovando sua Empresa

Webservices - Response JSON JSONP XML Mobile rest

SErviços JSON restful

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.

Criando serviços JSON restful com O Slim Framework

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": "*"
    }
}

exemplo de um serviço json restful

Neste exemplo criamos um serviço JSON RESFUl com o Slim Framework e o MeekroDB. O comportamentoé o seguinte: 

  1. ) O Usuario acessa a url relativa /busca
  2. ) É instanciado o objeto APP da Classe SLIM
  3. ) São definidos no HEADER da requisição que a resposta será em JSON, Permite requisição remota e define um conjunto de métodos aceitos na requisição;
  4. ) É feita uma chamada ao Banco de dados com o MeekroDB 
  5. ) A resposta da consulta e retornada ao cliente no formato JSON
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! 😀