我正在创建一个 RESTful API,供 n+ 个客户端通过 HTTP 使用。
如果我有一个 Users <= Friendships => 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 .