Laravel 5.8を使用しています。

ブラウザ拡張機能のClockworkでデバッグ

Laravelのデバッグは「Laravel Debugbar」が広く使われていますが、これはViewにデバッグ情報を描画するので、ViewのないAPI開発には微妙だったりします。
そこでおすすすめなのが、Chrome/Firefoxの拡張機能の「Clockwork」です。

ブラウザの拡張機能は、それぞれ下記からダウンロードします。

Google Chrome / Firefox

拡張機能の他にコンポーザーでライブラリをインストールする必要があります。

$ composer require itsgoingd/clockwork

Laravelのバージョンが5.6以上ならこれだけで使用できますが、5.5以下ならconfig/app.phpprovidersaliasesを追加します。

config/app.php
'providers' => [
...
Clockwork\Support\Laravel\ClockworkServiceProvider::class
]
'aliases' => [
...
'Clockwork' => Clockwork\Support\Laravel\Facade::class
]

Chromeのデベロッパーツールを開くとClockworkというタブが追加されています。
さらにその中のDatabaseタブを開くとクエリーの確認をすることができます。

Clockworkでlaravelのクエリの確認

ライブラリをインストールするとclockというヘルパーが使用できるようになります。
これはddのような感じに変数を確認することができます。

clock(User::all());

Logタブに変数が展開されます。

Clockworkでlaravelの変数の確認

Clockwork

最近だと Telescope もよさそうですがどうなんでしょう。

Laravel Telescope

ルーティングはapiResourceで一括設定

CRUDのルーティングを設定したいときはRoute::resource('users', 'UsersController')のように指定すると、まとめて設定できるのですが、createeditはView用のルーテイングなのでSPAでは不要ですね。
純粋なAPIで使用するCRUDの場合はapiResourceを使用します。

Route::apiResource('users', 'UsersController');

これで、index,store,show,update,destroyが使用できるようになります。
複数のコントローラーをまとめて指定する場合はapiResourcesを使用します。

Route::apiResources([
'tasks' => 'Api\TaskController',
'users' => 'Api\UserController'
]);

jsonの形成はApiResourceを使おう

単純なデータを表示したい場合は基本モデルをreturnするだけでjsonを返してくれます。

public function show(User $user)
{
return $user;
}

ただ、リレーションも表示した場合、Viewファイルだったら深く考えないでも表示できましたが、SPAの場合はコントローラーで加工しないといけないのかと思ったのですが、ApiResourceというので加工できます。

Artisanでリソースファイルを作成します。

$ php artisan make:resource UserResource

例えば、id、nameだけ欲しい場合は下記のようになります。

app/Http/Resources/UserResource.php
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name
];
}
}

コントローラーで一つだけ返す場合はmakeを使います。

return UserResource::make($user);

複数(配列で)返す場合collectionを使います。

return UserResource::collection($users);

これはリソースファイルでも使えるので、リレーションを返したい場合は下記のような記述になります。

public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'user' => UserResource::make($this->user)
];
}

プロパティのキャスト

例えばidでINTカラムの場合でも、フロントからStringとして送信するとStringで返してしまいます。
モデルでキャストを設定しておくと、指定した型で必ず返すので安心です。

class Task extends Model
{
protected $casts = [
'project_id' => 'integer'
'due_at' => 'datetime'
];
}