我正在研究遊戲應用程序(移動前端,Rails後端)並試圖決定是否應該嚴格遵循RESTful。看來,如果我這樣做,我會創造更多的控制器。例如,我需要執行幾個遊戲動作,例如攻擊,防守等。如果我嚴格遵守RESTful,我需要爲每個遊戲動作創建一個控制器,只有一個REST動作(更新)。如果我去了非RESTul並創建了一個通用的戰鬥控制器,那麼我就可以爲攻擊,防守等創建方法/動作。似乎更加麻煩的是嚴格遵守RESTful。在Rails上嚴格遵守RESTful
任何見解將不勝感激。
我正在研究遊戲應用程序(移動前端,Rails後端)並試圖決定是否應該嚴格遵循RESTful。看來,如果我這樣做,我會創造更多的控制器。例如,我需要執行幾個遊戲動作,例如攻擊,防守等。如果我嚴格遵守RESTful,我需要爲每個遊戲動作創建一個控制器,只有一個REST動作(更新)。如果我去了非RESTul並創建了一個通用的戰鬥控制器,那麼我就可以爲攻擊,防守等創建方法/動作。似乎更加麻煩的是嚴格遵守RESTful。在Rails上嚴格遵守RESTful
任何見解將不勝感激。
攻擊,防守等都是同一種資源:Action
。
例如爲:
PUT actions/attack # to attack
PUT actions/defend # to defend
GET actions # to get the list of all available actions
要實現此爲REST,我會去是這樣的:
class PlayerActionsController ...
def index
@actions = PlayerAction.all
respond_with @actions
end
def update
@action = PlayerAction.find(params[:id])
respond_with @action.perform(params)
end
end
class GenericAction
attr_readable :name
def initialize(name)
@name = name
end
def perform(arguments)
self.send(name, arguments) if self.class.find(name)
end
ACTIONS = []
ACTIONS_BY_NAME = {}
class << self
def add_action(*names)
names.each do |name|
action = Action.new(name)
ACTIONS_BY_NAME[name] = action
ACTIONS << action
end
end
def index
ACTIONS.dup
end
def find(name)
ACTIONS_BY_NAME[name]
end
end
def
class PlayerAction < GenericAction
add_action :attack, :defend
def attack(params)
player, target = Player.find(params[:player_id]), Player.find(params[:target_id])
...
end
def defend(params)
...
end
end
這只是給它如何能夠做得好一個大概的瞭解。
謝謝,這雖然在技術上有意義,但不需要通常的Rails REST操作,因爲沒有操作模型,它們是硬編碼的。但是,每個操作都會導致其他模型的更改。基本上我會創建一個動作控制器,如果我想要轉到RESTful,請創建自定義REST動作。然而,看起來我不應該在這種情況下使用REST,並簡單地爲所有不同的操作,想法創建一個控制器? – Bob 2010-10-26 17:49:41
我已經更新了我的答案。以這種方式存儲它們會使操作安全性等級變得微不足道,以實現其他功能:) – glebm 2010-10-27 03:31:11
謝謝,這是一個有創意的解決方案,但實現自定義REST操作似乎更簡單。 – Bob 2010-10-28 17:08:24
首先,您必須問自己,REST是否對您的應用程序有意義。你在談論「方法」和「行動」,而REST更多地是關於「資源」。資源類型的數量不取決於遊戲動作的數量 - 每個玩家可以有一個資源,在其中發佈其當前狀態(*例如*攻擊,防守,*等)。你能擴展更多關於你希望通過使用REST來完成的內容嗎?或者更多的是流行語?這是一個實時遊戲嗎? – user359996 2010-10-25 06:25:17