Ruby on rails 响应不受支持的HTTP请求的适当方式?
对于仅使用API的应用程序,我考虑在执行操作之前使用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,因为找不到匹配的路由。拥有所有这些额外的“未使用”的路由
验证传入的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]
vsmatch'/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]
vsmatch'/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