← Back to list

building-laravel-apis
by doanchienthangdev
Omega Vibecode Kit
⭐ 2🍴 1📅 Jan 21, 2026
SKILL.md
name: building-laravel-apis description: Builds enterprise Laravel applications with Eloquent, API Resources, Sanctum auth, and queue processing. Use when creating PHP backends, REST APIs, or full-stack Laravel applications.
Laravel
Quick Start
// routes/api.php
Route::get('/health', fn () => ['status' => 'ok']);
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('users', UserController::class);
});
Features
| Feature | Description | Guide |
|---|---|---|
| Models | Eloquent ORM, relationships, scopes | MODELS.md |
| Controllers | Resource controllers, form requests | CONTROLLERS.md |
| API Resources | Response transformation | RESOURCES.md |
| Auth | Sanctum, policies, gates | AUTH.md |
| Queues | Jobs, events, listeners | QUEUES.md |
| Testing | Feature, unit tests | TESTING.md |
Common Patterns
Model with Relationships
class User extends Authenticatable
{
use HasApiTokens, HasFactory, SoftDeletes;
protected $fillable = ['name', 'email', 'password', 'role'];
protected $hidden = ['password', 'remember_token'];
protected $casts = ['email_verified_at' => 'datetime', 'password' => 'hashed'];
public function organizations(): BelongsToMany
{
return $this->belongsToMany(Organization::class, 'memberships')
->withPivot('role')
->withTimestamps();
}
public function scopeActive($query)
{
return $query->where('is_active', true);
}
public function scopeSearch($query, ?string $search)
{
return $search
? $query->where('name', 'like', "%{$search}%")
->orWhere('email', 'like', "%{$search}%")
: $query;
}
}
Controller with Service
class UserController extends Controller
{
public function __construct(private UserService $userService) {}
public function index(Request $request): PaginatedCollection
{
$users = $this->userService->list(
search: $request->input('search'),
perPage: $request->input('per_page', 20)
);
return new PaginatedCollection($users, UserResource::class);
}
public function store(CreateUserRequest $request): JsonResponse
{
$user = $this->userService->create($request->validated());
return (new UserResource($user))
->response()
->setStatusCode(201);
}
public function show(User $user): UserResource
{
return new UserResource($user->load('organizations'));
}
}
Form Request Validation
class CreateUserRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()->isAdmin();
}
public function rules(): array
{
return [
'name' => ['required', 'string', 'min:2', 'max:100'],
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'confirmed', Password::min(8)->mixedCase()->numbers()],
'role' => ['sometimes', 'in:admin,user,guest'],
];
}
}
Workflows
API Development
- Create model and migration
- Create controller with
php artisan make:controller --api - Add Form Request for validation
- Create API Resource for responses
- Write feature tests
Resource Response
class UserResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'organizations' => OrganizationResource::collection($this->whenLoaded('organizations')),
'created_at' => $this->created_at->toIso8601String(),
];
}
}
Best Practices
| Do | Avoid |
|---|---|
| Use Form Requests for validation | Validating in controllers |
| Use API Resources for responses | Returning models directly |
| Use service classes for logic | Fat controllers |
| Use eager loading | N+1 queries |
| Use soft deletes | Hard deletes for important data |
Project Structure
app/
├── Http/
│ ├── Controllers/Api/
│ ├── Requests/
│ ├── Resources/
│ └── Middleware/
├── Models/
├── Services/
├── Policies/
├── Jobs/
└── Events/
routes/
├── api.php
└── web.php
tests/
├── Feature/
└── Unit/
For detailed examples and patterns, see reference files above.
Score
Total Score
60/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon