Diferencia entre revisiones de «Usuario:ManuelRomero/Laravel/API»

De WikiEducator
Saltar a: navegación, buscar
(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=shell>
+
<source lang=bash>
 
laravel new api --git
 
laravel new api --git
 
</source>
 
</source>
*Abrimos el fichero web.php
+
 
 +
: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 18: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,
        ],
    ];

(Comment.gif: 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-vendor

Vemos 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>