我正在使用Django rest框架编写一些其他API,其中我有两个主要资源Store
和Product
。如何使用基于映射的资源设计Restful URI
现在对于这些资源的URI是像
列出所有门店GET /stores/
列表存储与ID GET /stores/:id/
添加一个新的商店POST /stores/
更新一些属性在商店PUT /stores/:id/
同适用于产品
列出所有亲管道GET /products/
与ID GET /products/:id/
清单产品添加一个新产品POST /products/
更新一些属性的产品PUT /products/:id/
现在我想一些产品映射到一些商店一样,如果商店A的销售产品ID为1 100和商店B是卖产品编号70〜200
有了这个,我已经得到了另一个资源作为store_product_mappings
现在我可以用ID把它当作上面,使URI的这一资源作为
列出所有store_product_mappings GET /store_product_mappings/
列表store_product_mapping GET /store_product_mappings/:id/
添加新store_product_mapping POST /store_product_mappings/
更新一些属性在store_product_mapping PUT /store_product_mappings/:id/
但是现在这个映射ID不会暴露给这个API的使用者。所以,为了避免这种情况的复杂性,我想做出easilty理解URI像
要列出商店内的所有产品GET /stores/:id/products/
要列出商店GET /stores/:id/products/:product_id
内的产品要更新的产品的店内PUT /stores/:id/products/:product_id
但根据这种方法,如果我不寄出对这段URI
POST /stores/:id/products/
应该创建新的地图资源,并返回ID为映射资源,以同样的方式,将预期的映射ID时,我希望检索资源回来就好
GET /stores/:id/products/:id
但我不希望暴露映射因为它是我内部系统的一部分,API的消费者不需要担心它。我仍然在寻找Django rest框架中这种用例和资源的解决方案。
让我知道是否有人已经遇到过类似的问题,以及如何在不违反Rest API约定的前提下实现这一点。