Paso a paso ¿Cómo crear una REST API en PHP y MySQL para ser consumida por cualquier aplicación?
Existe un gran numero de frameworks disponibles para poder crear un REST API. Para este artículo se escogió Slim. es un micro framework que te permite escribir aplicaciones web y API´s de forma rápida y eficiente.
En este post, crearemos la REST API en un hosting (compartido) paso a paso utilizando MySQL y PHP, Veremos el servicio REST con ejemplos de todos los métodos disponibles como lo son: POST, GET, PUT y DELETE. La respuesta que nos devolverá el REST API será en formato JSON.
Para los que no saben que es JSON (acrónimo de JavaScript Object Notation), básicamente es un formato de intercambio de datos bastante ligero que puede ser usado por la mayoría de los lenguajes para comunicarse entre si.
Métodos (verbos) del servidor (HTTP):
- GET: se utiliza para retornar y buscar información en la base de datos.
- POST: se utiliza para insertar información a la base de datos.
- PUT: se utiliza para actualizar información en la base de datos.
- DELETE: se utiliza para eliminar información de la base de datos.
Nuestra API REST tendrá el siguiente funcionamiento:
Ruta | Método | Tipo | Descripción |
api/games/v1 | GET | JSON | Lista todos los juegos |
api/games/v1/{id} | GET | JSON | Lista un juego en particular |
api/games/v1/add | POST | JSON | Agrega un juego |
api/games/v1/{id} | PUT | JSON | Actualiza un juego |
api/games/v1/{id} | DELETE | JSON | Elimina un juego |
Como vez algunas de las rutas son las mismas, es una de las grandes ventajas al trabajar con REST APi
De hecho si ingresas a cada ruta obtendremos el resultado de esa petición por ejemplo: https://tupaginaonline.net/api/games/v1
obtendremos el siguiente resultado (json):
[{"id":"1","nombre":"Fallout 4","plataforma":"Multi","ano":"2014","genero":"Rol","created_ad":"2019-06-04 09:47:40"},{"id":"2","nombre":"The Witcher 3: Wild Hunt","plataforma":"Multi","ano":"2013","genero":"Aventuras","created_ad":"2019-06-04 09:48:07"},{"id":"3","nombre":"Resident evil 7","plataforma":"Multi","ano":"2017","genero":"Terror","created_ad":"2019-06-04 15:47:38"},{"id":"6","nombre":"The Legend of Zelda : The wind waker","plataforma":"Nintendo","ano":"2002","genero":"Aventuras","created_ad":"2019-06-04 16:42:46"}]
Vamos a empezar:
Sigue los pasos al pie de la letra para que tu REST API funcione correctamente.
1) Paso :
Crea una carpeta llamada api dentro de tu hosting: ejemplo : public_html/mi_rest_api/api
una vez creada la carpeta api dirígete hacia la opción: Avanzada > Terminal
Una vez dentro del terminal procede a dirigirte hacia la carpeta creada, escribe dentro de la terminal el comando
cd public_html/mi_rest_api/api
introduce el siguiente comando para verificar que tienes instalado composer: Composer es una herramienta para la gestión de dependencias en PHP. Le permite declarar las bibliotecas de las que depende su proyecto y las administrará (instalará / actualizará) por usted.
composer -v
asumiendo que ya lo tienes instalado procedemos, si no ponte en contacto con tu proveedor de hosting.
una vez ya dentro de la carpeta api, vas a introducir el siguiente comando:
composer require slim/slim "^3.12"
Para conocer que todo ha ido bien revisar en nuestro directorio si existe la carpeta vendor, abrir el archivo composer.json con tu editor de código preferido, el contenido de composer.json debería ser el siguiente:
{
"require":
{ "slim/slim": "^3.12"
}
}
2) Paso :
Procedemos a crear la base de datos.
creamos una tabla con las siguientes características :
CREATE TABLE `games` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`nombre` varchar(150) NOT NULL,
`plataforma` varchar(50) NOT NULL,
`ano` int(11) NOT NULL,
`genero` varchar(40) NOT NULL,
`created_ad` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP )
3) Paso :
Crear archivo .htaccess dentro de la carpeta api con el siguiente contenido:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
4) Paso :
creamos el archivo de conexión a la base de datos llamado bd.php
con el siguiente contenido:
(html comment removed: ?php)
< ?php function getConnection() {
$dbhost="localhost";
$dbuser="user";
$dbpass="";
$dbname="bd_name";
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $dbh; }
?>
5) Paso :
Crearemos el .index con el siguiente contenido:
< ?php
require "bd.php";
require "functions.php";
use PsrHttpMessageServerRequestInterface as Request;
use PsrHttpMessageResponseInterface as Response;
require ´vendor/autoload.php´;
$app = new SlimApp();
//AQUI SE CREAN LAS RUTAS DE NUESTRA REST API
$app->get(´/games/v1´, ´all_Games´); //Obtener todos los juegos
$app->get(´/games/v1/{id}´, ´select_Game´); // Obtener un juego
$app->post(´/games/v1/add´, ´add_Game´); //Agregar un juego
$app->put(´/games/v1/{id}´, ´update_Game´); //Actualizar un juego
$app->delete(´/games/v1/{id}´, ´delete_Game´); //Eliminar un juego
$app->run();
?>
6) Paso :
Crear el archivo llamado functions.php con el siguiente contenido:
function all_Games($response) {
$sql = "SELECT * FROM games";
try {
$stmt = getConnection()->query($sql);
$games = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
return json_encode($games);
} catch(PDOException $e) {
echo ´{"error":{"text":´. $e->getMessage() .´}}´;
}
}
function select_Game($request) {
$id = $request->getAttribute(´id´);
$sql = "SELECT * FROM games where id=:id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("id", filter_var($id, FILTER_SANITIZE_STRING));
$stmt->execute();
$games = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
return json_encode($games);
} catch(PDOException $e) {
echo ´{"error":{"text":´. $e->getMessage() .´}}´;
}
}
function add_Game($request) {
$emp = $request->getParsedBody();
$sql = "INSERT INTO games (nombre, plataforma, ano, genero) VALUES (:nombre, :plataforma, :ano, :genero)";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("nombre", filter_var($emp["nombre"], FILTER_SANITIZE_STRING));
$stmt->bindParam("plataforma", filter_var($emp["plataforma"], FILTER_SANITIZE_STRING));
$stmt->bindParam("ano", filter_var($emp["ano"], FILTER_SANITIZE_STRING));
$stmt->bindParam("genero", filter_var($emp["genero"], FILTER_SANITIZE_STRING));
$stmt->execute();
$emp["id"] = $db->lastInsertId();
$db = null;
echo json_encode($emp);
} catch(PDOException $e) {
echo ´{"error":{"text":´. $e->getMessage() .´}}´;
}
}
function update_Game($request) {
$emp = $request->getParsedBody();
$id = filter_var($request->getAttribute(´id´), FILTER_SANITIZE_STRING);
$sql = "UPDATE games SET nombre=:nombre, plataforma=:plataforma, ano=:ano, genero=:genero WHERE id=:id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("nombre", filter_var($emp["nombre"], FILTER_SANITIZE_STRING));
$stmt->bindParam("plataforma", filter_var($emp["plataforma"], FILTER_SANITIZE_STRING));
$stmt->bindParam("ano", filter_var($emp["ano"], FILTER_SANITIZE_STRING));
$stmt->bindParam("genero", filter_var($emp["genero"], FILTER_SANITIZE_STRING));
$stmt->bindParam("id", filter_var($id, FILTER_SANITIZE_STRING));
$stmt->execute();
$db = null;
echo json_encode($emp);
} catch(PDOException $e) {
echo ´{"error":{"text":´. $e->getMessage() .´}}´;
}
}
function delete_Game($request) {
$id = filter_var($request->getAttribute(´id´), FILTER_SANITIZE_STRING);
$sql = "DELETE FROM games WHERE id=:id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("id", $id);
$stmt->execute();
$db = null;
echo ´{"error":{"text":"se elimino el juego"}}´;
} catch(PDOException $e) {
echo ´{"error":{"text":´. $e->getMessage() .´}}´;
}
}
?>
El siguiente paso es probar tus rutas, lo puedes hacer con POSTMAN (Herramienta para hacer peticiones a APIs que nos permiten probar nuestra API de manera sencilla)
Con eso ya estamos listos, si has seguido los pasos seguro habrás creado tu REST API de manera satisfactoria
Espero les haga de ayuda este post!!
Puedes ver este post en mi pagina web oficial