在 Rails API 中处理非 REST 逻辑
Handle non-REST logic in Rails API
例如,假设我有一个 Post 资源。
使用 GET /posts
我检索所有帖子(index
操作)。如果我想检索热门帖子(过去 24 小时内获得大量赞的帖子)怎么办?我应该在 index
操作中实现逻辑(通过参数),还是应该实现一个响应新端点 GET /trending
的新操作 trending
,从而使 API非 REST?
注意:我阅读了 this article 并了解参数方式,但我无法弄清楚添加额外端点的工作原理...
您的 routes.rb
中可能有 resource :posts
。这是您必须添加新端点的地方。在 rails 新动作的路径中。
你有
resources :posts
你应该
resources :posts do
get 'trending', on: :collection
end
现在您可以看到 rails 为您生成的所有路线 line, index, show, create, update...
以及更多路线 trending
/posts/trending
你可以看这里:Rails guides add restful
两者都可以。我会选择新的行动。但是你也可以在 link 中传递一个额外的参数:
link_to posts_path(trending: true)
然后在您的控制器中,您可以检查是否 params[:trending].present?
然后仅将趋势 post 传递给 posts 变量 @posts
。
您还可以将趋势指标分配给将传递给索引视图的变量,以便调整布局(将 header 从 "posts" 更改为 "trending posts") if params[:trending].present? then @trending = true end
创建一个新动作可以减少控制器和视图的混乱情况(if ...
)
顺便说一句,如果您将其设为 GET
查询,则创建新操作仍然是 REST 逻辑。如果您的新操作是关于更新 post,则需要 PATCH
query
例如,假设我有一个 Post 资源。
使用 GET /posts
我检索所有帖子(index
操作)。如果我想检索热门帖子(过去 24 小时内获得大量赞的帖子)怎么办?我应该在 index
操作中实现逻辑(通过参数),还是应该实现一个响应新端点 GET /trending
的新操作 trending
,从而使 API非 REST?
注意:我阅读了 this article 并了解参数方式,但我无法弄清楚添加额外端点的工作原理...
您的 routes.rb
中可能有 resource :posts
。这是您必须添加新端点的地方。在 rails 新动作的路径中。
你有
resources :posts
你应该
resources :posts do
get 'trending', on: :collection
end
现在您可以看到 rails 为您生成的所有路线 line, index, show, create, update...
以及更多路线 trending
/posts/trending
你可以看这里:Rails guides add restful
两者都可以。我会选择新的行动。但是你也可以在 link 中传递一个额外的参数:
link_to posts_path(trending: true)
然后在您的控制器中,您可以检查是否 params[:trending].present?
然后仅将趋势 post 传递给 posts 变量 @posts
。
您还可以将趋势指标分配给将传递给索引视图的变量,以便调整布局(将 header 从 "posts" 更改为 "trending posts") if params[:trending].present? then @trending = true end
创建一个新动作可以减少控制器和视图的混乱情况(if ...
)
顺便说一句,如果您将其设为 GET
查询,则创建新操作仍然是 REST 逻辑。如果您的新操作是关于更新 post,则需要 PATCH
query