node.js - Express:用子资源定义 REST API?
问题描述
我通过 Express 实现了一个 REST API。我得到了一份供应商清单,以及每个库存清单。URL 为:/Supplier/Inventory{supplierId}(例如 http://MyServer/Supplier/Inventory/237 获取供应商 237 的库存清单)
所以......非常标准的东西:在我的 server.js 中我使用:(我只是在这里,但你们明白了)
const routeInventory = require('./routes/Inventory');
...
app.use('/api/Supplier/Inventory', routeInventory);
并在路线文件中:
outer.route('//:id').get(ShowInventory);
该功能将类似于:
exports. ShowInventory= (req, res, next) => {
const iSupplierId=req.params.id;
console.log('ShowInventory for SupplierId:' + iSupplierId);
...
}
非常简单。req.params.id 从 URL 中给了我需要的参数。到现在为止还挺好。但!这里有人坚持认为,由于 Inventory 是供应商的子实体,因此 URL 应该是:
/供应商/{supplierId}/库存
所以两个问题:
- 他们是正确的吗?这是标准吗?
- 无论我如何使用 express 代码,当 {supplierId} 参数位于 URL 中间时,我都无法获得它......这是怎么做到的?
非常感谢
解决方案
是的,如果您请求某个资源的子资源,那么您应该指明资源的 id,并且仅在此之后指明子资源名称:
/supplier/{supplierId}/inventory
在路由方面,可以这样实现:
router.get('/supplier/:supplierId/inventory', ShowInventory)
这样你就可以supplierId
像这样访问:
const supplierId = req.params.supplierId
推荐阅读
- python - 由于循环导入,很可能无法从部分初始化的模块 easyocr 导入名称阅读器
- flutter - 在下拉事件中检测模态表
- python - Django 3.1.1 - 更改密码成功但不显示成功页面
- swift - 删除 Tableview 和刷新控件 iOS 14 之间的空白
- firebase - 如何使用本机反应检查集合在firebase firestore中是否可用
- excel - EXCEL - 通过在 2 个单元格中组合数字/字母来获取特定单元格的内容以获取内容的位置
- javascript - DataTables 过滤输入图像变化
- google-apps-script - 是否有一些方法可以在特定列的最后一行记录信息?
- android - Flutter 创建目录失败
- c++ - GTest - 如何通过 SetUp 方法准备数据以供多次使用?