【发布时间】:2017-11-18 12:06:14
【问题描述】:
我正在使用关系型 mysql 数据库开发一个项目。我的桌子是:
- 用户
- 位置
- 作物
使用节点/Express
简化代码结构:
/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/user/:id - 用户帐户
主机名/api/user/:id/locations - 用户位置
hostname/api/user/:id/locations/:locationid - 属于特定用户的特定位置信息
hostname/api/user/:id/locations/:locationid/crops - 列出所有种植在特定位置的作物,属于特定用户
从其余的角度来看,这个 url 结构可以吗?
并且在 API 中收到请求后,我无法绕开我的脑袋......哪个路由器和控制器应该负责我的路由,例如:
主机名/api/user/:id/locations/:locationid
是否应该从用户路由器和控制器处理此 url? 或者从位置路由器和控制器?
网址清楚地写着:“对于具有 :id 的用户,使用属于他的 :locationid 找到我的位置。”。所以,我作为没有经验的开发者会自动假设这条路由应该在用户路由器内部:
UserRouter.get(/:id/locations/:locationid, function(....){
UserController.getUserLocationById(:id, :locationid);
})
app.use('/user', UserRouter)
但是这样,我想我会使用包含所有可能 url 的用户路由器:
/user
/user/:id
/user/:id/locations
...
...
/user/:id/crops
/user/:id/crops/:cropid
...
在其他路由器和控制器中没有任何内容。而我这个事实只是让我认为我对 REST API 代码结构的想法是错误的。
目前以 /user.... 开头的每条路由都由我的 User Express 路由器处理,然后在上面的示例 url 中传递给 UserController.getUserLocationById。
但我认为我这样犯了一个错误。
如果有人理解我的头撞,你能帮我解决这个问题吗?
最好的问候
【问题讨论】:
标签: node.js rest api express restful-url