【问题标题】:What are the benefits of using Laravel Request Class in API's development?在 API 开发中使用 Laravel 请求类有什么好处?
【发布时间】:2019-01-24 14:07:39
【问题描述】:

在开发 RESTful API 时为 storeupdate 方法使用 laravel requests 类有什么好处?还是我必须做出自定义 Validator::make 响应?

我在修改失败请求的响应格式以遵循一些开发标准要求时遇到了困难。

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

【问题讨论】:

  • 你能告诉我们你试过的几行代码吗

标签: laravel api


【解决方案1】:

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

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

在你的表单请求类中添加这个方法:

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);

        }

【讨论】:

  • 是的,这确实符合我修改回复格式的目的。我想等待更多示例,直到我将其标记为我想要的答案。
【解决方案2】:

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

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

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

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

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

如果您在控制器方法中编写整个内容,那么这将不是一个好方法并且难以管理,而请求类只会让您在处理验证时感到舒适。

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',
        //...
    ];
}

【讨论】:

  • 是的,我确实有同样的理解。但就我而言,我的响应格式不是上述代码将返回的格式。它会根据您在消息函数中提供的消息格式简单地返回响应,最后它将返回错误 ['key'=>'value'] 格式。如果您有更多数据要在逻辑基础上返回怎么办。这种响应方式的灵活性要小得多。或者您可以在消息功能中重新定义消息格式。请注意,格式的灵活性也是一项要求。
  • 知道了。您可以根据需要使用 failedValidation() 方法来格式化响应。
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多