我目前使用Laravel创建了一个项目,现在需要创建一些API,以便客户端可以与我们的系统进行通信。但我不确定解决这个问题的最佳方法是什么。
我应该如何处理这样的Laravel方式?由于功能已经运行,我不确定我是否应该以某种方式验证和调整它们的请求,以便它适合当前正在运行的代码,或者完全创建另一个单独的函数来处理请求。
对于验证,如果需要,我想使用FormRequest或扩展我自己的类。在验证失败时,我希望能够返回XML响应。我已经有了生成XML的函数,但是需要一种方法来返回它,并使用messages()方法中定义的自定义错误消息。
任何方向都会受到赞赏。谢谢!
答案 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响应(取决于您请求的客户端的偏好)。