Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/API»
De WikiEducator
(Página creada con «===Crear un aplicación=== <source lang=shell> laravel new api --git </source> *Abrimos el fichero web.php») |
|||
| Línea 1: | Línea 1: | ||
| + | <div id=parrafo> | ||
===Crear un aplicación=== | ===Crear un aplicación=== | ||
| − | <source lang= | + | <source lang=bash> |
laravel new api --git | laravel new api --git | ||
</source> | </source> | ||
| − | * | + | |
| + | :Fichero de rutas | ||
| + | *Se va a realizar una api que va a ser una aplicación para ser consumida por otra o por nosotros usando la normativa/recomendación rest, que luego comentaremos | ||
| + | *El fichero de rutas que se usa para una api, debería de ser el de <span id=r>/routes/api.php</span>, en lugar de el de <span id=r>/routes/web.php</span> | ||
| + | *La principal diferencia entre este fichero de rutas api.php y web.php son sus <span id=r>middelware</span>. | ||
| + | ¨Los <span id=r>middelware</span> están especificados en el fichero <span id='r'>http/kernel.php</span> y ver los middelware que usa cada ruta. | ||
| + | *Ahí vemos los middelware aplicados al fichero web y al fichero api: | ||
| + | <source lang=php> | ||
| + | protected $middlewareGroups = [ | ||
| + | 'web' => [ | ||
| + | \App\Http\Middleware\EncryptCookies::class, | ||
| + | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, | ||
| + | \Illuminate\Session\Middleware\StartSession::class, | ||
| + | \Illuminate\View\Middleware\ShareErrorsFromSession::class, | ||
| + | \App\Http\Middleware\VerifyCsrfToken::class, | ||
| + | \Illuminate\Routing\Middleware\SubstituteBindings::class, | ||
| + | ], | ||
| + | |||
| + | 'api' => [ | ||
| + | // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, | ||
| + | //thorttle es un límite de peticiones en un determinado tiempo | ||
| + | 'throttle:api', | ||
| + | \Illuminate\Routing\Middleware\SubstituteBindings::class, | ||
| + | ], | ||
| + | ]; | ||
| + | </source> | ||
| + | {{Nota|Los middelware aplicados a api son trhottle, es decir el límite de peticiones en un determinado tiempo para evitar ataques y que el servidor se quede bloqueado}} | ||
| + | *Si miramos las rutas creadas con | ||
| + | <source lang=bash> | ||
| + | php artisan route:list --except-vendor | ||
| + | </source> | ||
| + | Vemos que aparece una ruta | ||
| + | <source lang=bash> | ||
| + | bookspai git:(master) ✗ php artisan route:list --except-vendor | ||
| + | |||
| + | GET|HEAD / ........................................................... | ||
| + | GET|HEAD api/user .................................................... | ||
| + | </source> | ||
| + | *Observamos que la ruta user, definida en el fichero routes/api.php no tiene el prefijo | ||
| + | *Este se pone en fichero RouteServiceProviders en el método boot se establece | ||
| + | *Posibilidad de crear más prefijos y más ficheros, por ejemplo diferentes versiones (Pendiente probar) | ||
| + | <source lang=php> | ||
| + | $this->routes(function () { | ||
| + | Route::middleware('api') | ||
| + | ->prefix('api/v1') | ||
| + | ->group(base_path('routes/api.php')); | ||
| + | Route::middleware('api') | ||
| + | ->prefix('api/v2') | ||
| + | ->group(base_path('routes/api2.php')); | ||
| + | </source> | ||
| + | |||
| + | </div> | ||
| + | ;Creando los modelos de nuestra api | ||
| + | <source lang=php> | ||
| + | php artisan make:model Book -mf --apo | ||
| + | </source> | ||
| + | *-m migracion | ||
| + | *-f factory | ||
| + | *--api crea el controlador con los métodos tipo Rest | ||
| + | *LA especificación Rest me dice cómo deberían de ser las solicitudes y los métodos asociados para atenderlos | ||
| + | |||
| + | {{Archivo:rest_api.png|Center}}(21:50) | ||
| + | </source> | ||
Revisión de 05:45 1 dic 2022
Crear un aplicación
laravel new api --git- Fichero de rutas
- Se va a realizar una api que va a ser una aplicación para ser consumida por otra o por nosotros usando la normativa/recomendación rest, que luego comentaremos
- El fichero de rutas que se usa para una api, debería de ser el de /routes/api.php, en lugar de el de /routes/web.php
- La principal diferencia entre este fichero de rutas api.php y web.php son sus middelware.
¨Los middelware están especificados en el fichero http/kernel.php y ver los middelware que usa cada ruta.
- Ahí vemos los middelware aplicados al fichero web y al fichero api:
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, //thorttle es un límite de peticiones en un determinado tiempo 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
(
: Los middelware aplicados a api son trhottle, es decir el límite de peticiones en un determinado tiempo para evitar ataques y que el servidor se quede bloqueado)
- Si miramos las rutas creadas con
php artisan route:list --except-vendorVemos que aparece una ruta
bookspai git:(master) ✗ php artisan route:list --except-vendor GET|HEAD / ........................................................... GET|HEAD api/user ....................................................
- Observamos que la ruta user, definida en el fichero routes/api.php no tiene el prefijo
- Este se pone en fichero RouteServiceProviders en el método boot se establece
- Posibilidad de crear más prefijos y más ficheros, por ejemplo diferentes versiones (Pendiente probar)
$this->routes(function () { Route::middleware('api') ->prefix('api/v1') ->group(base_path('routes/api.php')); Route::middleware('api') ->prefix('api/v2') ->group(base_path('routes/api2.php'));
- Creando los modelos de nuestra api
php artisan make:model Book -mf --apo
- -m migracion
- -f factory
- --api crea el controlador con los métodos tipo Rest
- LA especificación Rest me dice cómo deberían de ser las solicitudes y los métodos asociados para atenderlos
Archivo:Rest api.png(21:50) </source>