如果请求 URL 与正则表达式不匹配,正确的状态代码是什么

What is the correct status code if request URL does not match regex

我正在尝试在我的 REST API 中开发错误处理,我目前正在处理响应代码。我还没有找到适合我的问题的响应代码的正确答案。

我在后端代码中有这样管理的路由:

$site->route([
  'route' => '/{id:^[a-z]+$}'
]);

现在假设用户输入 www.example.com/page1regex 模式不匹配。正确的反应是什么?我在想 404,找不到页面,但我也认为 400 响应是正确的,因为它描述了请求有错误。

如果静态 URL 无效,我已经使用 404,所以这是匹配 URL 的动态部分的问题。

在 REST APIs 的情况下,这两个响应代码的使用领域是什么?

我觉得404比较合适

根据specification400表示:

The 400 (Bad Request) status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error.

404 表示:

The 404 (Not Found) status code indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

从客户端的角度来看,请求到/page1会导致错误,因为资源page1不存在(服务器端没有匹配的路由)。

通常,400 表示服务器已经定位到该资源,但由于客户端错误不能return 该资源。在这种情况下,如果没有匹配的路由,服务器将无法定位资源。无论如何,如果请求发送到/123456并且状态码是400,错误信息应该是什么? “Your requested URL is incorrect”听起来像 404,而“Your requested URL should follow regular expression: ...^[a-z]+$...”听起来很奇怪。