iT邦幫忙

2023 iThome 鐵人賽

DAY 5
1
自我挑戰組

我推的Laravel系列 第 5

【Day-4】我推的Laravel-基礎篇-正式進入Laravel的世界!路由、RESTful API

  • 分享至 

  • xImage
  •  

前言

經過前幾天的環境建置,相信你已經看到自己美美的初始畫面
https://ithelp.ithome.com.tw/upload/images/20230919/201632861tKBDBXJNj.png
今天讓我們正式進入Laravel的世界,可能是你的第一次,但!不要害怕,讓我們開始吧!

編輯器

工欲善其事,必先利其器 - 論語

都2023了不可能還有人用notepad++、記事本在寫程式吧?!
這裡我稍微介紹幾款常用在Laravel開發的編輯器給你參考!

  • Visual Studio Code - 簡稱 VS Code,筆者使用,免費開源,使用電腦資源適中、可擴充性高(Extension),其他語言也可使用(Vue、React)
  • PHP Storm - 付費,功能強大,使用資源高,上手難度高
  • Sublime - 輕量化,其他語言也可使用,擴充性未知

Laravel Route(路由)

一切的起點?

這是Laravel的入口,可以在這裡定義每個入口的方法(method)需要經過的關卡(中介層:Middleware,以後會提到)等
還記得剛開始漂亮的初始畫面嗎?
這被定義在 routes\web.php

Route::get('/', function () {
    return view('welcome');
});

你可能會發現routes下不只有web.php
其實這又被定義在 app\Providers\RouteServiceProvider.php

Route::middleware('web')
    ->group(base_path('routes/web.php'));

如果你以後有需要增減都可以在這裡
你可能會問,甚麼情況下會新增,其實你這麼覺得也無可厚非,如果你想把路由通通放到api或web也不是不行
筆者想到的情境大概有兩個思路

  1. 不同來源 - 可能是{前台、後台}、{用戶端、第三方}等
  2. 速率限制 - Laravel自帶的方法,像是預設的
RateLimiter::for('api', function (Request $request) {
    return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});

去限制不讓路由被呼叫過多次

RESTful API

RESTful API是一設計API的風格,並不限於Laravel使用
REST 代表 "Representational State Transfer" 是一種網頁服務架構(Web Service Architecture)方法,提供電腦系統一種標準化溝通的管道。
其特點是

  • 伺服器/客戶端分離Separation of Server and Client
  • 無狀態Stateless
  • 可快取Cacheable
  • 分層Layered
  • 統一操作介面Uniform Interface
  • 按需代碼Code-On-Demand (可選)

關於這方面如果想要更深入,可以參考我找到的這篇文章

OK,說到這可能有點複雜的,為甚麼要使用REST的風格呢?
很多介紹都是介紹上方所述,至於為甚麼一定要用呢?
筆者之前面試的時候也被問倒
筆者自己整理出一個結論:

REST即是一風格,它讓開發者設計出的簡單、可讀、高效且通用的設計風格。

(PS:誰再在面試問這個,小心我扁你=口=凸

CRUD

CRUD 即是

  • Create
  • Read
  • Update
  • Delete

下圖是Laravel所提供的設計參考
https://ithelp.ithome.com.tw/upload/images/20230919/201632860DynphspLD.png

一般來說,Verb(也可以稱作Method)分為四種

  • GET
  • POST
  • PUT/PATCH
  • DELETE

而上圖是設計包含View的
如果是單純API大概會是

Verb URI Action Route Name 備註
GET /photos index photos.index R:取得所有photos(可附加篩選)
POST /photos store photos.store C:儲存一photo(資料於body)
PUT/PATCH /photos/{photo} update photos.update U:更新photo
DELETE /photos/{photo} destory photos.destory D:刪除photo

其中,PUT和PATCH的差異,筆者有聽過一說法,PUT是把原本在資料中是空的填入,而PATCH就是更新:
舉例:
原始資料

[
    'id' => 1,
    'name' => null, 
    'email' => 'test@test.com'
]

使用PUT的傳入

[
    'id' => 1,
    'name' => ryan, 
]

結果

[
    'id' => 1,
    'name' => ryan, 
    'email' => null
]

使用PATCH 傳入資料

[
    'name' => ryan_wu, 
]

結果

[
    'id' => 1,
    'name' => ryan_wu, , 
    'email' => 'test@test.com'
]

僅供參考~

總結

甚麼,這麼快就到總結了嗎?!
關於Route還有很多沒提到像是prefix、resource、group等等方法
在後面實作時會再做介紹的,敬請期待~

RESTful API 就像一本書的章節,每個 URI 是一個章節的標題,HTTP 方法是您閱讀章節的方式。 - ChatGPT


上一篇
【Day-3】我推的Laravel-基礎篇-Laragon?拉拉綱? 介紹開發Laravel實用的軟體(Nginx、PHP版本切換)
下一篇
【Day-5】我推的Laravel-基礎篇-MVC與MVC的M
系列文
我推的Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言