Laravel 5 API请求验证


Laravel 5 API request validation

我正在使用Laravel 5 API。我有一些方法与类似的请求参数

例如,要检查许可证状态或获取需要提供?serial=licence_serial_number参数的设置文件。

当用户没有提供serial参数时,我需要返回400错误代码,当用户试图获取另一个用户的许可证信息时,我要返回403错误代码。

组织此类请求的验证和错误处理的最佳实践是什么?

  • 我应该做一个中间件来检查用户是否提供了?serial
  • 或者我应该为每个方法制作一个不同的Laravel 5 FormRequest类吗
  • 或者我应该直接在控制器中验证它:
    if (..) {return response()->json([..], 400);}

$request->wantJson(),带有Header Accept=application/json的请求将告诉Laravel返回json验证错误,而不是返回错误

中间件可能是最好的选择,但您也可以使用Request方法。内联验证是一种糟糕的做法,因为它忽略了编程的最基本规则——不要重复自己。

如果你决定使用请求选项,你不应该为每个类创建authorize方法,而是创建一个父类,它将处理这个问题,而其他子类将只有rules方法。

这取决于一些实际情况:

如果你总是对所有请求验证相同的东西:使用中间件解决方案。

但是,如果一些或多个请求验证了不同的东西,那么我建议使用Laravel的新FormRequest。

它完美地处理了请求的验证,还允许您定义每个请求的错误响应。

中间地带也是一种选择,让中间件始终验证需要验证的东西。和FormRequest来处理变量验证。

如果您有类似的FormRequest,请考虑像优秀的SOLID程序员一样使用继承来防止代码重复:-)