【发布时间】:2012-06-01 17:15:45
【问题描述】:
我正在创建一个 RESTful API,供 n+ 个客户端通过 HTTP 使用。
如果我有一个用户 Friends 多对多关系,我是否应该满足于为了删除用户的任何好友关系,我首先必须查询 GET Friendships#index 以获取 ID我打算删除的友谊,然后发出删除请求?
GET /friendships?user_id=123&friend_id=456
=> {id:"999",user_id:"123",friend_id:"456"}
DELETE /friendships/999
=> "Friendship deleted"
为了让用户删除好友,应用程序需要有好友“id”可用,但为了让用户知道他们正在删除哪个好友,他们需要查看好友“名称”。
换句话说,是否有一种 RESTful 方式在同一个 HTTP 请求中请求 Friend 模型数组及其各自的 Friendship 模型数组?
以下是我目前的设置:
# Models
class User < ActiveRecord::Base
has_many :friendships, :dependent => :destroy
has_many :friends, :through => :friendships
# disregard inverse for now
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User"
validates_uniqueness_of :user_id, :scope => :friend_id
end
# Tables
create_table :users do |t|
t.string :name
t.timestamps
end
create_table :friendships do |t|
t.integer :user_id, :null => false
t.integer :friend_id, :null => false
t.integer :status, :null => false, :default => 0
t.timestamps
end
# routes.rb
resources :friendships, :only => [:create, :destroy, :index]
resources :users do
member do
get :friends # index-like action returning array of friends
end
end
...是的,我一直在寻找几天:)
我正在使用 Rails,但这个问题适用于任何框架。是的,我知道我有一百万种方法可以“完成”,但我正在寻找 RESTful 方式来做到这一点,这样我就可以使用任何客户端框架,而不必过多地自定义 I/O .
【问题讨论】:
标签: ruby-on-rails rest many-to-many