在API的开发中使用Laravel Request类有什么好处?

时间:2019-01-24 05:12:10

标签: laravel api

在开发静态API时,对 store update 方法使用laravel请求类有什么好处?还是我必须做出自定义 Validator :: make 响应?

我一直难以修改失败请求的响应格式,以符合某些开发标准要求。

我们可以修改API请求类的失败响应格式吗?

2 个答案:

答案 0 :(得分:0)

我更喜欢在请求类中使用独立,因为至少有一个好处:代码更清晰。

您可以按照自己的意愿生成响应(这是我的解决方案,也许还有更好的解决方案。我使用此解决方案仅返回一个验证错误,而不是全部返回。您可以根据需要对其进行修改):

在您的Form请求类中添加以下方法:

protected function failedValidation(Validator $validator)
    {
        $this->validator = $validator;

        foreach ($validator->messages()->getMessages() as $key => $value) {
            $first_messages_only[$key]  = $value[0];
        }

        throw new ValidationException($first_messages_only);
    }

,然后在您的异常处理程序类中,将此代码块写入您的 render()方法:

if ($exception instanceof ValidationException) {
            $response = [
                'status' => false,
                'message' => trans('api.general.validation_not_passed'), // $exception->getMessage()
                'data' => ['validation_errors' => $exception->validator]
            ];
            return response()->json($response);

        }

答案 1 :(得分:0)

由于您询问了它在API开发中的用途,因此您可以通过在请求中添加 application / json 标头,轻松告诉请求类您想要JSON响应,然后它将返回json响应。

请求类是验证来自用户的输入的最佳方法,该方法还提供了许多其他功能。

在Request类中,您可以编写所有请求类型的验证规则,例如获取,发布,放置|修补或删除

您可以根据项目逻辑允许或禁止任何使用authorize方法的人。

您可以编写自定义消息并向其发送自定义错误消息包。

如果您用控制器方法编写全部内容,那将不是一个好方法,并且难以管理,而请求类会使您在仅处理验证时感到自在。

protected $errorBag = 'custom_errors_bag'

public function authorize()
{
    return true;  //or any other logic here to authorize the user
}

public function rules()
{
    switch ($this->method()){
        case  'POST':
            return [
                'username' => 'required|string|max:20|unique:users',
                //...
            ];
        case 'PUT':
        case 'PATCH':
            return [
                'username' => 'required|string|max:20|unique:users,id',
                //...
            ];
        case 'DELETE':[
                'id' => 'required'
               //...
            ];
        default:break;
    }
}

public function messages()
{
    return [
        'username.required' => 'Please provide username',
        'username.unique' => 'Username must be unique',
        //...
    ];
}