Build APIs You won't Hate Planning and Creating Endpoints 筆記 - fantasy0107/notes GitHub Wiki

API Action -> Endpoint

HTTP method

  • GET 取得資源
GET /resources - 列出所有的這個種類的資源(pagination)   
GET /resources/X - 列出 X 資源  
GET /resources/X,Y,Z - 列出 X Y Z 資源
GET /places/X/checkins - 找出places X 所有的 checkins 
GET /users/X/checkins - 找出使用者X所有的checkins.
GET /users/X/checkins/Y - 找出使用者X的checkins Y.

小提示
如果 X, Y是用Auto-Increment可能會被別人猜到你有多少資源,所以比較好的 辦法是用UUID做取代

  • DELETE 刪除資源
DELETE /places/X - 刪除單一個place.
DELETE /places/X,Y,Z - 刪除多個places.
DELETE /places - 刪除所有places(有潛在的風險可以不做).
DELETE /places/X/image - 刪除place x的單一張照片
DELETE /places/X/images - 刪除place x的多張照片
  • POST 和 PUT
    PUT通常用在你已經知道整個URL而且不管做幾次結果都一樣
    POST則是做幾次結果都不一樣
POST /places/X/images - 新增多張不同的圖片
PUT /places/X/image - 新增一張圖片
POST /me/settings - 預期送出一些欄位進行更新
PUT /me/settings - 預期送出所有欄位進行更新.

單數或者複數

Endpoint都是名詞單複數都可但頃向複數主要是資源並非都是單一的

動詞或名詞

在URL中必須要是名詞, 其它的動詞必須要在URL之外

Functional Requirements

  • Create - 建立資源
  • Read - 取得單一資源
  • Update - 更新資源
  • Delete - 刪除資源
  • List - 取得所有資源
  • 關聯資源(image)

Controller

每個資源都幫他們建立一個Controller

  • UsersController
  • EventsController
  • CategoriesController
  • VenuesController

Routes

Action HTTP action URL Route
Create POST /users Route::post('users','UsersController@create');
Read GET /users/X Route::get('users/{id}','UsersController@show');
Update PUT /users/X Route::put('users/{id}','UsersController@update');
Delete DELETE /users/X Route::delete('users/{id}','UsersController@delete');
List GET /users Route::get('users','UsersController@list');
Image PUT /users/X/image Route::put('users/{id}/image','UsersController@uploadImage');
Favorites GET /users/X/favorites Route::get('users/{id}/favorites','UsersController@favorites');
Checkins GET /users/X/checkins Route::get('users/{user_id}/checkins','CheckinsController@index');

Favorites 和 Checkins 要在哪個 controller 要看是否已經存在 controller

其它

並非所有資都要有取得全部資源的API
並非任一資源可以取的除了自己之外的資源