一个GET路由可以用于所有这些场景吗?
您可以使用一个路由来处理所有这些场景:
GET /orders // get all
GET /orders?id=409,5678,2987 // get these orders by id
GET /orders?id=9463 // get this order by id
GET /orders?person=jackwelch // get orders for this person
GET /orders?company=aaWidget // get orders for this company
这在很大程度上取决于设计意见。通常情况下,我倾向于尽可能少地使用不同的URL形式,并在合适且不感觉过于牵强的情况下重载相同的路由以处理不同的输入。但最终,这是一种基于对需要支持的查询总体情况和最可能的使用方式的理解而做出的判断。此外,请记住,添加新订单时应使用POST,修改现有订单时应使用PUT,删除订单时应使用DELETE。
POST /orders // create new order, data in body of request
PUT /orders/:id // modify existing order, data in body of request
DELETE /orders/:id // delete an order
因此,所有这些都可以通过一个名为
/orders
的URL结构对外界进行操作。在内部,它可能会被构建为几个不同的路由处理程序,以使处理代码更简单:
app.get("/orders", ...); // handle order queries (use req.query)
app.post("/orders", ...); // create new order (use req.body)
app.put("/orders/:id", ...); // modify existing order (use req.params.id and req.body)
app.delete("/orders/:id", ...); // delete existing order (use req.params.id)
这种结构的另一个好处是非常可扩展的。您只需添加其他查询字符串参数,而无需对结构进行整体更改甚至添加任何新的路由处理程序,就可以添加更多查询订单的方式。