Laravel - 适应API的现有方法

时间:2016-01-19 16:42:13

标签: xml api laravel laravel-5.1

我目前使用Laravel创建了一个项目,现在需要创建一些API,以便客户端可以与我们的系统进行通信。但我不确定解决这个问题的最佳方法是什么。

我应该如何处理这样的Laravel方式?由于功能已经运行,我不确定我是否应该以某种方式验证和调整它们的请求,以便它适合当前正在运行的代码,或者完全创建另一个单独的函数来处理请求。

对于验证,如果需要,我想使用FormRequest或扩展我自己的类。在验证失败时,我希望能够返回XML响应。我已经有了生成XML的函数,但是需要一种方法来返回它,并使用messages()方法中定义的自定义错误消息。

任何方向都会受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

因此,全面披露:在处理xml和api时,我创建了一些有用的软件包:

它们允许您自动将传入的xml转换为数组并将其合并到Request对象中,以便可以根据需要使用FormRequests对其进行验证。您还可以使用xml甚至是请求应用程序的首选格式(json或xml)进行响应。

最后,您可以使用app/Exceptions/Handler.php方法处理render中的错误,如下所示:

$response = [
    'status' => 'ERROR',
    'message' => 'Sorry, there was a problem completing your request.',
    'data' => [],
    'errors' => []
];
$httpCode = 400;

// Validation exception, for when the user doesn't fill something out correctly
if ($exception instanceof \Illuminate\Validation\ValidationException) {
    $response['message'] = 'A validation error occured.';
    $response['errors'] = $exception->errors();
    $httpCode = 415;
}

// Method not allowed (GET, POST, PUT, PATCH, DELETE)
if ($exception instanceof \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException) {
    $response['message'] = 'HTTP method not allowed.';
    $httpCode = 405;
}

// Clean up the no query found message (findOrFail())
if ($exception instanceof \Illuminate\Database\Eloquent\ModelNotFoundException) {
    $response['message'] = "Sorry, we couldn't find what you're looking for. Please try again.";
    $httpCode = 404;
}

// When the user makes a request to a route with the wrong http verb
if ($exception instanceof \Illuminate\Http\Exceptions\HttpResponseException) {
    $response['message'] = "Oops, it looks like there was an error interacting with that resource.";
    $httpCode = 405;
}


return response()->preferredFormat($response, $httpCode);

现在,只要您的应用程序遇到常见的Laravel异常,它将以json或xml返回api响应(取决于您请求的客户端的偏好)。