2009-06-29 6 views
3

ich einen Controller mit Aktionen haben:, wie man eine komplexe Steuerung RESTful-ize

class GameController < ApplicationController 
before_filter :set_titles 

def prestart 
end 

def wait 
end 

def play (game) 
end 


def button 
end 

def finish 
end 


def set_titles 
end 

set_titles den Seitentitel (und andere allgemeine Eigenschaften für alle Aktionen) Alle anderen Aktionen prüfen für etwas bekommen und ein Render Aussicht.

Wie RESTful-ise dies. Ich kann nur daran denken, einen Wait_player-Controller, einen play_game-Controller usw. zu erstellen, alle haben nur eine Show-Aktion. Aber das sieht umständlich und schwieriger zu folgen, dass alle diese verwandten Aktionen in der gleichen Controller.

Antwort

1

Sie müssen über die Substantive in Ihrem System nachdenken und nicht Ihre Verben. REST befasst sich mit Substantiven - Erstellen, Lesen, Aktualisieren und Löschen von THINGS. Was sind die Dinge in Ihrem System?

Sieht aus wie Sie Titel und ein Spiel haben, usw.

RESTful APIs erfordern eine andere Art und Weise Probleme zu nähern.

Diese link spricht über RESTful WCF-Dienste, aber das Zeug über RESTful denken sollte auch in Ihrer Domäne gelten.

2

Dies sieht nicht nur ungeschickt und schwieriger aus, es ist sicher. REST ist nicht für alles

Aber man kann PRE_START binden zu erstellen, spielt Finish zu löschen, zu aktualisieren und zu zeigen, warten, dann sind Sie noch links mit dem Setzen auf die Schaltfläche Aktion irgendwo (Ich schlage vor, zu erfinden einen besseren Namen)

PS: set_titles sollte private

5

Zunächst einmal, bin ich würde denken, ob ein RESTful-Design ist die beste Wahl für diesen Controller. Einige Domains passen einfach nicht gut zu REST und wenn du versuchst, sie hineinzujagen, vermehrst du Arbeit und Verwirrung. Ich kenne deine App nicht gut genug, um das zu beantworten, aber es ist etwas, über das du nachdenken solltest.

Wie erwähnt, befasst sich REST mit Substantiven. Mit Blick auf das, was Sie gepostet haben, ist das Hauptnomen, das ich sehe, Spiel. Um es RESTful zu machen, könnte das, was Sie "prestart" nennen, new sein und Ihr "play" könnte create sein. "Finish" könnte destroy sein. "Warten" könnte einfach "warten" bleiben. Nicht jede Aktion in einem RESTful-Controller muss einer der Standard-Sieben sein. Ich glaube nicht, dass es ein RESTful Äquivalent von "Warten" gibt.

Sie haben auch Schaltfläche. Es ist schwer zu sagen, ohne mehr über Ihre App zu wissen, aber vielleicht sollte das einen eigenen Controller bekommen. Im Allgemeinen erhält jede einzelne Entität mit der RESTful Rails-App ihren eigenen Controller mit einer oder mehreren der sieben Standardaktionen.

"Wie RESTful-ise dies. Ich kann nur eine Wait_player Controller eine play_game Controller usw. erstellen erstellen"

Dieser Ansatz ähnelt eher dem Erstellen eines Controllers für jede Aktion, die Sie ausführen möchten. Intead, versuchen Sie über einen Controller für jede Sache nachzudenken, die Sie handeln möchten.Zum Beispiel, anstelle von WaitPlayer Controller, machen Sie es eine Player Controller mit show, new, create, und so weiter (die Standard-RESTful Aktionen), und dann zusätzlich vielleicht eine wait Aktion.

+0

Diese Antwort ist ziemlich gut, aber ich möchte auch erwähnen, dass es in diesem Fall scheint, dass alle diese "Aktionen" mehr wie Zustände sind. Außer dem mysteriösen "Knopf". Dies könnte ziemlich RESTful gemacht werden, indem man einfach all diese Elemente in ein "state" -Element des Modells verschiebt und einfach den Zustand "update". –

Verwandte Themen