Criando um Controller de API REST com Respostas JSON Padronizadas em PHP

Criando um Controller de API REST com Respostas JSON Padronizadas em PHP

A falta de padronização no formato das respostas de uma API pode causar inconsistências no front-end e dificultar a manutenção da aplicação. Este Controller encapsula a lógica de resposta HTTP em PHP, garantindo que todas as saídas (sucesso ou erro) sigam uma estrutura JSON uniforme e previsível.

PHP

<?php

/**
 * Controller base para APIs REST com suporte a respostas JSON estruturadas.
 */
class ApiController
{
    /**
     * Envia uma resposta JSON padronizada para o cliente HTTP.
     *
     * @param bool   $success Status da operação (true/false).
     * @param mixed  $data    Dados principais a serem retornados na resposta.
     * @param string $message Mensagem informativa sobre o processamento.
     * @param int    $code    Código de status HTTP (ex: 200, 201, 400, 500).
     */
    protected function jsonResponse(bool $success, mixed $data = null, string $message = '', int $code = 200): void
    {
        // Define o cabeçalho oficial para conteúdo JSON
        header('Content-Type: application/json; charset=utf-8');
        
        // Define o código de resposta HTTP
        http_response_code($code);

        // Estrutura do envelope padrão retornado pela API
        $payload = [
            'success'   => $success,
            'message'   => $message,
            'data'      => $data,
            'timestamp' => date('Y-m-d H:i:s')
        ];

        // Serializa o array e encerra a execução do script
        echo json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        exit;
    }

    /**
     * Atalho para respostas de sucesso.
     */
    public function success(mixed $data = null, string $message = 'Operação realizada com sucesso', int $code = 200): void
    {
        $this->jsonResponse(true, $data, $message, $code);
    }

    /**
     * Atalho para respostas de erro.
     */
    public function error(string $message = 'Ocorreu um erro no processamento', int $code = 400, mixed $data = null): void
    {
        $this->jsonResponse(false, $data, $message, $code);
    }
}

// --- Exemplo de Uso Prático ---

class UserController extends ApiController
{
    public function show(int $id): void
    {
        // Simulação de busca de usuário no banco de dados
        if ($id === 1) {
            $user = ['id' => 1, 'nome' => 'Ana Silva', 'email' => 'ana@empresa.com'];
            $this->success($user, 'Usuário encontrado com sucesso');
        } else {
            $this->error('Usuário não encontrado', 404);
        }
    }
}

// Simulação da chamada do Controller
$controller = new UserController();

// Teste de resposta com sucesso (HTTP 200)
$controller->show(1);

// Teste de resposta com erro (HTTP 404) - descomente para testar
// $controller->show(999);
  • Estrutura de Envelope Única (Envelope Pattern): Todas as respostas possuem a mesma chave base (success, message, data, timestamp), simplificando a desserialização e o tratamento de dados no consumo por clientes front-end ou mobile.
  • Opções de Serialização (JSON_UNESCAPED_UNICODE): O uso dessa flag no json_encode() preserva acentos e caracteres especiais UTF-8 nativos no retorno JSON sem converter para códigos escapados Unicode (ex: \u00e1).
  • Sinalização do Status HTTP (http_response_code): Alinha a resposta do corpo JSON com o status code real do protocolo HTTP, mantendo a API compatível com os padrões de arquitetura REST.
  • Interrupção de Fluxo (exit): Garante que nenhum conteúdo adicional (como warnings ou quebras de linha acidentais do PHP) estrague a formatação válida do JSON enviado ao cliente.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

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