---
title: 'Crea una REST API CRUD en Laravel desde Cero'
source: 'https://youtube.com/watch?v=eLI8c_NtkBk'
video_id: 'eLI8c_NtkBk'
date: 2026-06-16
duration_sec: 0
---

# Crea una REST API CRUD en Laravel desde Cero

> Source: [Crea una REST API CRUD en Laravel desde Cero](https://youtube.com/watch?v=eLI8c_NtkBk)

## Summary

This tutorial provides a hands-on, step-by-step guide to building a RESTful API with CRUD operations in PHP using the Laravel framework. Starting from a fresh Laravel project, it covers creating a student resource with full endpoints, database migrations, model creation, validation, and deployment options.

### Key Points

- **Video overview and goal** [[0:05]] — The tutorial aims to create a REST API from scratch using Laravel. The API will manage students with CRUD operations (POST, GET, PUT, PATCH, DELETE) and be tested via Thunder Client in VS Code.
- **Creating a new Laravel project** [[1:38]] — Uses Composer to create a Laravel project: `composer create-project laravel/laravel laravel-crud-api`. Moves the project to VS Code, then starts the development server with `php artisan serve`.
- **Installing API routes** [[2:57]] — Runs `php artisan install:api` to generate dedicated API routes (`routes/api.php`) and configure bootstrap for the API. This adds an `api.php` file alongside `web.php`.
- **Defining basic API routes** [[3:40]] — Demonstrates defining a GET route to `/students` that returns a text string. Then shows how to add routes for POST, PUT (with `{id}`), DELETE, and GET a single student, all returning placeholder texts.
- **Introduction to Thunder Client** [[6:12]] — Recommends Thunder Client (VS Code extension) for testing API endpoints. Tests the basic routes: GET list, GET single, POST, PUT, DELETE – all return placeholder texts.
- **Creating a database migration** [[7:12]] — Runs `php artisan make:migration create_students_table` then edits the migration to add columns: `name`, `email`, `phone`, `language`. Runs `php artisan migrate` to create the table.
- **Creating the Student model** [[9:58]] — Uses `php artisan make:model Student` and customises it with `$table = 'students'` and `$fillable` array containing `name`, `email`, `phone`, `language`.
- **Creating the StudentController** [[11:08]] — Runs `php artisan make:controller Api/StudentController` to create a controller inside an Api subdirectory. Defines methods: `index`, `store`, `show`, `update`, `destroy`, and `updatePartial`.
- **Connecting routes to controller methods** [[12:01]] — Updates `routes/api.php` to point each route to the appropriate controller method (e.g., `Route::get('/students', [StudentController::class, 'index'])`).
- **Implementing the index method** [[13:00]] — In `index()`: fetch all students via `Student::all()`, check if empty (return 'No students found'), else return JSON with status 200.
- **Implementing the store method with validation** [[15:03]] — In `store()`: validate request data (name, email, phone, language required; email must be valid). Uses `Validator::make()`. If validation fails, return errors; else create the student and return with status 201.
- **Advanced validation rules** [[19:15]] — Adds more constraints: name max 255 chars, email unique, phone digits with size 10, language must be 'english', 'spanish', or 'french'.
- **Implementing show method** [[20:18]] — In `show($id)`: find student by ID, if not found return 404; else return student with status 200.
- **Implementing destroy method** [[21:40]] — In `destroy($id)`: find student, if not found return 404; else delete and return 'Student deleted' with status 200.
- **Implementing update method (PUT)** [[22:59]] — In `update(Request $request, $id)`: find student, validate all fields as required, then update each attribute from request and save. Returns updated student with status 200.
- **Implementing updatePartial method (PATCH)** [[25:27]] — In `updatePartial(Request $request, $id)`: validate without required fields, then conditionally update only present attributes (`if ($request->has('name'))`). Save and return updated student.
- **Switching to MySQL database** [[28:39]] — Creates a MySQL database (laravel_api_db) via phpMyAdmin, edits `.env` to change DB_CONNECTION to mysql, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD, then runs migrations again.
- **Deployment and additional resources** [[30:26]] — Mentions a bonus video for channel members on deploying to Railway. Recommends other deployment tutorials and invites to join community (Discord, Twitter, Instagram, TikTok, website).

### Conclusion

By following this tutorial, you can build a fully functional CRUD REST API with Laravel, including database integration, validation, and multiple database backends. The final API is testable via Thunder Client and can be easily extended for more complex use cases.

## Transcript

Hey coders el día de hoy Les traigo un
video práctico en donde vamos a aprender
Cómo crear una red Api desde php
utilizando el framework larabel est es
un video bastante práctico en el que
ustedes van a ir creando desde cero un
ipi y al final van a ir probándolo a
través de un programa llamado Thunder
cline que es en realidad una extensión
de visel Studio code la r Api que vamos
a estar creando es muy sencilla lo que
nos va a permitir es hacer lo siguiente
yo puedo hacer una petición post a mi
Api students en donde yo puedo guardar
un nombre por ejemplo de un estudiante
voy a guardar un nombre que se llama
Ryan Rey el estudiante voy a colocarle
un cor coro por ejemplo Ryan @gmail o
Ryan @m envío y esto crea un registro Y
si hago una petición get y envío a
estudiantes también puedo obtener una
lista de estudiantes que están
almacenados en la base de datos también
puedo obtener un único estudiante o
también puedo eliminar un estudiante con
delete puedo eliminar de todos el
estudiante uno estudiante eliminado Y si
hay una petición que es de todos los
estudiantes pues ya no está el
estudiante que acabo de eliminar o
también puedo actualizar con un put
puedo decirle Okay del estudiante número
dos Quiero actualizar este Ryan rey por
Ryan por ejemplo mcmillan y envío y el
dato debería actualizarse sin embargo
este correo yo lo tengo que cambiar por
ejemplo aquí le digo Debería ser Ryan
@gmail envío y con esto se actualiza el
dato o si no quiero actualizar todo
también puedo enviar un Patch y le digo
de estudiantes dos tan solo Quiero
actualizar el correo no quiero
Actualizar más datos aparte del correo
entonces aquí puedo decirle Ryan
@outlook y envío y ya estaría entonces
lo que estoy creando aquí no es más que
un crud de una red sapi pero todo esto
lo vamos a crear desde cero creando
comandos del arabel alterando nuestro
código y luego al final les voy a
enseñar Cómo desplegarlo también en voy
a enseñar todo el proceso de crear un
crw en una red sapi y luego van a poder
extenderlo si ustedes continúan
estudiando este framework Así que si les
interesa pues vamos a empezar lo primero
que voy a hacer es crear un proyecto del
arabel desde cero Así que voy a abrir
una terminal y el primer Comando que voy
a ejecutar es el comando C desktop para
ubicarme en mi escritorio y voy a estar
utilizando El Comando de composer para
crear un proyecto si ustedes no lo
tienen instalado aún pueden utilizar el
video que le dejo en la descripción para
aprender cómo instalarlo El Comando es
el siguiente es composer ge create
project larabel sl larabel Y en este
caso el lo vamos a llamar larabel crot o
gu crud gu Api y vamos a dar un enter
esto lo que va a hacer es ya crear aquí
en mi escritorio todo un proyecto de
larabel entonces a partir de Aquí vamos
a simplemente arrastrarlo dentro de
nuestro editor de código y vamos a
empezar esperando a que termine de
instalarse todas estas dependencias en
la terminal aquí Ya terminó de
instalarse los paquetes Así que
simplemente puedo cerrar la terminal y
ahora sí yo puedo venir en visual Studio
code y El Comando que voy a estar
ejecutando inicialmente para ejecutar el
proyecto sería php artisan serf y con
esto si doy un enter lo que va a hacer
es ejecutar un servidor en el puerto
8000 esto quiere decir que si abro un
navegador y escribo el local Host 8000 y
doy un enter vamos a dar una bienvenida
típica del arabel Okay esta es la página
del arabel que nos permite entender que
ya el proyecto está funcionando ahora
para empezar a editarlo esto ya genera
un servidor en vivo lo que significa que
si nosotros hacemos alguna edición esto
se va a reiniciar automáticamente pero
en nuestro caso no vamos a estar
utilizando larel para crear algún
proyecto que tenga interfaces sino
simplemente voy a estar utilizándolo
para crear un ipi entonces para poder
hacer eso primero voy a venir aquí en la
consola voy a cancelarlo con control c y
el primer Comando que voy a ejecutar es
el comando php p artisan install do. Api
si doy un enter esto lo que va a hacer
en nuestro proyecto es aquí aparte de la
carpeta routes en donde están nuestros
archivos de console y web va a aparecer
un nuevo archivo que se va a llamar Api
y también va a configurar aquí en
bootstrap el archivo que va a arrancar
la ipi es decir va a poder configurar
tanto unas rutas dedicadas a una red Api
y en App nosotros vamos a ver que ya lo
altera también para que lea ese archivo
simplemente para darles un recordatorio
en larabel las carpeta r nos sirve para
poder crear rutas o Ur les que el
navegador puede visitar De hecho aquí en
Api ya tenemos una que se llama user
pero en mi caso voy a reemplazarla para
darles una pequeña idea si nosotros
queremos hacer una petición sencilla yo
voy a cambiar esto y voy a colocarle
rout do pun get y aquí le voy a colocar
entre comillas simples y un Slash
students por ejemplo entonces supongamos
que estoy creando una ipi de estudiantes
voy a llamar students y aquí voy a crear
una función sencilla y esta función lo
que va a hacer es retornar un texto por
ejemplo quiero que retorne student list
Ahí está entonces coloco un punto y coma
aquí al final también un punto y coma y
con esto ya tengo una ruta ahora este
router no sé que Así sio es un Route y
con esto ya estaría en este caso no
estoy utilizando el módulo request vamos
a ejecutar esto simplemente Recuerden
que aquí en la terminal primero tengo
que ejecutar algo y por ejemplo aquí lo
primero que me pide es que cuando yo
ejecute El Comando install Api algo que
se me quedó pendiente es Okay una nueva
base de datos o una nueva migración de
base de datos va a ser ejecutada quieres
hacerlo vamos a escribir Yes enter y
listo con esto lo que va a hacer es que
ahora ha alterado nuestro modelo de base
de datos Por cierto cuando composer Crea
una base de datos es lo que hace Es que
aquí en database Crea una base de datos
de sqlite por lo que no necesitan
configurar nada de momento Entonces
vamos a ejecutar esto php artis and serf
Y si doy un enter vamos a venir en
nuestro navegador en el local Host 8000
sl students Y si doy un enter esto
debería llevarme una ruta pero recuerden
que como estoy creando una Api esto debe
empezar con sl Api sl students y allí
veo un texto que dice student list
entonces con esto ya estamos
respondiendo una petición get o estamos
respondiendo algo al cliente cuando
visite esa página o en este caso esa URL
ahora si nosotros queremos crear un crud
vamos a cambiarlo por ejemplo porque no
tan Solamente voy a querer obtener
estudiantes sino también crearlos
actualiz darlo Y eliminarlos entonces lo
que yo puedo hacer es copiar esta ruta
vamos a pegarlo aquí debajo y ya no va a
ser get sino post post a students y Aquí
vamos a colocarle un texto que se diga
creating students o creando estudiantes
luego también voy a copiarlo otra vez
voy a pegarlo y también puedo tener un
método put o Patch depende de lo que
ustedes utilicen put o Patch son
similares el put permite actualizar todo
un objeto mientras que Patch permite
actualizar parcialmente en mi caso voy a
escoger put y vamos a colocar students y
Aquí vamos a colocar un texto que diga
actualizando estudiante Ahora aquí no
voy a actualizar todos los estudiantes
sin no tan solamente uno de ellos así
que una ruta en arabel es colocar un
Slash y para indicar que después va a
venir un ID voy a colocar entre llaves
un ID de esta forma pues indica que aquí
voy a tener que colocar un número o
algún texto después de students y de
hecho esto de aquí lo voy a copiar y lo
voy a pegar otra vez porque es lo mismo
para el delete y aquí voy a colocarle
eliminando estudiante listo con esto
Ahora ya tengo el crud completo e
incluso así como puedo obtener una lista
de estudiantes también puedo obtener uno
solo así que voy a copiar esto de aquí
voy a pegarlo debajo y también va a
funcionar con get Solo que esta ruta va
a decir de todo todos los estudiantes
quizás tan solo quiero uno de esos
estudiantes por ID entonces Aquí voy a
colocar obteniendo un estudiante vamos a
colocarle y aquí voy a colocarle
obteniendo lista de estudiantes listo
Entonces con eso ya tengo un crud vamos
a probarlo para poder hacerlo yo Les
recomiendo que instalen una extensión
que se llama Thunder Cent o también
pueden hacerlo a través de otro programa
o cliente res depende de cuál usen en mi
caso voy a buscar Thunder Cent aquí en
mis extensiones Okay se escriben de esta
forma simplemente vienen aquí y le dan
en instalar en mi caso yo ya lo tengo
instalado y cuando lo instale van a ver
un icono como este un icono de un
círculo con un rayo de hecho voy a
limpiar aquí mi historial ustedes van a
ver algo como esto Vamos a darle un New
request y por ejemplo yo puedo hacer una
petición get http 2 localhost 8000 slapi
students y doy un get y me dice
obteniendo la lista de estudiantes puedo
colocar de students quiero tan solo uno
y me dice obteniendo un estudiante si
hago una petición post a students y
envío me dice creando estudiantes si
hago una petición put vamos a ver Bueno
ahí me da un error porque student lleva
un ID un uno por ejemplo y ahora sí me
hice actualizando estudiante Y si doy un
delete con lo mismo ipi si algún número
me hice eliminando estudiante Okay ya
tengo el crud completo Entonces lo único
que me falta ahora es ya no tan
solamente Mostrar un texto sino que
quiero realmente consultar una base de
datos de verdad y quiero buscar o
alterar una base de datos Y enviar una
respuesta de vuelta entonces lo primero
que vamos a hacer es que vamos a crear
una migración para poder hacerlo vamos a
venir en la terminal de visual Studio
code voy a cancelarlo vamos a limpiar y
el primer Comando que voy a ejecutar es
el comando php artisan y aquí voy a
ejecutar El Comando make migration y
luego voy a colocar el nombre a una
tabla por ejemplo en este caso voy a
colocar create student table como el
nombre de la migración voy dar un enter
Y eso lo que va a hacer es que dentro de
nuestro proyecto en la ruta por ejemplo
llamada database migrations ha creado un
nuevo archivo Aquí está entonces vamos a
buscarlo digo database migrations y va a
ser el último archivo de hecho el último
que lo ha creado en esta fecha doy un
click Y esto es lo que ha creado él ha
creado una tabla llamada student y aquí
por ejemplo pueden ver que he colocado
un ID y un timestamp ahora dónde sacó el
nombre Bueno cuando yo creé la tabla le
coloqué create y le coloqué el nombre de
la tabla student Table Okay entonces de
esta forma es como yo al final voy a
poder decirle Okay este es el nombre de
la tabla Pero bueno vamos a alterar un
poco porque yo no quiero tan solamente
un ID y fecha sino que también quiero
colocar un nombre un correo y demás
Entonces por ejemplo yo puedo copiar
esta línea y le digo también así como
voy a recibir un table ID voy a recibir
un table stram y aquí yo espero que la
columna de la tabla se llama name luego
puedo copiar esto también le digo quiero
esperar un email vamos a copiarlo otra
vez voy a esperar un font vamos a
copiarlo otra vez quiero esperar un
Language un lenguaje del estudiante Por
ejemplo si está aprendiendo algún
lenguaje de programación por ejemplo y
ya estaría Entonces esta es la tabla al
final que yo quiero que se cree ya sea
en una tabla s sql como puede ser mysql
o mysql o sql server o sqlite en este
caso como estamos en sqlite se va a
crear en esa base de datos si ustedes
quieren ver qué es lo que tiene la base
de datos de sqlite yo Les recomiendo que
instalen una extensión de visual Studio
code que se llama sqlite vier de hecho
pueden buscarlo como sqlite y van a
llegar en esta extensión de aquí sqlite
vier y simplemente lo instalan y una vez
instalado lo que va a hacer o lo que le
va a permitir visual Studio c es ahora
verlo aquí mismo dentro de una pestaña
es decir pueden ir a la base de datos de
database sqlite dan un clic derecho y le
dan open en Wi y aquí colocan sqlite
Beer da un click y pueden ver que aquí
ahora tenemos las tablas que están
dentro de sqlite es decir hay una tabla
uses hay una tabla sessions y demás es
decir las tablas que crea eh larbel
cuando se crea un proyecto nuevo pero
bueno en nuestro caso como podemos ver
no vemos la tabla student porque tenemos
que migrar la es decir tenemos que
transformar este código de aquí en una
tabla por suerte no se hace manualmente
sino que vamos a abrir la terminal y el
siguiente Comando que voy a ejecutar es
el comando php artisan migrate y lo que
va a hacer es que va a leer el código y
ahora si nuevamente abro mi base de
datos clic derecho Open with vamos a
colocarle esq vier vamos a ver que ahora
Aquí está mi tabla student Y si yo abro
Aquí está el ID el name el email el font
el Language la fecha de creación y
actualización que es justamente ese Time
stamp que venía en el propio modelo
cuando lo abrimos es decir este de aquí
ahora con esto hemos creado una tabla
Pero así como tenemos una tabla tenemos
que crear código en nuestra aplicación
para poder interactuar con esa tabla
porque de momento lo único modelo que
tengo aquí es el modelo de usuario que
es una forma de poder Consultar los
datos de un usuario pero ahora como
tengo una tabla también de estudiantes
Quiero crear un modelo de estudiantes
entonces también se hace con un comando
de terminal Así que puedo venir en la
terminal y puedo decir php artisan y ya
no migration sino model y Aquí vamos a
llamarle a este modelo student con una s
mayúscula porque los modelos Por lo
general empiezan de esa forma user
student con con la primera letra
mayúscula doy un enter ya se lo que va a
crear es un nuevo archivo llamado studen
php como pueden ver y aquí es donde
vamos a alterarlo por defecto él crea
Aquí una especie de template nosotros lo
que vamos a hacer es extender ese
template entonces debajo de H Factory
voy a colocarle protected y aquí voy a
colocarle el nombre de una variable que
es Table y el nombre va a ser igual a
student por ejemplo este es el nombre de
la tabla o bueno en este caso es el
nombre del modelo que va a estar
relacionado con esta tabla lo siguiente
que voy a decir es protected nuevamente
y voy a colocarle un fillable que es
básicamente para decirle qué Campos van
a poder ser alterados y aquí voy a
nombrar los campos de name email address
y font de hecho si ustedes verifican
estos datos de aquí y vienen en la
migración es decir en database
migrations en el último archivo name
email font y lenguage es lo que necesito
Así que aquí sería lo mismo name email y
Language y aquí un punto y coma al final
del arreglo para simplemente decirle que
esos son los únicos Campos una vez tengo
el modelo lo siguiente es crear un
controlador Entonces vamos a abrir la
terminal nuevamente y el siguiente
Comando que voy a hacer es ejecutar php
artisan May controller y luego un nombre
para nuestro controlador en este caso
voy a llamarle student controller y doy
un enter esto lo que hace de hecho es
que si nosotros entramos en App en http
vamos a ver que ahora hay un student
controller De hecho si ustedes no les
gusta que esté aquí o quieren ordenarlo
un poco mejor lo pueden eliminar y
pueden volver a ejecutar El Comando pero
le pueden colocar un Slash al inicio
pueden decirle que vaya por inicio en
una carpeta Api Slash student controller
y da un enter y lo vo a volver a crear
Pero dentro de una carpeta Api entonces
este student controller lo que va a
tener justamente los métodos o las
funciones que se van a ejecutar cuando
se visite alguna URL por ejemplo aquí yo
puedo crear en esta clase de student
controller una función nueva que va a
ser pública es decir va a poder ser
accedida vamos a colocarle Index y
debajo voy a decirle que va a retornar
un texto que diga obteniendo lista de
estudiantes Este es un método que al
final cualquier otro parte del código
puede llamarlo si vengo nuevamente en la
carpeta routes en Api y aquí por ejemplo
yo tengo mi ruta que se llama students
en lugar de tenerlo aquí que dice
obteniendo lista de estudiantes vamos a
quitar esa función y voy a llamarlo
desde el controller Pero primero tengo
que importarlo le digo vas a utilizar
desde app y aquí empezamos a nombrar
cada uno de esos de hecho es de use app
y bueno desde aquí vamos a colocarle una
contrabarra le coloco http controll Api
studion controller punto y coma y aquí
le digo desde aquí voy a llamar la
función vamos a colocarle un un arril y
aquí voy a llamarle student controller
dos puntos dos puntos y vamos a
colocarle una clase y aquí le colocamos
el nombre del método en este caso se va
a llamar Index porque así le llamé yo De
hecho si ustedes Ven aquí dice
obteniendo lista de estudiantes vamos a
colocarle desde el controller entonces
si yo guardo esto y vengo a la terminal
Y nuevamente escribo php artisan serf y
si vengo aquí en el navegador y refresco
pueden ver que di obteniendo lista de
estudiantes desde el controller ahora
por supuesto nosotros no vamos a querer
tan solo ver un texto sino que vamos a
querer consultar una base de datos Así
que lo que vamos a hacer es que en lugar
de tan solamente retornar un texto esto
vamos a consultar trayendo el modelo de
datos entonces Aquí voy a decirle
también voy a utilizar desde app y aquí
llamamos models student punto y coma y
aquí le voy a colocar Okay voy a llamar
el modelo estudiantes este tiene un
método llamado all voy a colocar en
punto y coma y esto lo que me va a
retornar es una lista voy a decir un
arreglo de datos Aquí voy a guardar una
variable llamada students y este
students lo que voy a hacer es que
primero voy a confirmar si no está vacío
Porque si este arreglo está vacío lo que
va a hacer es que no voy a poder
retornar nada de hecho incluso yo puedo
retornarlo directamente puedo decir en
lugar de ese ret un texto le puedo decir
voy a retornar un response vamos a
colocar la función y le digo voy a
retornar un método Jason y aquí adentro
le coloco el arreglo la variable
students con un método 200 que significa
que todo fue bien si yo guardo esto y
vengo aquí en la aplicación y refresco
pueden ver que me Der rotor un arreglo
vacío pero bueno quizás ustedes no
quieren retornar Esto entonces lo que
podemos hacer es que antes yo le puedo
colocar una condicional y le digo si
estudiantes está vacío si is empty
entonces voy a retornar un mensaje o un
texto aquí que diga no hay estudiantes
registrados de hecho si ustedes quieren
eh ordenarlo Incluso un poco mejor lo
que pueden hacer aquí es crear una
variable que se llame Data y aquí pueden
colocarle que primero van a esperar un
mensaje y luego un estatus por ejemplo
vamos a colocarle aquí un estatus que
sea 404 si coloco un punto y coma y
luego le pueden recién decir voy a
retornar aquí el mensaje que va a ser un
response con los datos Entonces esto es
bl un poco más ordenado entonces si yo
guardo y como no hay datos si yo
refresco aquí me dice no se encontraron
estudiantes estatus 404 en realidad no
Debería ser un 404 Debería ser un 200
nada más porque la respuesta Sí fue
correcta Solo que aquí no no hubieron
nada o decir No se encontró nada
estudiantes Okay el enfoque de retornar
el arreglo tampoco es incorrecto Así que
también lo pueden utilizar solamente es
para mostrarles otro eh otra forma de
responder De hecho si ustedes quieren
retornar esto de aquí también pueden
hacer lo mismo Pueden decir voy a
retornar un arreglo Data va a estar
conformado tanto por students vamos a
colocarle students que va a ser el
arreglo de estudiantes y luego un
estatus 200 como mensaje entonces Esto
va va a convertirse en un Jon Entonces
le digo voy a retornar aquí un Data y
aquí un punto y coma y si guardo y vengo
en la aplicación y refresco me retorna
studens vacíos un estatus 200 ahora
nosotros no tan Solamente vamos a querer
listar sino que vamos a querer crear
también entonces vamos a crear otra
función aquí debajo esta función vamos a
Bueno Este es un método de hecho vamos a
llamarle un public function y este se va
a llamar Store por ejemplo de almacenar
y lo que va a esperar es un dato que
viene desde el frontend esto lo recibe a
través de un objeto request que y lo va
a guardar una variable request adentro
lo primero que vamos a hacer es que
cuando recibamos un dato vamos a
validarlo es decir cuando yo voy a
enviar un dato aquí en el Store primero
voy a recibir algo desde el cliente y
tengo que esperar que ese dato sea
correcto por suerte para validar larbel
ya incluye un paquete para poder hacer
eso entonces puedo venir aquí y le puedo
decir use y vamos a colocarle aquí un
paquete que se llama illuminate super
fake Case y validator y aquí nosotros ya
podemos llamarlo en el Store por ejemplo
voy a decir de validator vamos a
colocarle eh dos puntos make y aquí voy
a colocar una variable que se llama
request all lo voy a ejecutar y luego
vamos a colocar el arreglo de datos que
voy a esperar validar Por ejemplo yo voy
a esperar me pasen por ejemplo un name
un email un font y un Language pero los
datos que yo voy a validar aquí son que
todos son requeridos y el ime la parte
de requerido aquí le colocan un Pipe es
decir como un un palito aquí y en este
caso se le coloqué también un correo Es
decir debe aparentar un Stream que sea
un correo un punto y como al final y el
validator lo que me va a retornar al
final es justamente un una respuesta
vamos a colocarle aquí validator en una
variable en minúscula y de hecho aquí me
da un error el validator porque aquí lo
he escrito mal aquí Debería ser con u
illuminate Ahora sí y listo ahora con
este objeto validator nosotros podemos
ejecutar una función un un método que
diga si el validator y aquí le llamamos
si su método fails es decir si esto
falla de hecho Aquí vamos a colocarle un
guión si esto falla es decir si al final
hay un error en la validación pues vamos
a colocarle una respuesta vamos a crear
una variable Data y le digo que voy a
retornar un mensaje que diga error en la
validación de datos voy a mostrar los
errores y un estatus 400 que significa
que todo fue incorrecto el dato que me
envió y luego le voy a retornar esto al
cliente un response con un json Data con
un estatus 400 ahora si en todo caso los
datos que me envió son correctos es
decir no hubo ningún error entonces lo
que voy a hacer es crear una variable
llamada student voy a guardar aquí y voy
a decirle que del modelo student voy a
estar creando algo de hecho aquí no es
created sino create Aquí voy a ejecutar
esta función y adentro voy a colocarle
un arreglo con los datos que le voy a
pasar que en este caso sería el name el
email font y el Language por supuesto
todo estos vienen de request que es
justamente el dato que envía el cliente
la aplicación cliente Aquí voy a colocar
un punto y coma y finalmente con esto le
digo si no hay un estudiante Al momento
de guardar si no pudiste crear un
estudiante entonces voy a retornar un
Data con un mensaje que diga r crear al
estudiante un estatus 500 y retorno
estro al cliente pero si en todo caso sí
pudo crearlo entonces lo que voy a hacer
es retornar otro arreglo Data Aquí voy a
decirle que voy a retornar un estudiante
nuevo estatus 201 y voy a retornar esto
return response Jason Data 201 si yo
guardo esto intento crearlo entonces lo
que voy a hacer Es que voy a abrir un
Thunder client y por ejemplo voy a venir
en la petición y aquí voy a decirle voy
a enviar una petición post a Api
students y vamos a escoger aquí en esta
sección donde dice Body el dato que
queremos enviarle Aquí voy a colocar un
objeto Jason y voy a colocarle algo
sencillo por ejemplo vamos a colocarle
un dato vacío y envío y Bueno aquí me
está dando el dato creando estudiantes
Porque si bien he creado el controlador
no lo estoy usando vamos a venir en en
el archivo De Api y aquí donde tenemos
que crear en el post vamos a quitar esta
función y es el proceso similar al que
tenemos arriba es decir llamo el studing
controller de su Class el método Store
guardo y ahora sí esto reinicia el
código y si vengo aquí nuevamente y
envío vamos a ver que me retor un
mensaje de error y me dice error en la
validación de los datos el nombre el
campo del nombre es requerido el email
es requerido el fone es requerido y el
Language también okay Este es el
validator vamos a colocar los datos
correctos me dice el name es requerido
vamos a colocarle un name vamos a
colocarle cualquier cosa el email es
requerido vamos a colocarle cualquier
cosa y lo mismo vamos a copiar un esto
un par de veces y vamos a pegarlo y
vamos a colocarle también espero un font
y un Language de hecho solamente uno más
voy a quitar uno de aquí y sería un font
y un Language en el font voy a enviar
todo esto Vamos a darle enviar Y de
nuevo me están diciendo el dato que es
requerido bueno por aquí colocado una
coma vamos a enviarlo y ahora sí ha
validado nuevamente y solo me dice que
el email debería lucir como una
dirección de email entonces aquí le digo
okay esto es test @test comom y Si yo
envío pues ahora ya pedo crear un dato
dentro de la base de datos de hecho sé
que ha creado un dato porque aquí me ha
retornado también un ID y también una
fecha de creación y actualización
Entonces estos tres datos se generan en
la base de datos estos son los que yo le
envié ahora si ustedes quieren colocarle
algun unas validaciones un poco más
digamos producidas o extensas pues
pueden colocar el nombre es requerido y
Máximo pueden colocarle que es de 255
esto debe ser un email y debe ser único
también esto significa que si a crear un
estudiante con ese email pues ya no se
va a poder repetir el font también
pueden colocarle que esto espera un
dígito pueden colocarle un or y pueden
decirle que espera un dígito de 10 y
aquí abajo le puedo decir requerido e
lenguaje tan solo pueden enviarme por
ejemplo vamos a colocar lenguaje de
algunos idiomas Yo solo eso que me pase
un texto que sea english spanish y
también francés Entonces si no me pasa
ninguno de estos streams va a dar error
guardo envío me da un error me dice el
email ya está tomado Okay entonces tengo
que crear otro email test 2 El font
Debería ser 10 dígitos Okay el teléfono
1 2 3 4 5 se envío el lenguaje es
inválido el lenguaje Debería ser alguno
de los lenguajes spanish por ejemplo
envío y ahora sí lo ha creado Ahora sí
está validando la creación de datos Y
como ya habíamos hecho el get si yo hago
un get ipi students vamos a ver ahora un
arreglo con los dos usuarios que ya
había creado Esto es lo mismo desde el
navegador si yo refresco pueden ver que
í están los dos estudiantes creados
listo lo que vamos a hacer ahora es
entonces crear una función que nos va a
permitir poder obtener un estudiante es
decir aquí yo estoy listando todos los
estudiantes aquí estoy creando también
voy a crear otra función para obtener un
solo estudiante entonces voy a decir
public function o se llamale show esta
función va a esperar un parámetro un ID
para buscar y aquí le voy a decir voy a
buscar un estudiante y este estudiante
va a buscarse el modelo con el método
find y aquí nosotros hacemos una
validación le digo si no encontraste un
estudiante vas a retornar retornar
estudiante no encontrado estatus 400 y
es lo que vas a retornar al cliente este
Jason caso contrario Aquí voy a decirle
vas a crear una variable llamada Data
vas a retornar al estudiante con código
200 y esto es lo que al final vas a
retornarle al cliente y para que eso
funcione también lo tenemos que Añadir
en Api entonces vengo aquí aquí en Api y
así como tengo este students ID voy a
quitar todo esto y voy a decirle que
aquí voy a colocar un arreglo que diga
student control Class show Entonces
ahora sí si yo vengo en Thunder client y
digo voy a hacer una petición get de
estudiantes y quiero tan solo el
estudiante uno o el estudiante dos
simplemente coloco Slash un y me da el
estudiante uno esto también es igual en
el navegador porque el navegador permite
hacer peticiones get en la URL entonces
digo estudiantes dos ahí está el
estudiante 2s el estudiante uno ahí está
el estudiante uno okay con todos sus
datos listo entonces esa es la forma de
pedir un solo estudiante Ahora hay otra
función que también es muy similar que
al obtener un dato y es la función de
eliminar porque el eliminar también no
solo permite Buscar un usuario es decir
No solo permite buscarlo sino que va a
buscar y luego eliminar Entonces vamos a
hacerlo también vamos a empezar con
eliminar les digo voy a crear otra
función un public function se va a
llamar destroyed por ejemplo no puede
puede colocarle Cualquier nombre vamos a
colocarle que también espera un ID y
aquí le voy a decir vo a crear una
variable student que va a ser igual
student pun find y este student pun F va
a buscar el ID Aquí vamos a colocar lo
mismo si no hay un estudiante De hecho
voy a ir por partes para que no se les
haga tan complicado aquí primero Busco
el estudiante con el modelo de datos y
le digo si no hay un estudiante pues
vamos a colocarle que responde un Data
con un arreglo que diga message 404 pero
si sí hay un estudiante simplemente
vamos a ejecutar el método llamado
student delete que es lo que realmente
quita el registro de la base de datos y
ya luego después creo una variable Data
que va a responder algo al cliente le
digo el mensaje estudiante eliminado y
finalmente retorno un mensaje al cliente
guardo todo esto y ya con esta petición
tan sencilla si vengo en Api students en
delete delete Api student un envío me
dice eliminando estudiante y Bueno aquí
me dice esto y no está ejecutando la
lógica porque en Api también me faltó
venir aquí en delete y quitar esta
función y cambiarlo por studen
controller Class destroy Ahora sí vamos
a venir aquí en en Api delete Api
student 1 envío y mis estudiante
eliminado si yo lo vuelvo a buscar mis
estudiante no he encontrado De hecho si
yo vengo aquí en students en la lista de
estudiantes pueden ver que solo está el
estudiante dos no está el estudiante uno
okay Entonces ya está eliminando ahora
para actualizar eh De hecho es una
combinación en el que vamos a recibir un
ID y también vamos a recibir un request
Porque con el ID yo voy a buscar un dato
y con request yo voy a colocarle los
nuevos datos entonces para poder hacer
eso voy a venir aquí en public voy a
colocarle function vamos a colocarle
update voy a colocarle Aquí request
request voy a colocar un dó ID y aquí lo
primero que voy a hacer es buscar al
estudiante me digo vas a buscar un
estudiante con el modelo de student vas
a buscar por ID vamos a colocar el ID
con un punto y coma y luego vamos a
colocar lo mismo si no encontraste un
estudiante retorno 404 Y responde algo
al cliente con el mensaje 404 estudiante
no ha encontrado luego en todo caso si
sí encontró al estudiante vamos a
validar el request es decir los datos
del request ent vamos a colocarle aquí
debajo le digo de validator nuevamente
con los mismos datos de hecho name email
font y Language y aquí le voy a decir
vamos a validar estos datos vamos a
colocarle validator al objeto y debajo
lo mismo que cuando creamos le digo si
el validator falla si validator fails
entonces voy a colocar error en la
validación y allí el cliente va a poder
recibir los errores que está cometiendo
mal pero si él lo hace bien envía los
datos correctos pues lo siguiente es
actualizarlo Entonces le digo del
estudiante que has encontrado en su
propiedad name vas a colocar el request
name el email con el request email y así
con cada dato que me he enviado para
actualizar finalmente luego lo guardo le
digo de todas esas modificaciones voy a
guardar esos datos y finalmente voy a
crear una variable Data que es lo que va
va a retornar el cliente es decir el
estudiante actualizado con el estatus
200 e incluso también puedo colocarle un
message aquí que dígalo como estudiante
actualizado y finalmente retorno esto al
cliente guardo esto y si quiero ver este
código o la ejecución de este código
Pues voy a venir en Thunder Cent y le
voy a decir voy a hacer otra petición
pero recuerden que aquí he creado el
controller tengo que venir en Api Y
actualizarlo entonces aquí este put voy
a colocar aquí un student controller
update Y si guardo ya tengo mi crud
hecho de esta Api Entonces ya puedo
empezar a probar aquí en Api studens le
digo voy a hacer una petición put del
estudiante dos sería en todo caso porque
es el único que tengo si yo busco el uno
y envío me dice estudiante no he
encontrado pero si envío un un número
dos y los datos nuevos por ejemplo voy a
colocarle el nombre de este estudiante
voy a colocarle Ryan rey por ejemplo en
emil voy a colocarle rayan @m.com en
font vamos a dejar el número í y
Language enviar y ahora me responde el
dato actualizado si yo refresco Aquí
también me responde el dato que el id2
ha sido actualizado con todos estos
Campos listo Entonces es también es el
put ahora lo que pasa aquí es que el put
si yo no le coloco un dato por ejemplo
Supongo que yo no quiero actualizar
Language y envío Esto me dice que falta
el Language es decir porque el put trata
de actualizar todo el objeto y es
correcto entonces lo que voy a hacer es
también Añadir una ruta Patch entonces
voy a cerrar aquí y le digo Okay voy a
crear una ruta ruta más que es una ruta
Patch students ID también pero va a
funcionar en lugar de put con Patch y el
controller vamos a colocarle update
partial es decir vamos a crear un un
método del controlador que se llama
update partial que es igual que el resto
solamente que se llama de esta forma
entonces guardo y ahora vengo en student
controller y vamos a crear otro más voy
a minimizar esta función voy a venir
aquí debajo le voy a decir public voy
cre otra función llamada update partial
y lo mismo voy a esperar un request una
variable request de tipo request voy a
colocar un ID voy a colocarle aquí
buscando un estudiante un student voy a
Buscar del modelo estudiante si no
existe un mensaje y un return okay Ahí
va y luego si si se encontró estudiante
voy a colocarle un validator y la
diferencia Aquí está en el validator
porque el validator lo que va a hacer es
que ya no espera un requerido es decir
pues esto pueden venir cualquiera uno
solo y pueden ver que ya no está el
require solo que ahora Él espera que el
nombre sea bueno igual que el anterior
un máximo 255 de caracteres un email que
sea único los dígito de 10 pero lo único
que le ha quitado es el require es decir
cualquiera puede venir y No
necesariamente tiene que venir el resto
y ya luego lo mismo si validator fails
retorna un mensaje que diga el error con
la lista de errores y si no pues aquí
viene lo nuevo porque si estoy
recibiendo un campo name solo voy a
querer actualizar ese si Scion email y
demás pues tan solo voy a querer
actualizar un campo individualmente
entonces lo que vamos a hacer es colocar
aquí debajo vamos a colocarle aquí una
especie de condicional le digo si
request el objeto request que me está
enviando el cliente tiene la propiedad
name entonces voy a actualizar es
estudiante que encontrado en su propi
name Lo mismo para el resto si
estudiante tiene el email si estudiante
tiene el font si estudiante tiene tiene
el Language entonces sol lo voy a
actualizar cada uno de esos y finalmente
voy a guardarlo cuando ya modifique cada
uno de esos Campos individualmente
finalmente voy a retornar una variable
que se llame Data con un mensaje que
diga estudiante actualizado y finalmente
retorno esto al cliente Si guardo esto y
vengo Ahora sí en Thunder client
nuevamente y le digo voy a hacer ya no
un put sino un Patch vamos a colocarle a
ipi student 2 y dig no quiero actualizar
todos los datos sino que Quiero
actualizar el nombre nada más pues aquí
le digo vamos a colocar Jo mcmillan y
envío y este es el único campo que se ha
actualizado en estudiante 2s y yo vengo
aquí en en cliente y refresco debería
actualizarse pero lo que pasa es que
quizás no está utilizando el controller
vamos a verlo en Api tengo el Patch
student ID update partial vamos a ver si
se llama así update partial De hecho
aquí no se ha ejecutado correctamente
vamos a volver a enviarlo Y al parecer
me está enviando el mismo dato que estoy
recibiendo vamos a ver por qué Ah bueno
aquí me está enviando Data y Data no
luce de esta forma voy a venir
nuevamente en Api en rout Patch students
ID voy a cancelar aquí el servidor y voy
a volver a ejecutarlo quizás ha fallado
eso Okay vamos a volver a hacer el
update voy a cambiarlo a un students un
a ver si cambia el valor estudiantes dos
envío y tan solo está actualizando eso
pero en realidad no lo está cambiando De
hecho aquí la razón de que me esté
devolviendo esto por aquí tengo un
return que se añadió con el copilot
Bueno vamos a quitarlo en el validator
antes no tenemos que hacer nada Solo
validar eso vamos a enviar nuevamente y
ahora sí ya lo está actualizando como
pueden ver son los mismos datos
solamente que ha cambiado el name Luego
si ustedes quieren actualizar otros
datos pues colocan aquí un email y le
dice también Quiero actualizar el email
no va a ser Ryan sino Joe envían y esto
falla porque el email Debería ser un
email válido entonces voy a colocarle y
@b.clean
a querer utilizar mysql entonces una
forma de modificar esto es si ustedes
tienen mysql instalado en mi caso yo
tengo aquí un programa que se llama Sam
es un programa bastante utilizado desde
hace mucho tiempo entonces voy a usar
este de aquí pero ustedes de nuevo
pueden utilizar una instalación
individual de may sql o docker o lo que
prefieran vamos a iniciar esto tengo May
sql y bueno lo único que voy a hacer es
que si si quiero crearlo en May sql voy
a venir en en este caso en la base de
datos de may sql esto abr una pestaña
nueva Ahí está inicializando y Bueno voy
a crear una base de datos nueva por
ejemplo voy a crear aquí una base de
datos que se llame larabel Api db crear
y nada más no necesito nada más entonces
si yo vengo ahora en el código y quiero
cambiar la base de datos es tan fácil
como venir env y aquí en la sección de
db connection vamos a alterarlo por
ejemplo en db connection ya no va a ser
sqlite sino va a ser May sql en db Host
vamos a dejarle 12701 330 para el puerto
en db database el nombre que que
acabamos de crear lel Api db en usuario
root y en el password voy a dejarlo
vacío si yo guardo esto y vengo aquí en
la consola voy a cancelarlo y para
ejecutar esto simplemente le digo php
artisan migrate Y si doy un enter esto
lo que va a hacer es crear la tabla
entonces si yo vengo ahora en en arab
lap db vamos a ver que aquí están todas
las tablas creadas para May sql entonces
aquí también yo puedo ver el student
pero que también puedan ver la lista de
datos que puedo guardar aquí de hecho si
yo ejecuto esto nuevamente como php
artisan serve Y hago las mismas
peticiones vengo aquí en tunder cin
intento hacer un post e intento enviar
los datos le digo the student tengo que
enviar un name De hecho voy a copiar
aquí los datos name email font y
Language vamos a copiar esto en lugar de
esto voy a quitarle y intento enviarlo
esto Ah bueno Esto Debería ser de
students post ahí se crea entonces si yo
vengo ahora en en sql y refresco van a
ver que aquí está bueno por aquí debería
estar okay Aquí está el dato Okay que
acabo de ingresar uno Jo mcmillan IBM
etcétera de esta forma Pues también
todos los datos que estoy consultando
ahora están desde May sql y bueno para
desplegarlo he creado un video Adal para
los miembros del canal en donde voy a
enseñarles cómo desplegar esta misma ipi
en raway Pero si ustedes no Son miembros
también hay un video adicional en el
canal donde pueden aprender cómo
desplegar una aplicación de larabel en
railway Aunque no es de este Api
obviamente es de otro proyecto o es un
proyecto desde cero Pero bueno para los
que están ayudando en el canal pues les
estoy dando un video adicional en este
caso y bueno eso ha sido todo por el
ejemplo del día de hoy si tienen alguna
duda pueden dejar los comentarios y nos
vemos en un siguiente ejemplo eso ha
sido todo por el video del día de hoy si
tienes dudas puedes dejarla en los
comentarios o en la descripción de dej
un enlace para que te puedas unir a la
comunidad de discord en donde
encontrarás a otros desarrolladores o si
en caso el enlace está caído puedes ir a
fastd discord para acceder más
rápidamente dejo mi Twitter donde
típicamente comparto algunos recursos
interesantes de desarrollo y
programación en general mi Instagram
donde comparto algunas noticias cortas
todos los días el tiktok donde comparto
videos cortos e informativos y mi canal
principal en donde comparto opiniones y
noticias de tendencias nuevas además
también dejo mi web en donde puedes
reservar asesorías personalizadas
Gracias por ver y nos vemos en un
próximo video
