首页 > 解决方案 > 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}/库存

所以两个问题:

  1. 他们是正确的吗?这是标准吗?
  2. 无论我如何使用 express 代码,当 {supplierId} 参数位于 URL 中间时,我都无法获得它......这是怎么做到的?

非常感谢

标签: node.jsrestexpress

解决方案


是的,如果您请求某个资源的子资源,那么您应该指明资源的 id,并且仅在此之后指明子资源名称:

/supplier/{supplierId}/inventory

在路由方面,可以这样实现:

router.get('/supplier/:supplierId/inventory', ShowInventory)

这样你就可以supplierId像这样访问:

const supplierId = req.params.supplierId

推荐阅读