Dùng API Route trong Laravel như thế nào?
Mình vẫn chưa hiểu API Route trong Laravel dùng như thế nào. Có bạn nào có thể giúp đỡ cho mình vụ này không?
2 CÂU TRẢ LỜI
Nếu bạn check class RouteServiceProvider
- https://github.com/laravel/laravel/blob/master/app/Providers/RouteServiceProvider.php#L66 thì mặc định các API route sẽ có prefix
là api
và sử dụng middleware group là api. Middleware group này thực hiện một số việc như: Rate Limit và Route Model Bindings (tương tự như câu trả lời của anh kopitop đã đề cập).
Tiếp theo bạn cần check configuration hiện tại trong config/auth.php
- https://github.com/laravel/laravel/blob/master/config/auth.php#L44
Driver mặc định là token
tức là sử dụng TokenGuard
- https://github.com/laravel/framework/blob/5.5/src/Illuminate/Auth/TokenGuard.php. Driver này yêu cầu bạn phải có trường api_token
trong request (có thể qua query string hoặc request data). Bạn có thể đọc source code của class trên để hiểu hơn.
Nếu bạn muốn sử dụng OAuth2 để authorize các API request thì có thể sử dụng Laravel Passport, lúc này driver sẽ là passport
thay vì token
.
P/S: với các request bình thường yêu cầu có session thì bạn có thể tham khảo: https://github.com/laravel/framework/blob/5.5/src/Illuminate/Auth/SessionGuard.php để so sánh
API Route trong Laravel không khác gì so với route thường ngoại trừ 2 đặc điểm chính:
- Được đặt bên trong 1 namespace/prefix api (eg: your-host.dev/api/your-resources)
- Được cài đặt mặc định api middleware, các middleware api cụ thể là gì bạn có thể xem trong file Kernel.php ( ví dụ: throttle : giới hạn số request trong 1 phút, cors: phòng tránh cross-site access, ...)
Không phải đâu, nó sẽ báo lỗi ngay vì thiếu auth token.
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });
- Mặc định, laravel sử dụng basic token. Middleware auth:api sẽ kiểm tra có api_token không và api_token này có tồn tại trong CSDL không? (thường là bảng users - Tùy cấu hình). Nếu có thì cho phép truy cập, còn không sẽ là lỗi Unauthorized - 401.
- Vì khai báo middleware "auth:api" nên framework mới check có auth token không, với những route mà không cần xác thực thì bỏ đi, có thể vào bình thường như một guest.