我现在正在处理用 Laravel 制作的 API 中的搜索结果分页,我在文档中遇到了这一点:
https://laravel.com/docs/5.3/pagination#converting-results-to-json
这看起来不错,但同时我非常担心它改变了结果的结构,因为它将返回的数据隐藏在“data”键内。
问题是,到目前为止,我返回的是一个非分页的 JSON 编码的对象数组,并且以这种方式包含分页要么需要在前端进行显着的修改,要么会导致 API 之间的不一致(会有返回嵌套数据的 API 调用和直接返回数据的其他调用 - 我不喜欢它)。
我可能更希望在响应的标题中包含分页元数据,这不会扰乱我当前的响应结构。你知道像这样的开箱即用的解决方案吗(最好是 Laravel 包)?或者您会建议我采取什么其他方法来解决我的困境?
最佳答案
API 中的分页信息似乎有两个选项 - 在 Laravel 的响应正文中,以及在 header 信息中(如 github does )。
我自己在 Laravel 的一个新项目中遇到了这个问题,我几乎决定要在标题中进行分页 - 它只是感觉更正确(诚然,这是一个激烈争论的话题)。
我还没有构建这个,所以随着时间的推移我可能会改变主意,但是构建一个中间件并将其附加到 API 组似乎是可行的方法。
在该中间件中,我们需要在添加 header 之前获得完整的响应,例如:
public function handle($request, Closure $next, $guard = null)
{
// let other middleware handle the request first
$response = $next($request);
// get paging links here
// <url>; rel="next", <url>; rel="prev", <url>; rel="first", <url>; rel="last"
$response->header("Link: " . $links);
return $response;
}
Laravel 文档 on middleware也推荐阅读。
关于php - Laravel 5 - 在 header 而不是 JSON 中对结果进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42077643/