请求参数冲突的 HTTP 状态?

HTTP status for request param conflict?

我有一个非常直接的问题,但很难找到一个正式的标准。我有一个这样的 REST 端点。

/hotels?country=someCountry&city=someCity

如果有人要这样称呼它

hotels?country=usa&city=tokyo

客户端提供的参数会有冲突。响应(错误响应)的适当状态代码是什么?我知道可以发送 400 - Bad Request。但我需要一个更具体的答案。

编辑

我知道这可以通过 /{country}/{city}/hotels 方式轻松解决。在这里,我需要从更一般的角度来解决这个问题。

另一个例子

/transactions?startDate=someDate&endDate=someLaterDate

我试试

/transactions?startDate=2012-09-03&endDate=2001-08-04

我想我会对其进行一些不同的调整。这不是冲突,您也可以将其视为 "The city Tokyo does not exist in the US".

我认为这是一种更好的思考方式。还有一些城市存在于您可能意想不到的国家/地区。 (加拿大有一个巴黎,美国有一个)。

因此,如果您只是认为这是一个有效国家/地区的 'non-existent city',也许它只是一个 404。

旁白提示:您应该使用标准的 ISO 2 字母国家/地区代码。它们是缩写国家/地区的最常用方式。

我什至不会发送错误响应,而是 return 状态代码 200 和一个空列表。这个请求没有任何问题,只是在数据库中没有匹配给定查询,然后只是 return []。 这必须在客户端中适当处理。

如果那个端点根本不存在(例如 /hotels 没有路由),那么 404 将是正确的响应。