0Pricing
PHP Academy · 课时

API 路由与资源控制器

注册 RESTful 路由,并使用 Artisan 生成资源控制器。

API 路由与资源控制器 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。

Laravel 中的 API 路由

在 routes/api.php 中定义 API 路由。这些路由会自动添加 /api 前缀,并使用 api 中间件组(无状态——没有会话或 Cookie)。

基本 API 路由

从闭包返回 JSON。

<?php
Route::get("/users/{id}", function (int $id) {
    $user = User::findOrFail($id);
    return response()->json($user);
});

API 资源路由

Route::apiResource() 会注册 5 个 RESTful 路由(跳过用于呈现表单的 create 和 edit)。

<?php
// routes/api.php
use App\Http\Controllers\Api\UserController;

Route::apiResource("users", UserController::class);
// GET /api/users           → index
// POST /api/users          → store
// GET /api/users/{user}    → show
// PUT /api/users/{user}    → update
// DELETE /api/users/{user} → destroy

生成 API 控制器

使用 --api 标志生成不含 create 和 edit 方法的控制器。

$ php artisan make:controller Api/UserController --api --model=User

API 控制器示例

API 控制器返回 JSON 响应。

<?php
namespace App\Http\Controllers\Api;

class UserController extends Controller
{
    public function index(): JsonResponse
    {
        return response()->json(User::paginate(15));
    }

    public function show(User $user): JsonResponse
    {
        return response()->json($user);
    }

    public function store(StoreUserRequest $request): JsonResponse
    {
        $user = User::create($request->validated());
        return response()->json($user, 201);
    }

    public function destroy(User $user): JsonResponse
    {
        $user->delete();
        return response()->json(null, 204);
    }
}

HTTP 状态码

返回适当的状态码:200(OK)、201(已创建)、204(无内容)、400(错误请求)、401(未授权)、403(禁止访问)、404(未找到)、422(无法处理的实体)。

表单请求验证

使用 Form Requests 编写简洁且可复用的验证规则。

$ php artisan make:request StoreUserRequest

StoreUserRequest 示例

在请求类中定义规则和授权逻辑。

<?php
class StoreUserRequest extends FormRequest
{
    public function authorize(): bool { return true; }
    public function rules(): array {
        return [
            "name"  => "required|string|max:255",
            "email" => "required|email|unique:users",
        ];
    }
}

分组 API 路由

使用前缀和命名空间对 API 路由进行分组。

<?php
Route::prefix("v1")->middleware("auth:sanctum")->group(function () {
    Route::apiResource("posts", PostController::class);
    Route::apiResource("users", UserController::class);
});

except() 和 only()

从资源注册中排除或限制特定路由。

<?php
Route::apiResource("users", UserController::class)->only(["index", "show"]);
Route::apiResource("posts", PostController::class)->except(["destroy"]);

嵌套路由资源

为相关模型注册嵌套资源路由。

<?php
Route::apiResource("users.posts", UserPostController::class);
// GET /api/users/{user}/posts/{post}

总结

在 routes/api.php 中使用 Route::apiResource() 定义 RESTful API 路由。使用 --api 生成控制器。返回带有正确 HTTP 状态码的 JSON。使用 Form Requests 进行验证。

快速检查

apiResource() 会注册多少条路由?

常见问题解答

「API 路由与资源控制器」课时是免费的吗?

是的 — 「API 路由与资源控制器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。

「API 路由与资源控制器」这节课中我会学到什么?

注册 RESTful 路由,并使用 Artisan 生成资源控制器。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 PHP Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「API 路由与资源控制器」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 PHP Academy 课中编写并运行代码吗?

能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. API 路由与资源控制器
  2. API 资源与 JSON 响应
  3. 使用 Laravel Sanctum 进行身份验证
  4. 速率限制与 API 版本控制
← 返回 PHP Academy