当我们有多个可选参数并且其中一个未传递时,API 设计中的约定是什么?

问题描述 投票:0回答:1

我必须构建一个这样的 API:

/products/[code]/{quantity}/{price}

所以:

/products/87654/15/150.6

但是如果消费者没有传递数量怎么办?我无法判断以下代表的是价格:

/products/87654/150.6 (what's 150.6?)

那么这样的事情好吗?

/products/87654//150.6 (note the //)

或者还有其他约定吗?通常如何面对这样的问题?现在,我设法做了类似的事情:

\/products\/(?P<code>\d*)\/(?P<qty>\d+|null)\/(?P<price>\d*\.?\d+$)

它接受这样的事情:

/products/87654/null/150.6 (note the null)

但我不知道这是否是一个好的做法,而且我找不到有用的文档/图。

是的,我也可以使用好的查询变量

?qty=12&price=150.6
...但我想知道如何使用斜杠格式来做到这一点。

rest api-design
1个回答
0
投票

您想要针对您的产品发出 PUT/PATCH 请求,并在正文中包含要更新的数据,例如:

PUT /products/87654
Content-Type: application/json

{
  "quantity" : 666,
  "price" : 99
}

在您的服务器中,根据您使用的技术,您将相应地更新产品#87654。

这是节点/express 中的示例,只是一个草图:

app.put('/products/:id', async (request, response) => {
  const updatedProduct = await Product.findOneAndUpdate(
    request.params.id,
    request.body
  );
  response.status(200).json(updatedProduct);
});

由您来处理进一步的验证约束。

© www.soinside.com 2019 - 2024. All rights reserved.