php - Laravel 5 - 在 header 而不是 JSON 中对结果进行分页

标签 php json laravel api pagination

我现在正在处理用 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/

相关文章:

php - 这个简单的 PHP 应用程序的最佳 OOP 方法?

php - 通过返回的行数获取用户的帖子数?

json - JAX-RS/Jersey ".get(Integer.class)"和单个 JSON 原语(整数)值?

php - Laravel Passport 路由 [登录名] 未定义

phpunit 测试资源 laravel 5.5 返回集合而不是 json

javascript - AngularJS $资源参数名称

php - 尝试将 sql 文件上传到 amazon s3 时出现数组到字符串的转换错误

json - 从 Django 模型获取数据并使用 AJAX 在 html 表中显示

json - 如何从 firebase 实时数据库获取位置标记并使用 swift 添加到 Xcode 中的 map View

php - 两个不同外键列与同一张表的外键关系