Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 响应不受支持的HTTP请求的适当方式?_Ruby On Rails_Api_Response_Rails Routing - Fatal编程技术网

Ruby on rails 响应不受支持的HTTP请求的适当方式?

Ruby on rails 响应不受支持的HTTP请求的适当方式?,ruby-on-rails,api,response,rails-routing,Ruby On Rails,Api,Response,Rails Routing,对于仅使用API的应用程序,我考虑在执行操作之前使用验证传入的HTTP请求,例如: # Returns a 405 status for unsupported HTTP methods. def verify_post_request head :method_not_allowed unless request.post? end 但我不喜欢创建额外的路由来处理每个不受支持的HTTP方法。如果没有额外的路由,应用程序将返回404,因为找不到匹配的路由。拥有所有这些额外的“未使用”的路由

对于仅使用API的应用程序,我考虑在执行操作之前使用
验证传入的HTTP请求,例如:

# Returns a 405 status for unsupported HTTP methods.
def verify_post_request
  head :method_not_allowed unless request.post?
end
但我不喜欢创建额外的路由来处理每个不受支持的HTTP方法。如果没有额外的路由,应用程序将返回404,因为找不到匹配的路由。拥有所有这些额外的“未使用”的路由似乎是一种代码气味

这里的最佳实践是什么?这样更好吗

  • 为您支持的受支持方法创建路由,否则为404
  • 为所有方法提供路由,以便不受支持的方法以更具信息性的405响应

前者似乎更适合于维护人员(更干净的代码),而后者似乎更适合于用户(描述性反馈)。

我赞成为您支持的方法提供路由,而不是404。
我认为您的应用程序应该只回复到它需要的路由,并每隔一条路由离开


没有必要提供更多信息性的答复。不存在的路由是404路由,仅此而已。

我赞成为您支持的方法提供路由,反之亦然。
我认为您的应用程序应该只回复到它需要的路由,并每隔一条路由离开


没有必要提供更多信息性的答复。不存在的路由是404路由,仅此而已。

我赞成为您支持的方法提供路由,反之亦然。
我认为您的应用程序应该只回复到它需要的路由,并每隔一条路由离开


没有必要提供更多信息性的答复。不存在的路由是404路由,仅此而已。

我赞成为您支持的方法提供路由,反之亦然。
我认为您的应用程序应该只回复到它需要的路由,并每隔一条路由离开



没有必要提供更多信息性的答复。不存在的路由是404路由,仅此而已。

我看不出有任何理由这样做。这是额外的工作,或者不是应用程序的一部分。如果我在路由中定义了
resource:user
,为什么我希望有20多行定义所有其他由
resource
隐式定义的请求类型和路径组合?@Jon,为其他HTTP方法定义路由可以让您返回更准确的响应。例如,如果有人使用PUT而不是PATCH发出请求,您的应用程序可以使用信息更丰富的405“不支持的方法”而不是404“未找到”来响应。就线路数量而言,您不一定需要更多的线路,这取决于您的路线。例如,
match'/foo/bar/action',to:'foo/bar#action',via:[:get,:post]
vs
match'/foo/bar/action',to:'foo/bar#action',via::all
我写过20个RoR应用程序。这从来都不重要。如果有人使用了错误的HTTP方法,那么他们在你的应用程序中做了一些奇怪或错误的事情,没有理由迎合他们。我知道这听起来很苛刻,但只要用户使用您的链接和表单,并且您正确配置了它,并测试覆盖率,以确保-换句话说,一个普通的应用程序-如果用户试图以某种方式使用错误的动词访问页面,它不会给用户的体验添加任何内容,从而给他们带来更详细的错误。使用我没有创建但我认为合适的短语-你无法解决一个不存在的问题。我不同意这里的一些评论。如果您发布f.i.
POST/user/1
而不是
GET/user/1
,您可以,并且应该返回405。在其他方面,您是在说,“是的,有资源
/user/1
,但您不允许对该资源发出POST请求。我们这里讨论的是仅API的应用程序,它应该具有API行为,而不是导航行为(如一般ror应用程序)。我看不出有任何理由这样做。这是额外的工作,或者不是应用程序的一部分。如果我在路由中定义了
resource:user
,为什么我希望有20多行定义所有其他请求类型和路径的组合,这些组合由
resource
?@Jon隐式定义,并为其他HTTP方法允许您在IMO中返回更准确的响应。例如,如果有人使用PUT而不是PATCH发出请求,您的应用程序可以使用信息更丰富的405“不支持的方法”而不是404“未找到”来响应“。就线路数量而言,您不一定需要更多线路,这取决于您的路线。例如,
match'/foo/bar/action',to:'foo/bar#action',via:[:get,:post]
vs
match'/foo/bar/action',to:'foo/bar#action',via::all
我写过20个RoR应用程序。这从来都不重要。如果有人使用了错误的HTTP方法,那么他们在你的应用程序中做了一些奇怪或错误的事情,没有理由迎合他们。我知道这听起来很苛刻,但只要用户使用您的链接和表单,并且您正确配置了它,并测试覆盖率,以确保-换句话说,一个普通的应用程序-如果用户试图以某种方式使用错误的动词访问页面,它不会给用户的体验添加任何内容,从而给他们带来更详细的错误。使用我没有创建但我认为合适的短语-你无法解决一个不存在的问题。我不同意这里的一些评论。如果您发布f.i.
POST/user/1
而不是
GET/user/1
,您可以,并且应该返回405。在其他方面,您是在说,“是的,有资源
/user/1
,但您不允许对该资源发出POST请求。我们这里讨论的是仅API的应用程序,它应该具有API行为,而不是导航行为(如一般ror应用程序)。我看不出有任何理由这样做。这是额外的工作,或者不是应用程序的一部分。如果我定义了
resource:user