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=UserAPI 控制器示例
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 StoreUserRequestStoreUserRequest 示例
在请求类中定义规则和授权逻辑。
<?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 反馈 — 无需本地设置。