Como escrever uma API REST em PHP em 30 minutos: guia passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course
Here is the translated HTML content in Portuguese (Português), with all HTML tags preserved and only the text content translated. Programming terms, code examples, and proper nouns remain in English. ```html

Como escrever uma REST API em PHP em 30 minutos



REST API (Representational State Transfer) é um estilo arquitetônico para interação de componentes de uma aplicação distribuída em rede. No desenvolvimento web moderno, a REST API é o padrão para criar o backend de aplicativos móveis, SPAs (Single Page Application) e microsserviços. Neste artigo, mostraremos como escrever uma REST API simples, mas totalmente funcional, em PHP em apenas 30 minutos.



Criaremos uma API para gerenciar uma lista de tarefas (Todo List) com suporte a operações CRUD (Create, Read, Update, Delete). Você aprenderá como organizar o roteamento, processar requisições JSON e conectar um banco de dados MySQL.



Preparação do ambiente



Para trabalhar, você precisará de:

  • Servidor web Apache ou Nginx com suporte a PHP 7.4+
  • MySQL ou MariaDB
  • Editor de código (VS Code, PhpStorm)
  • Postman ou curl para testar a API


Crie a estrutura do projeto:

todo-api/├── index.php          # Ponto de entrada (roteador)├── config.php         # Configurações de conexão com o banco de dados├── api/│   └── tasks.php      # Lógica de manipulação das tarefas└── .htaccess          # Configurações de reescrita de URL


Passo 1: Configuração do .htaccess e ponto de entrada



Crie o arquivo .htaccess para redirecionar todas as requisições para o index.php:

RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?url=$1 [QSA,L]


Agora, vamos criar o index.php — nosso roteador principal:

<?phpheader("Content-Type: application/json; charset=UTF-8");header("Access-Control-Allow-Origin: *");header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");header("Access-Control-Allow-Headers: Content-Type, Authorization");

// Processamento de requisições preflightif ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit();}

require_once 'config.php';require_once 'api/tasks.php';

$url = isset($_GET['url']) ? rtrim($_GET['url'], '/') : '';$urlParts = explode('/', $url);$resource = $urlParts[0] ?? '';$id = $urlParts[1] ?? null;

switch ($resource) { case 'tasks': $tasks = new Tasks(); echo $tasks->handleRequest($_SERVER['REQUEST_METHOD'], $id); break; default: http_response_code(404); echo json_encode(["message" => "Resource not found"]); break;}?>


Passo 2: Conexão com o banco de dados



Crie o config.php com as configurações de conexão:

<?phpclass Database {    private $host = "localhost";    private $db_name = "todo_api";    private $username = "root";    private $password = "";    public $conn;

public function getConnection() { $this->conn = null; try { $this->conn = new PDO( "mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password ); $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { http_response_code(500); echo json_encode(["message" => "Database connection error"]); exit(); } return $this->conn; }}?>


Crie a tabela no MySQL:

CREATE DATABASE todo_api;USE todo_api;

CREATE TABLE tasks ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, description TEXT, status ENUM('pending', 'completed') DEFAULT 'pending', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);


Passo 3: Implementação das operações CRUD



Crie o arquivo api/tasks.php com a lógica principal:

```                

Blogs

Book Recommendations