tutorial sistema parte español consumir con autenticación autenticacion laravel api laravel-5

sistema - laravel passport tutorial español



¿Puedes tener tu API y comerla(consumirla) en Laravel? (2)

He creado una API que devuelve json en Laravel. ( routes / api.php )

Ahora quiero consumir dicha API dentro de mi web del proyecto ( routes / web.php (incluido el middleware), vistas de blade, etc.).

La solución actual que tengo es algo como esto:

public function register(Request $request) { // password1 == password2 etc (form logic / validation) $internal_request = Request::create($this->base_api_url . ''register'', ''POST''); $internal_request->replace($request->input()); $response = Route::dispatch($internal_request); }

Que "reenvía" la solicitud a la contraparte de API de mi api si el formulario es válido. Pero tengo la sensación de que esto no es realmente una buena práctica o inteligente. Otras rutas, excepto el login y el register utilizan el token api almacenado en la sesión para realizar las llamadas. añaden el token "x-token" como encabezado a $internal_request . ¿Es mejor hacer esto en middleware? ¿Hay algún ejemplo de una mejor implementación en algún lado?

Mi API tiene un método como este:

POST api/register Que verifica si los campos requeridos existen y tienen el formato rigt (validación)

y mi ruta web tiene /register

Esto primero verificará si las contraseñas coinciden con las entradas de validación de contraseñas (pass1 == pass2) y luego las pasará al equivalente de la API.

Entonces web debería ser un superconjunto (validación sabia) de api .


Como entiendo su pregunta, desea aplicar la misma lógica a las solicitudes API y de API, y puede que quiera (a) validar el formulario para una solicitud web y / o (b) ajustar la respuesta en json para una solicitud API .

Creo que la mejor manera de hacer esto sería consultar el mismo controlador y método para las solicitudes web y de API , por ejemplo:

En sus rutas / web.php, agregue Route::post(''/register'', ''RegistrationController@register ); `

Y en sus rutas / api.php, agregue Route::post(''/register'', ''RegistrationController@register ) `

Entonces, eventualmente ambas solicitudes (api / register y / register) golpean el mismo controlador y método.

Ahora, en su controlador, puede realizar las acciones adicionales de acuerdo con la solicitud, como sigue:

public function register(Request $request) { if(!$request->expectsJson()) { // you may want to swap this with $request->isJson() depending on the HTTP headers for your app $this->validateWebRegistration($request); // your validation logic specific to web requests here } // common logic here (including validation); store result as $result if($request->expectsJson()) { // based on HTTP headers as above return response()->json($result); } else { return view(''register'', $result); } }


Creo que lo haré de esta manera:

  • detectar en el controlador si tratamos con una solicitud API o una solicitud web
  • detectar las credenciales corrosivas (token o sesión)
  • forma lógica si web
  • hacer api logic en ambas situaciones
  • crear una vista o una respuesta json en consecuencia
  • todo en el mismo controlador