iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
佛心分享-IT 人自學之術

後端小白自學 Laravel系列 第 14

第 14 天:RESTful API 基礎

  • 分享至 

  • xImage
  •  

在這一部分,學習如何建立 RESTful API,包括定義 API 路由、使用控制器處理 API 請求以及使用 API 資源進行資料格式化;跟前面很像,只是這裡主要建置在 routes/api.php

前端很需要呼叫 api ,RESTful API 相對的也對前端很重要,關於 RESTful API 是什麼,可以參考30天 JavaScript 提升計畫:從零到精通結合2024年的創新功能 - 第 11 天:API 與 Axios,有其他想法也可以提出討論唷!

創建API路由


routes/api.php 中定義路由。

use App\Http\Controllers\Api\PostController;

Route::apiResource('posts', PostController::class);

使用控制器處理API請求


參考文章:第 4 天:控制器

指令 php artisan make:controller Api/PostController --api,並且在 app/Http/Controllers/Api/PostController.php 中建立 CRUD 操作。

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\StorePostRequest;
use App\Http\Requests\UpdatePostRequest;
use App\Http\Resources\PostResource;
use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class PostController extends Controller
{
    // 取得所有文章
    public function index(): Response
    {
        $posts = Post::all();
        return response()->json(PostResource::collection($posts));
    }

    // 創建新的文章
    public function store(StorePostRequest $request): Response
    {
        $post = Post::create($request->validated());
        return response()->json(new PostResource($post), 201);
    }

    // 顯示單篇文章
    public function show(Post $post): Response
    {
        return response()->json(new PostResource($post));
    }

    // 更新文章
    public function update(UpdatePostRequest $request, Post $post): Response
    {
        $post->update($request->validated());
        return response()->json(new PostResource($post));
    }

    // 刪除文章
    public function destroy(Post $post): Response
    {
        $post->delete();
        return response()->json(null, 204);
    }
}

API資源(Resource)和數據格式化


文件:API 资源

指令 php artisan make:resource PostResource 建立一個資源類,並且在 app/Http/Resources/PostResource.php 中定義數據的格式

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class PostResource extends JsonResource
{
    public function toArray(Request $request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->content,
            'user' => new UserResource($this->whenLoaded('user')),
            'created_at' => $this->created_at->toDateTimeString(),
            'updated_at' => $this->updated_at->toDateTimeString(),
        ];
    }
}

驗證格式


參考文章:第 9 天:表單處理與請求

創建表單驗證確認數據的格式

php artisan make:request StorePostRequest
php artisan make:request UpdatePostRequest

StorePostRequestUpdatePostRequest 中撰寫驗證規則:

// app/Http/Requests/StorePostRequest.php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    public function rules()
    {
        return [
            'title' => 'required|string|max:255',
            'content' => 'required|string',
        ];
    }
}
// app/Http/Requests/UpdatePostRequest.php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UpdatePostRequest extends FormRequest
{
    public function rules()
    {
        return [
            'title' => 'nullable|string|max:255',
            'content' => 'nullable|string',
        ];
    }
}

上一篇
第 13 天:前端 Vue3 搭配後端 Laravel 9.x
下一篇
第 15 天:中間件
系列文
後端小白自學 Laravel21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言