Frage

Ihr Design stellt zwei Arten von Ressourcen:

  1. Bilder
  2. Tags

würde ich Kunden gerne in der Lage sein, zufällige Bilder von ihrem Tag zu beantragen (s). Zum Beispiel: Geben Sie mir zufällige Bilder, die mit „New York“ und „Winter“ markiert sind. Was wäre in diesem Fall ein RESTful-Design aussehen?

War es hilfreich?

Lösung

ganze Diskussion in den Kommentaren Um es zusammenzufassen, und nicht meine ursprünglichen Vorschlag zu ändern, das ist, was ich würde kommen schließlich:

Sie möchten Bilder über Tags zuzugreifen; Jedes Tag bezieht sich auf eine Reihe von Bildern. Als ein bestimmte Tag viel mehr als andere verwendet werden kann (zum Beispiel verwendeten in New York Fotos viel mehr als Chicagos), sollten Sie eine RESTful-Konfiguration verwenden, die Caching erlaubt, so dass man in New York Fotos cachen. IMHO, die Lösung wäre:

  • Jedes Bild hat eine feste URI:

    http://www.example.com/images/12345
    
  • Jeder Tag hat auch eine URI:

    http://www.example.com/tags/New_York/random
    

    Diese URI fungiert als zufälligen Dispatcher von Bildern auf dem Set; es gibt ein 303 See Other Antwort auf Umleitung ein zufälliges Bild des Satzes. Per Definition , diese URI zwischengespeichert werden darf nicht, und die feste sollte man, und der Browser nicht verstehen, dass die Umleitung auf die zweite Ressource ist dauerhaft, so dass es optimal ist.

  • Sie sogar den ganzen Satz über zugreifen können:

    http://www.example.com/tags/New_York
    

    Dieser Zugang würde in einem 300 Multiple Choices Antwort; es gibt den ganzen Satz (als URIs, nicht als Bilder!) an den Browser, und der Browser entscheidet, was damit zu tun.

  • Sie können auch Schnittpunkt verschiedenen Tags verwenden:

    http://www.example.com/tags/New_York/Autumn/Manhattan/random
    http://www.example.com/tags/Autumn/Manhattan/New_York/random (equivalent to the previous one)
    http://www.example.com/tags/New_York/girls/Summer/random
    etc.
    

So können Sie für jedes Bild einen festen URI haben, eine feste URI für jeden Tag und die damit verbundene Reihe von Fotos und ein fester URI für einen zufälligen Dispatcher, jeden Tag hat. Sie haben keine GET-Parameter als andere mögliche Lösungen verwenden müssen, so ist dies als RESTful wie Sie bekommen können.

Andere Tipps

Ich habe mich mit diesem Problem zu kämpfen. Was wir am Ende der Umsetzung war ein HttpResponseRedirect aus, zum Beispiel:

http://www.example.com/randomNewYorkImage

zu einem zufälligen Bild New York:

http://www.example.com/images/New_York/1234 .

Die erste Ressource kann als zufällig in New York Bilder Dispatcher aufgefaßt werden. Diese Lösung wird mehr auf den Server geladen werden, da es zwei Ressourcen angefordert werden, aber es ist als RESTful wie Sie bekommen können.

Editiert: Plus, wenn Sie das Caching, jedes Bild im Cache sein, und der Server geht aus Senden ein Bild nur die Umleitung zu senden, da der Cache die zweite Anforderung abfängt und damit Ihre Serverlast zu lindern.

Mehrdimensionale Ressourcenidentifikation ist eine Herausforderung.

Ihre Ressource ist ein Bild, das ist also Ihre URI. Ferner hat ein bestimmtes Bild eine bestimmte URI, die sich nie ändert.

Ihr „nach Tag“ ist ein nicht-identifizierende Attribut der Ressource. Hierzu kann ein Query-String-Belp.

Hier ist mein erster Gedanke.

  • http://www.example.com/MyStuff/image/ id / - spezifisches Bild von id
  • http://www.example.com/MyStuff/image/?tag= tagname -. Zufällige Bild mit einem bestimmten Tag, implizit, count=1
  • http://www.example.com/MyStuff/image/?tag= tagname &count=all - alle Bilder mit einem bestimmten Tag in einer zufälligen Reihenfolge (count=1 ist die Standardeinstellung, die Ihnen ein beliebiges Bild geben würde)

würde ich so etwas wie http://foo.com/image/tagged/sometag/random tun und Schlaf über sie aufhören zu verlieren.

Ich bin damit einverstanden auf diesen einen mit Triptychon. In einer Art und Weise bis zum Ende der URI Zufall Hinzufügen macht es wie eine Operation fühlen, aber wenn es zu einem Tag scoped ist dann sind Sie wirklich nur den Kontext zu verfeinern.

In seinem Beispiel:

/ image / getaggt / SOMETAG / random

Bilder Ressource -> Tagging Umfang (alle Bilder mit Tags) -> spezifischen Tag (alle Bilder mit dem Tag X) -> random (eine Ressource aus der scoped Liste der Bilder mit dem Tag X)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top