找不到api版本控制页面



我正试图在Laravel 8上创建我的第一个API,并希望创建版本控制,看起来像这个

https://domain/api/v1/users

我的用户控制器看起来像这个

namespace AppHttpControllersApiV1;
use AppModelsUser;
class UserController
{
public function getUser(int $idUser)
{
$user = User::find($idUser);

return new AppHttpResourcesV1User($user);
}
}

在我的config/app.php中,我有这个

'api_latest' => '1',

在我的中间件(app\Http\middleware\APIVersion.php(中

namespace AppHttpMiddleware;
use Closure;
class APIVersion
{
public function handle($request, Closure $next, $guard)
{
config(['app.api.version' => $guard]);
return $next($request);
}
}

在我的kernal(app/http/kernel.php(中

protected $routeMiddleware = [
// ...
'api_version' => AppHttpMiddlewareAPIversion::class,
];

在我的/app/Providers/RouteServiceProvider.php

/** @var string $apiNamespace */
protected $apiNamespace ='AppHttpControllersApi';
protected function mapApiRoutes()
{
Route::group([
'middleware' => ['api', 'api_version:v1'],
'namespace'  => "{$this->apiNamespace}V1",
'prefix'     => 'api/v1',
], function ($router) {
require base_path('routes/api_v1.php');
});    
}

在我的routes/api_v1.php中,我有这个

Route::middleware('api_version')->get('/user', function (Request $request) {
return $request->user();
});

当我在浏览器https://domain/api/v1/users中键入此消息时,我收到了一个404错误,如何返回此路由的json错误而不是html页面?

更新

php artisan route:list给了我这个

+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+------------+
| Domain | Method   | URI                    | Name                 | Action
| Middleware |
+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+------------+
|        | GET|HEAD | /                      |                      | Closure
|
|        | GET|HEAD | home                   | home                 | AppHttpControllersHomeController@index     
| web        |
|        |          |                        |                      |
|        | GET|HEAD | login                  | login                | AppHttpControllersAuthLoginController@showLoginForm                | web        |
|        |          |                        |                      |
| guest      |
|        | POST     | login                  |                      | AppHttpControllersAuthLoginController@login                        | web        |
|        |          |                        |                      |
| guest      |
|        | POST     | logout                 | logout               | AppHttpControllersAuthLoginController@logout                       | web        |
|        | GET|HEAD | password/confirm       | password.confirm     | AppHttpControllersAuthConfirmPasswordController@showConfirmForm    | web        |
|        |          |                        |                      |
| auth       |
|        | POST     | password/confirm       |                      | AppHttpControllersAuthConfirmPasswordController@confirm            | web        |
|        |          |                        |                      |
| auth       |
|        | POST     | password/email         | password.email       | AppHttpControllersAuthForgotPasswordController@sendResetLinkEmail  | web        |
|        | GET|HEAD | password/reset         | password.request     | AppHttpControllersAuthForgotPasswordController@showLinkRequestForm | web        |
|        | POST     | password/reset         | password.update      | AppHttpControllersAuthResetPasswordController@reset                | web        |
|        | GET|HEAD | password/reset/{token} | password.reset       | AppHttpControllersAuthResetPasswordController@showResetForm        | web        |
|        | GET|HEAD | register               | register             | AppHttpControllersAuthRegisterController@showRegistrationForm      | web        |
|        |          |                        |                      |                                                                        | guest      |
|        | POST     | register               |                      | AppHttpControllersAuthRegisterController@register                  | web        |
|        |          |                        |                      |                                                                        | guest      |
+--------+----------+------------------------+----------------------+------------------------------------------------------------------------+------------+

好的,不要使用中间件来更改url,只使用路由,用这个来证明。

首先,你必须安装护照或圣地,在我的情况下,我使用了护照。请参阅文档继续安装

在app/Providers/RouteServiceProvider.php 中

/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api/v1')
->middleware(['api'])
->namespace($this->namespace)
->group(base_path('routes/api/v1/api.php'));
}

在路由/api/v1/api.php

Route::prefix('/user')->group(function (){
Route::post('/login', [LoginController::class,'login']);
});

应用程序内/Http/Controller/Auth/LogiController

查看客户端的IP如下$request->ip();

public function login(Request $request)
{       
$loginData = $request->validate([
'email' => 'email|required',
'password' => 'required'
]);
if (!auth()->attempt($loginData)) {
return response()->json(['message'=>'Datos invalidos de usuarios','success'=>false], 404);
}
$accessToken = auth()->user()->createToken('authToken')->accessToken;
return response()->json( ['success'=>true,'message'=>'Acceso consedido',
'user' => auth()->user(),
"token_type" => "Bearer",
"access_token" => $accessToken,
],200);
}

应用程序内/Http/Controller/UserController

<?php

namespace AppHttpControllersApiV1;

use AppHttpControllersController;
use AppModelsUser;
class UserController extends Controller
{
public function getUser()
{
$users = User::get();
return response()->json(['data'=> $users]);
}
}

在路由/api/v1/api.php

如果你看的话。我使用了中间件,所以只有经过身份验证的用户才能看到内容。

<?php
use AppHttpControllersApiV1UserController;
use AppHttpControllersAuthLoginController;
Route::prefix('/user')->group(function (){
Route::post('/login', [LoginController::class,'login']);
Route::get('/users',[UserController::class,'getUser'])->middleware('auth:api', 'client');
});

我希望这些信息对你有所帮助。

λ php artisan route:list
+--------+----------+-------------------+------+----------------------------------------------------+------------+
| Domain | Method   | URI               | Name | Action                                             | Middleware |
+--------+----------+-------------------+------+----------------------------------------------------+------------+
|        | GET|HEAD | /                 |      | Closure                                            | web        |
|        | POST     | api/v1/user/login |      | AppHttpControllersAuthLoginController@login    | api        |
|        | GET|HEAD | api/v1/user/users |      | AppHttpControllersApiV1UserController@getUser | api        |
|        |          |                   |      |                                                    | auth:api   |
|        |          |                   |      |                                                    | client     |
+--------+----------+-------------------+------+----------------------------------------------------+------------+

最新更新