9-Tutorial: Creación de una API RESTful con Laravel (sin autenticación)
Tutorial: Creación de una API RESTful con Laravel (sin autenticación)
Aquí te muestro cómo crear una API básica en Laravel sin sistema de autenticación, ideal para prototipos rápidos o APIs públicas.
Paso 1: Crear el proyecto
laravel nuevo api-simple
# O
composer create-project laravel/laravel api-simple
cd api-simplePaso 2: Configurar la base de datos
Edita el archivo .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=api_simple
DB_USERNAME=root
DB_PASSWORD=Paso 3: Crear modelo, migración y controlador
Vamos a crear un modelo Publicacion:
php artisan make:model Publicacion -mcrPaso 4: Definir la migración
Edita database/migrations/xxxx_create_publicacions_table.php:
public function up()
{
Schema::create('publicacions', function (Blueprint $table) {
$table->id();
$table->string('titulo');
$table->text('contenido');
$table->string('autor')->default('Anónimo');
$table->timestamps();
});
}Ejecuta la migración:
php artisan migratePaso 5: Configurar el modelo
Edita app/Models/Publicacion.php:
protected $fillable = [
'titulo',
'contenido',
'autor'
];Paso 6: Crear el controlador API
Edita app/Http/Controllers/PublicacionController.php:
<?php
namespace App\Http\Controllers;
use App\Models\Publicacion;
use Illuminate\Http\Request;
class PublicacionController extends Controller
{
// Obtener todas las publicaciones
public function index()
{
return response()->json([
'data' => Publicacion::all(),
'message' => 'Publicaciones obtenidas correctamente'
], 200);
}
// Crear nueva publicación
public function store(Request $request)
{
$request->validate([
'titulo' => 'required|string|max:255',
'contenido' => 'required|string',
'autor' => 'nullable|string|max:100'
]);
$publicacion = Publicacion::create($request->all());
return response()->json([
'data' => $publicacion,
'message' => 'Publicación creada correctamente'
], 201);
}
// Obtener una publicación específica
public function show($id)
{
$publicacion = Publicacion::find($id);
if (!$publicacion) {
return response()->json([
'message' => 'Publicación no encontrada'
], 404);
}
return response()->json([
'data' => $publicacion,
'message' => 'Publicación obtenida correctamente'
], 200);
}
// Actualizar publicación
public function update(Request $request, $id)
{
$publicacion = Publicacion::find($id);
if (!$publicacion) {
return response()->json([
'message' => 'Publicación no encontrada'
], 404);
}
$request->validate([
'titulo' => 'sometimes|string|max:255',
'contenido' => 'sometimes|string',
'autor' => 'nullable|string|max:100'
]);
$publicacion->update($request->all());
return response()->json([
'data' => $publicacion,
'message' => 'Publicación actualizada correctamente'
], 200);
}
// Eliminar publicación
public function destroy($id)
{
$publicacion = Publicacion::find($id);
if (!$publicacion) {
return response()->json([
'message' => 'Publicación no encontrada'
], 404);
}
$publicacion->delete();
return response()->json([
'message' => 'Publicación eliminada correctamente'
], 200);
}
}Paso 7: Definir las rutas
Edita routes/api.php:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PublicacionController;
// Rutas públicas para Publicaciones
Route::apiResource('publicaciones', PublicacionController::class);
// Ruta de ejemplo adicional
Route::get('/publicaciones/recientes', [PublicacionController::class, 'recientes']);Paso 8: Añadir método adicional al controlador (opcional)
Si quieres usar la ruta /publicaciones/recientes, añade este método al controlador:
public function recientes()
{
$publicaciones = Publicacion::orderBy('created_at', 'desc')
->take(5)
->get();
return response()->json([
'data' => $publicaciones,
'message' => 'Últimas 5 publicaciones obtenidas'
], 200);
}Paso 9: Probar la API
Puedes probar los endpoints con:
Obtener todas las publicaciones
GET http://localhost:8000/api/publicacionesCrear nueva publicación
POST http://localhost:8000/api/publicaciones
Content-Type: application/json
{
"titulo": "Mi primera publicación",
"contenido": "Este es el contenido de mi publicación",
"autor": "Juan Pérez"
}Obtener publicación específica
GET http://localhost:8000/api/publicaciones/1Actualizar publicación
PUT http://localhost:8000/api/publicaciones/1
Content-Type: application/json
{
"titulo": "Título actualizado"
}Eliminar publicación
DELETE http://localhost:8000/api/publicaciones/1Obtener publicaciones recientes
GET http://localhost:8000/api/publicaciones/recientesPaso 10: Habilitar CORS (si necesitas acceder desde frontend)
Instala el paquete CORS:
composer require fruitcake/laravel-corsHabilítalo en app/Http/Kernel.php añadiendo en el array $middleware:
\Fruitcake\Cors\HandleCors::class,Conclusión
Ahora tienes una API RESTful básica sin autenticación con:
Operaciones CRUD completas
Validación de datos
Respuestas JSON estructuradas
Mensajes de estado claros
Comentarios
Publicar un comentario