加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在RESTful设计中,支持不同类型GET的最佳方法是

发布时间:2020-12-17 03:50:47 所属栏目:百科 来源:网络整理
导读:在当前项目中,我需要支持通过登录凭据和电子邮件地址查找用户.我知道在RESTful设计中,您使用GET来查找资源.在Rails中…… GET /users # = UsersController.index -- find all the usersGET /users/1 # = UsersController.show -- find a particular user 但
在当前项目中,我需要支持通过登录凭据和电子邮件地址查找用户.我知道在RESTful设计中,您使用GET来查找资源.在Rails中……

GET /users    # => UsersController.index -- find all the users

GET /users/1  # => UsersController.show -- find a particular user

但我也需要类似于……

GET /users?username=joe&password=mysterio

GET /users?email=foo@bar.com

在索引和节目之外添加额外的路线和动作是否常规?

或者更常见的是在显示动作中放置条件逻辑来查看参数并检测我们是否通过一件事或另一件事找到了?

PUT请求存在类似问题.在一种情况下,我需要将User设置为“active”(user.active = true),在另一种情况下,我只需要进行一般的基于表单的编辑操作.

多谢你们.最终我要弄清楚这个REST的东西.

解决方法

我不知道这是多少约定,但这就是我要做的.一世
会添加另一个动作,只要它与此具体相关
资源.在您的示例中,show是userid的find,因此它是有意义的
UsersController上的另一个操作.你可以把它变成一个句子
感觉,“用这个电子邮件地址给我这个用??户”

对于另一个,GET / users?username = joe& password = mysterio,我愿意
那是另一种资源.我假设你认为行动会登录
用户密码是否正确.动词GET没有意义
上下文.

你可能想要一个’会话’资源(BTW,这就是restful_auth的工作原理).
所以你会说“为这个用户创建一个会话”,或类似POST的东西
/ posts其中帖子的主体是用户名&用户的密码.
这也具有不在历史中保存密码的良好副作用
或让某人在HTTP代理上捕获它.

所以你的控制器代码看起来像这样:

class UsersController < ActionController::Base

    def show
      @user = User.find_by_id(params[:id])
      # etc ...
    end

    def show_by_email
      @user = User.find_by_email(params[:email)
    end
end

class SessionsController < ActionController::Base
  def create
     # ... validate user credentials,set a cookie or somehow track that the 
     # user is logged in to be able to authenticate in other controllers
  end
end

您可以像这样设置路线:

map.connect "/users/byemail",:controller => "users",:action => "show_by_email",:conditions => { :method => :get }
map.resources :users
map.resources :sessions

这将为您提供/users/byemail?email=foo@example.com等网址.有
直接在URL路径中编码电子邮件的问题,rails看到’.com’
最后,默认情况下将其转换为:format.可能有一个
绕过它,但这就是我的工作.

也像cletus所说,有一些方法可以根据URL部分的格式来匹配路由,就像所有数字或字母数字一样,但是我不知道如何使用url中的点来完成工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读