2009-05-09 13 views
1

Ich versuche immer, meine Anwendungen so RESTful wie möglich zu machen, aber ich habe vor kurzem begonnen, an einem komplexen Projekt zu arbeiten, das mehrere zusätzliche Methoden in meinem Controller erfordert.Rails: Wie behalte ich eine komplexe App RESTful?

ich erreichen dies in der Regel durch eine weitere Zugabe: Sammlung auf der Strecke, aber es scheint, wie dieses Problem zu umgehen und in auf Szenario habe ich 5.

es irgendwelche Best Practices für die in einem Controller die zusätzlichen Methoden der Handhabung? Sie sind im Allgemeinen einfache Formen, die ein Modell aktualisieren.

+0

Können Sie einige Besonderheiten hinzufügen?Was ist der Controller/Ressource und was sind die zusätzlichen Methoden, die Sie hinzufügen? Normalerweise finde ich, dass es einen guten Weg gibt, um damit fertig zu werden. RESTiell braucht man nur eine Außenperspektive. –

Antwort

6

Die andere Lösung, die ich tue, ist jedes Mal, wenn Sie eine Aktion erstellen, die nicht in die REST-Aktionen passt, zB Suchen, so dass Sie vielleicht eine Suchaktion auf einem Artikel-Controller ausführen. Was Sie tun könnten, anstatt diese Aktion zu erstellen, ist stattdessen ein Such-Controller zu erstellen und stattdessen stattdessen RESTful-Aktionen zu verwenden. Es gibt keine Regel, die besagt, dass Sie alle Aktionen verwenden müssen. Sie benötigen möglicherweise nur ein oder zwei, aber es hält Ihre API RESTful und Ihren Code organisiert.

Dies ist keine harte und schnelle Regel, aber ich habe es sicherlich hilfreich gefunden, wenn ich versuche zu entscheiden, wo man Zeug hinlegen soll.

+0

Als ein gutes Beispiel dafür (sogar mit Suche!) Schau dir den railscast an: http://railscasts.com/episodes/111-advanced-search-form –

1

Es gibt eine Railscast about this topic, die einem ansonsten RESTful-Controller benutzerdefinierte Aktionen hinzufügt.

Edit: Ich sehe, dass Sie bereits die Methode in der Railscast als Workaround erwähnt haben. :-) Ich glaube, der einzige andere "reine" Weg, um damit umzugehen, wäre, zusätzliche Controller hinzuzufügen, um die gewünschten Aktionen zu unterstützen.

1

„Ich dies in der Regel erreichen durch das Hinzufügen eines weiteren: Sammlung auf der Strecke, aber es scheint, wie dieses Problem zu umgehen und in auf Szenario Ich habe 5.“

Dies ist für mich völlig in Ordnung klingt. Bei REST geht es nicht um die Crud-Operationen, und Ihre Sorge scheint von der Tatsache herrühren, dass Sie mehr tun als die grundlegenden Crud-Operationen, aber daran ist nichts falsch.

3

Ich denke, es gibt ein wenig Verwirrung in der Rails-Community darüber, wie und wo das Wort "RESTful" zu verwenden ist. Streng genommen ist die einzige Sache, die RESTful sein kann, Ihre Web API (wie rangsninja bereits erwähnt). Dass der Code einer Anwendung, die den REST-Konventionen (der Anwendung mit der REST-API) entspricht, normalerweise in einer Gruppe von Controllern (die den Ressourcen entsprechen) und Methoden in diesen Controllern (die den vier Verben des HTTP-Protokolls entsprechen) organisiert werden kann ist nur ein Hinweis darauf, wie Sie Ihre Anwendung sauber und organisiert halten können.

Wenn wir über eine RESTful Rails-Anwendung sprechen möchten, können wir nicht nur über RESTful-Controller sprechen - es gibt nichts, was RESTful nur an Controllern selbst ist. Es ist möglich, eine komplexe Web-Anwendung mit nur einem Controller (und unzähligen Methoden) zu haben, der viele Ressourcen repräsentiert und perfekt REST-konform ist.

Das gesagt, es ist ziemlich OK, mehr Methoden zu Ihrem Controller hinzuzufügen. Manchmal ist es gut, einige dieser zusätzlichen Methoden zu extrahieren und einen komplett neuen Controller zu erstellen - machen Sie dies zu jeder Zeit, an der Sie sich wohl fühlen (Daumenregel: Erstellen Sie einen neuen Controller, wenn Sie ihn mit einer autarken Ressource identifizieren können.) dh eine Ressource, die allein existieren könnte). Manchmal wäre es jedoch albern, eine Ressource einem anderen Controller zu entziehen. Angenommen, Sie haben eine Ressource mit einem Statusattribut. Es macht Sinn, dieses Statusattribut als Ressource selbst zu erkennen und mindestens eine Aktion auszuführen (update), aber es wird nicht sinnvoll sein, es auf einen anderen Controller zu extrahieren.

Verwandte Themen