iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1
自我挑戰組

Laravel 實戰經驗分享系列 第 15

Laravel 實戰經驗分享 - Day15 在 Laravel 上實現 RESTful API 設計

大家中秋佳節愉快!
歷經補班以及這週工作的酸甜苦辣,終於能讓自己好好放個假了!
但是該寫的鐵人賽仍要繼續下去,我們將昨天提到的 RESTful API 設計加上之前提到 Model、Controller 的概念綜合起來,做一個簡單的新增、刪除、修改、查詢的範例吧!

建立 Model 與 Migration

  1. 建立一個 Article 的資料表,以下指令會自動建立一個 migration 的檔案
php artisan make:model Article -m
  1. 此時專案目錄 /database/migrations 底下會有一個檔案,前綴會是 timestamps 2020_XX_XX_XXXXXX_create_articles_table.php,在 function up() 內新增以下程式碼
Schema::create('articles', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title',100);
    $table->text('body');
    $table->timestamps();
});
  1. /App/Models/Article.php 新增以下程式碼
protected $fillable = ['title','body'];
  1. 完成以上動作後即可再次執行 migration
php artisan migrate

透過 Database Seeder 建立假資料

  1. 在終端機輸入以下指令建立 Seeder 所需的檔案
php artisan make:seeder ArticlesTableSeeder
  1. ArticlesTableSeeder.php 這個檔案會自動被建立在 /database/seeds 內,並新增以下程式碼,建立 30 筆假資料
public function run(){
    factory(\App\Article::class, 30)->create();
}
  1. 下一步開啟 DatabaseSeeder.php 檔案,並輸入以下程式碼,往後若新增更多資料表,可透過此程式區塊批次新增假資料
public function run(){
		$this -> call(ArticlesTableSeeder::class);
}
  1. 以上步驟結束後新增 factory 檔案
php artisan make:factory ArticleFactory
  1. ArticleFactory.php 會新增至 /database/factories/ArticleFactory 資料夾內,新增下列程式,定義假資料的格式
$factory->define(App\Article::class, function (Faker $faker) {
    return [
        'title' => $faker->sentence($nbWords = 6, $variableNbWords = true),
        'body' => $faker->paragraph
    ];
});
  1. 最後 insert 所有假資料
php artisan db:seed --class=ArticlesTableSeeder
php artisan db:seed
# 執行 migrate 時同步放入假資料
php artisan migrate --seed

製作 Resource 並設定 Routing

  1. 為所有 Article 建立 Resource 讓 user 請求資料時,顯示所有回應資料
php artisan make:resource ArticleResource
  1. /route/api.php 設定 API 的 routing,這是 API 請求時會進行的動作。
Route::get('articles', [ArticleController::class, 'index']);
Route::get('articles/{id}', [ArticleController::class, 'show']);
Route::post('articles', [ArticleController::class, 'store']);
Route::put('articles/{id}', [ArticleController::class, 'update']);
Route::delete('articles/{id}', [ArticleController::class, 'destroy']);

建立 Controller

  1. 這個步驟建立的 Controller 會在 app/Http/Controllers/
php artisan make:controller ArticleController --resource
  1. 透過 Controller 製作 CRUD 的所有功能
namespace App\Http\Controllers;

use App\Models\Article;
use App\Http\Controllers\Controller;
use App\Http\Resources\ArticleResource;
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    public function index()
    {
        $article = Article::all();
        return ArticleResource::collection($article);
    }
    public function show($id)
    {
        $article = Article::find($id);
        if ($article){
            return $article;
        }
        return 'Article not found!';
    }
    public function store(Request $request)
    {
        $article = new Article;
        $article->title = $request ->input('title');
        $article->body = $request ->input('body');
        $article -> save();
        return new ArticleResource($article);
    }
    public function update(Request $request, $id)
    {
        $article = Article::find($id);
        $article->title =  $request -> input('title');
        $article->body =  $request -> input('body');
        $article->save();
        return new ArticleResource($article);
    }
    public function destroy($id)
    {
        $article = Article::findOrfail($id);
        if($article->delete()){
            return new ArticleResource($article);
        }
        return 'Error has occurred while deleting!';
    }
}

運行 Laravel 的服務即可完成

可以使用 Laravel 啟動伺服器的方法,亦或是透過 nginx 啟動。

php artisan serve
# or
sudo service nginx start

上一篇
Laravel 實戰經驗分享 - Day14 談談 RESTful API 設計
下一篇
Laravel 實戰經驗分享 - Day16 JWT 概念分享(上)
系列文
Laravel 實戰經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言