首页 > 解决方案 > REST API:如果文档会根据查询参数而改变,则 GET 请求会返回错误?

问题描述

我们目前正在实现一个 REST API 来处理在线商店中的购物车。为此,我们需要能够更改购物车的购买货币。我们系统中的类似 API 使用查询参数来更改区域设置或货币等内容,例如检索产品信息(包括特定货币的价格),您会发出如下请求:GET /products/<product-id>?currency=USD

对于我们的购物车 API,像这样更改货币意味着我们需要使用新货币的价格在内部触发计算;如果购物车中有产品不可用此货币,则这些产品将被删除。由于 GET 请求应该只检索数据,而不是更改它,我们不想触发 GET 请求的计算。但我们不确定如何处理它:我们是否应该以旧货币退回购物车并忽略客户请求不同货币的事实,或者我们是否应该返回购物车对于请求的货币无效的错误(因此根本不退回购物车文件)?

当使用新货币对购物车发出 POST 或 PUT/PATCH 请求时,无论如何都会重新计算,所以这种情况没有问题。

另一种方法是将货币作为字段包含在资源文档中,而不是查询参数。这意味着它不能通过 GET 请求更改,尽管通过 POST/PUT/PATCH 客户端可以通过请求正文明确指定货币。但是,此解决方案与我们系统中的其他 API 不同,这也不是最佳的。

如果您看到其他解决方案,请随时提出建议。提前致谢!

标签: resterror-handlingapi-design

解决方案


  1. 您能否更清楚地说明该项目是否为您的系统支持货币转换的不同货币,或者您只是想丢弃这些项目。
  2. 基本上,您应该在计算总价时进行货币转换,而不是在添加到购物车时进行转换
  3. 或者您应该将货币作为路径参数而不是查询参数,并根据用户货币将其固定在其余 uri 中。这样用户就不能请求其货币以外的任何不同货币的项目(假设用户必须设置他的货币)

推荐阅读