我正在使用關係型MySQL DB進行項目工作。我的表是:REST API網址及其在路由器和控制器之間的分佈
- 用戶
- 位置
- 作物
使用節點/快遞
簡化代碼結構:
/routers
/routers/User.js
/routers/Location.js
/routers/Crop.js
/controlers
/controlers/UserController.js
/controlers/LocationController.js
/controlers/CropController.js
/models
/models/UserModel.js
/models/LocationModel.js
/models/CropModel.js
app.js
的關係是用戶可有很多地方(很遠毫秒),並在一個位置可能有許多作物種植。
數據庫關係的東西已經完成,沒有問題。我的問題是關於如何在邏輯上構建我的代碼,同時保持REST原則的機智!
我想知道從API的角度來看端點URL。
目前,他們分別是:
主機名/ API /用戶/:ID - 用戶帳戶
主機名/ API /用戶/:ID /位置 - 用戶位置
主機名/ api/user /:id/locations /:locationid - 屬於特定用戶的特定位置的信息
主機名/ API /用戶/:ID /位置/:locationid /作物 - 列表,它種植在指定位置的所有作物,屬於特定用戶
這是URL結構從靜止的角度好不好?
主機名/ API /用戶/:ID /位置
而且之後請求API我不能換我的頭......以防萬一哪個路由器和控制器應負責我的路線,前被接收/:locationid
應該從用戶路由器和控制器處理這個URL嗎? 或從路由器和控制器的位置?
該網址清楚地說:「對於用戶:id,找到我的位置:屬於他的locationid。」。所以,我作爲雛開發者自然而然地認爲這條路應該是用戶路由器內部:
UserRouter.get(/:id/locations/:locationid, function(....){
UserController.getUserLocationById(:id, :locationid);
})
app.use('/user', UserRouter)
不過這樣一來,我想我會帶了一個包含所有可能的網址,用戶路由器:
/user
/user/:id
/user/:id/locations
...
...
/user/:id/crops
/user/:id/crops/:cropid
...
而且其他路由器和控制器都沒有。而我這個事實只是讓我覺得我在思考REST API代碼結構的問題。
當前以/ user ....開頭的每條路由都由我的用戶快速路由器處理,然後傳遞給上面示例url中的UserController.getUserLocationById。
但我想我這樣做是一個錯誤。
如果有人瞭解我的頭腦,你能幫我解決這個問題嗎?
最好的問候