🎉

APIでもページネーションを簡単に実装する(Laravel)

2021/05/31に公開

今回はAPI通信でもページネーションを簡単に実装する方法について解説します。

だいぶ前に、APIでページネーションを実装しようとしたときに「これ、どうやって2ページ目の値を取得するんだろう?」って悩んだことがあったので、メモとして残しておきます

まず簡易的なルーティングとコントローラを実装する

api.phpにユーザー一覧取得APiを定義します

<?php

use App\Http\Controllers\Api\UserController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::get('users', [UserController::class, 'index']);

UserControllerは超簡易的にしています。

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        return User::paginate(20);
    }
}

APIを送ってみる

これでAPIでリクエストを送ってみると、レスポンスはこのような形で返ってきます。

dataの部分にユーザー一覧が格納されていることが分かります。

そして、感のいい人ならお気づきかもしれませんが、次のページを取得するときにはレスポンスに含まれている http://127.0.0.1:8000/api/users?page=2 をそのまま使用すればOKです。

2ページ目を送ってみる

http://127.0.0.1:8000/api/users?page=2 にリクエストを送ってみます

2ページ目が最終ページになるので、 next_page_url にはnullが入っています。

pageパラメータを送ればそのページのデータが取得できます

Controllerには一切 pageというリクエストを定義していないのに、 page パラメータを送ると、そのページのデータが取得できます。

4ページ目のデータが欲しい場合は、 今回の例でいうと、 http://127.0.0.1:8000/api/users?page=4 にリクエストを送ればよいです。

めちゃくちゃ便利だし、レスポンスで返ってくる値が引くほど丁寧なので、ページネーションがめちゃ簡単に作れますね!

というわけで、APIだろうがそうじゃなかろうが、ページネーションは簡単に作れるということで、今回の記事は以上になります!

Discussion