title | emoji | type | topics | published | ||||
---|---|---|---|---|---|---|---|---|
サクッと作れるLaravel 11 で超簡単な RESTful API を実装!! |
🚀 |
tech |
|
true |
"バリデーションや例外処理は通常必要ですが、今回は API の実装手順に焦点を当て、手順を簡潔に紹介します。"
php artisan install:api
php artisan make:model Todo -mfs
# INFO Model [app/Models/Todo.php] created successfully.
# INFO Factory [database/factories/TodoFactory.php] created successfully.
# INFO Migration [database/migrations/create_todos_table.php] created successfully.
# INFO Seeder [database/seeders/TodoSeeder.php] created successfully.
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('todos', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('todos');
}
};
php artisan migrate
php artisan make:controller TodoController --resource
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use app\Models\Todo;
class TodoController extends Controller
{
public function store(Request $request) {
$todo = Todo::create($request->only('title'));
return response()->json(['todo' => $todo]);
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Todo extends Model
{
use HasFactory;
protected $fillable = ['title'];
}
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::apiResource('todos', \App\Http\Controllers\TodoController::class);
// POST:http://localhost:8080/api/todos
{
"title": "test"
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use app\Models\Todo;
class TodoController extends Controller
{
public function index() {
$todos = Todo::all();
return response()->json(['todos' => $todos]);
}
}
GET:http://localhost:8080/api/todos
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use app\Models\Todo;
class TodoController extends Controller
{
public function update(Request $request, $id) {
$todo = Todo::findOrFail($id);
$todo->update($request->only('title'));
return response()->json(['todo' => $todo]);
}
}
// PUT:http://localhost:8080/api/todos
{
"title": "アップデート処理"
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use app\Models\Todo;
class TodoController extends Controller
{
public function update(Request $request, $id) {
$todo = Todo::findOrFail($id);
$todo->delete();
return response()->json(null, 204);
}
}
Delete:http://localhost:8080/api/todos/1