How to validate an API request in laravel.

Shail Gandhi
3 min readAug 14, 2021

--

Now a days most of web application uses APIs for database operations, Laravel is also providing API feature.

But there is a lots of confusion how to validate API request in laravel. Don’t worry it is just easy, here I show you how to do it with example of login request validation, Just follow the below steps.

Step 1 : Genarate a request class file through command.
php artisan make:request LoginRequest

command for generating the “LoginRequest.php” file

Step 2 : Open the “LoginRequest.php” file from “app/Http/Requests
when you open the file it has auto generated code like this

<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;class LoginRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
*
@return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
*
@return array
*/
public function rules()
{
return [
//
];
}
}

Step 3 : Add “HttpResponseException” and “Validator” facades in the “LoginRequest.php”.

use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;

<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;

for this request validation I don’t need to authorised user so I remove “authorize()” function from the file.

Step 4 : Add laravel validation rules as per your requirements in “rules” function.

public function rules()
{
return [
'email' => required|email|exists:users,email|max:50',
'password' => 'required|min:6'
];
}

Step 5 : After adding the rules you need to add one “failedValidation” function.

public function failedValidation(Validator $validator)
{
throw new HttpResponseException(response()->json([
'success' => false,
'message' => 'Validation errors',
'data' => $validator->errors()
]));
}

This function sends the error response as json if any validation fail. You can set any key / pair values in the json, “$validator->errors()” send the error with attribute name in the response.

Step 6 : Add “LoginRequest.php” file in the API’s controller file.
use App\Http\Requests\LoginRequest;

<?phpnamespace App\Http\Controllers\API;use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\LoginRequest;
class LoginController extends Controller
{
.....
.....
}

Step 7 : Add “LoginRequest”as a parameter in the controller which you will call from API.

<?phpnamespace App\Http\Controllers\API;use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\LoginRequest;
class LoginController extends Controller
{
public function doLogin(LoginRequest $request)
{
return "Success";
}
}

Yehhh…..We do it, Now while we call the api with wrong request data then it will throw an error like this

Here I send invalid email address in API request, so I got error in json response.

If all validation pass then laravel will do further process for that controller.

Suppose you think out of box and you want to add your custom message in validation error so you can do it by adding one “messages” function in request file which you generated.

public function messages()
{
return [
'email.required' => 'Email is required',
'email.email' => 'Email is not correct'
];
}

Above code will give you output like this

In above request I sent a blank email so laravel throw an error with custom message which I had set in “messages” function in “LoginRequest.php” file

Final code of “LoginRequest.php” file

<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;
class LoginRequest extends FormRequest
{
public function rules()
{
return [
'email' => 'required|email|exists:users,email|max:50',
'password'=> 'required',
];
}
public function failedValidation(Validator $validator)
{
throw new HttpResponseException(response()->json([
'success' => false,
'message' => 'Validation errors',
'data' => $validator->errors()
]));
}
public function messages() //OPTIONAL
{
return [
'email.required' => 'Email is required',
'email.email' => 'Email is not correct'
];
}
}

Thanks……..

--

--