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
並非任一資源可以取的除了自己之外的資源