
転職先でAPI作りにはげむことになるのでおさらい。
@see
ここのAPIだけの演習メモです。
モデルの作成(通常)
$ php artisan make:model Models/Article -m
モデルの作成(docker-compose環境)
$ docker-compose exec php-fpm php artisan make:model Models/Article -m
私はdocker-compose環境なので、後者で綴ります。
databases/migrations/2019_09_16_104733_create_articles_table.php
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
-rオプションでResourcefulなアクションを自動で定義したコントローラを作成
$ docker-compose exec php-fpm php artisan make:controller Api/ArticlesController -r
app/Http/Controllers/Api/ArticlesController.php
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Models\Article;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Redirect;
class ArticlesController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$articles = Article::all();
return $articles;
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$article = new Article;
$article->title = $request->title;
$article->body = $request->body;
$article->save();
return redirect('api/articles');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$article = Article::find($id);
return $article;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$article = Article::find($id);
$article->title = $request->title;
$article->body = $request->body;
$article->save();
return Redirect("api/articles/" . $id);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$article = Article::find($id);
$article->delete();
return redirect('api/articles');
}
}
routes/api.php
- Route::middleware('auth:api')->get('/user', function (Request $request) {
- return $request->user();
- });
+ //Route::middleware('auth:api')->get('/user', function (Request $request) {
+ // return $request->user();
+ //});
+ Route::group(['middleware' => ['api']], function(){
+ Route::resource('articles', 'Api\ArticlesController', ['except' => ['create', 'edit']]);
+ });
ルートが反映されているかを確認
laravel $ docker-compose exec php-fpm php artisan route:list
+--------+-----------+------------------------+------------------+-----------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+------------------------+------------------+-----------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/articles | articles.index | App\Http\Controllers\Api\ArticlesController@index | api |
| | POST | api/articles | articles.store | App\Http\Controllers\Api\ArticlesController@store | api |
| | GET|HEAD | api/articles/{article} | articles.show | App\Http\Controllers\Api\ArticlesController@show | api |
| | PUT|PATCH | api/articles/{article} | articles.update | App\Http\Controllers\Api\ArticlesController@update | api |
| | DELETE | api/articles/{article} | articles.destroy | App\Http\Controllers\Api\ArticlesController@destroy | api |
+--------+-----------+------------------------+------------------+-----------------------------------------------------+------------+
シーダファイル作成
$ docker-compose exec php-fpm php artisan make:seeder ArticlesTableSeeder
database/seeds/ArticlesTableSeeder.php
database/seeds/ArticlesTableSeeder.php
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ArticlesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('articles')->insert([
'title' => 'Laravel入門',
'body' => 'わかりやすい',
'created_at' => new DateTime(),
'updated_at' => new DateTime(),
]);
DB::table('articles')->insert([
'title' => 'Laravel実践開発',
'body' => '実践的な内容',
'created_at' => new DateTime(),
'updated_at' => new DateTime(),
]);
DB::table('articles')->insert([
'title' => 'SQLの苦手を克服する本',
'body' => '1章がとても良い。',
'created_at' => new DateTime(),
'updated_at' => new DateTime(),
]);
}
}
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// $this->call(UsersTableSeeder::class);
+ $this->call(ArticlesTableSeeder::class);
}
}
マイグレーション、シーディング
$ docker-compose exec php-fpm php artisan migrate --seed
もくじ
Postmanで動作確認する
一覧表示

idを選択して表示

idを指定して更新

idを指定して削除


[amazon_link asins=’4798052582,4798059072,4802611846′ template=’ProductCarousel’ store=’izayoi55-22′ marketplace=’JP’ link_id=’15dae743-56c1-4c7d-8d93-44d85be92651′]
@see


