Cómo escribir una API REST en PHP en 30 minutos: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course
```html

Cómo escribir una API REST en PHP en 30 minutos



REST API (Representational State Transfer) es un estilo arquitectónico para la interacción de componentes de una aplicación distribuida en la red. En el desarrollo web moderno, REST API es el estándar para crear el backend de aplicaciones móviles, SPA (Single Page Application) y microservicios. En este artículo, mostraremos cómo escribir una API REST simple pero completamente funcional en PHP en solo 30 minutos.



Crearemos una API para gestionar una lista de tareas (Todo List) con soporte para operaciones CRUD (Create, Read, Update, Delete). Aprenderá a organizar el enrutamiento, procesar solicitudes JSON y conectar una base de datos MySQL.



Preparación del entorno



Para trabajar necesitará:

  • Servidor web Apache o Nginx con soporte para PHP 7.4+
  • MySQL o MariaDB
  • Editor de código (VS Code, PhpStorm)
  • Postman o curl para probar la API


Cree la estructura del proyecto:

todo-api/├── index.php          # Punto de entrada (enrutador)├── config.php         # Configuración de conexión a la BD├── api/│   └── tasks.php      # Lógica de trabajo con tareas└── .htaccess          # Configuración de reescritura de URL


Paso 1: Configuración de .htaccess y punto de entrada



Cree el archivo .htaccess para redirigir todas las solicitudes a index.php:

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


Ahora crearemos index.php — nuestro enrutador 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");

// Manejo de solicitudes 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;}?>


Paso 2: Conexión a la base de datos



Cree config.php con la configuración de conexión:

<?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; }}?>


Cree la tabla en 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);


Paso 3: Implementación de operaciones CRUD



Cree el archivo api/tasks.php con la lógica principal:

```

Blogs

Book Recommendations