Ruby on rails 从Rails资源的id或其他唯一字段获取Rails资源的正确方法?

Ruby on rails 从Rails资源的id或其他唯一字段获取Rails资源的正确方法?,ruby-on-rails,rest,Ruby On Rails,Rest,我们有一个API,可以通过两种方式获取用户: 通过默认Rails生成的id唯一,自动递增 通过唯一字段employee_id(外部系统中员工的id),我们没有相关的员工控制器/模型/表 以下是它作为URI公开的方式: /users/:id /users/employee_id/:employee_id 两者都向usersshow方法发送调用,该方法将查找params[:id]或params[:employee_id],然后返回用户(如果存在) 我真的不知道为什么,但是第二个URI感觉不对 从不

我们有一个API,可以通过两种方式获取用户:

通过默认Rails生成的id唯一,自动递增 通过唯一字段employee_id(外部系统中员工的id),我们没有相关的员工控制器/模型/表 以下是它作为URI公开的方式:

/users/:id
/users/employee_id/:employee_id
两者都向usersshow方法发送调用,该方法将查找params[:id]或params[:employee_id],然后返回用户(如果存在)

我真的不知道为什么,但是第二个URI感觉不对

从不同的唯一ID访问ressource的标准或更好的方法是什么


我们正在考虑使用两个调用来实现这一点,首先是索引以获得与员工id匹配的用户,然后是显示以从我们获得的id检索用户信息,但我对其他方法很好奇。

它看起来不是很安静

我可以试试这样的

添加非资源路由

get 'employees(/:employee_id)', to: 'users#employee'
将员工操作添加到用户控制器,该控制器将根据提供的id查找用户

  def employee
    @user = User.find_by(employee_id: params[:employee_id])
    render json: @user
  end
现在您有了一个restful外观的API

/users/:id
/employees/:employee_id

员工ID也是数字的吗?您能否从id=:x或employee_id=x的用户中查询SELECT*,并确保得到正确的结果?在我们的例子中,employee_id是一个存储为字符串的数字,我们无法确保它不会包含数字以外的内容。两者都可以进行查询,但看起来并不是非常干净。在这种情况下,如果一个用户的id为,并且employee_id也是有效id,则会返回两个结果。让员工路线返回用户资源有意义吗?如果有人想从其员工id更新用户,该怎么办?这不应该发生,但我很好奇你的想法。似乎这就是你想要的。如果你想让他们也更新,你可以。如果这是你的用户最熟悉的信息——这不是一个可怕的想法。当然,在这一点上,也许你可以翻转它,使员工控制器可以通过用户id访问。这一切都是关于什么对你的情况最有意义。