2012-04-02 13 views
1

Ich arbeite an einer kleinen REST-API, geschrieben in RoR (3.2), die ich hinter einer Varnish Cache-Instanz verwenden werde.Rendern von Daten in Kopfzeilen mit RoR

Diese API wird von Varnish cURL VMOD aufgerufen, um die Anzahl der Benutzer zu begrenzen.

Die große Sache ist, dass Varnish ist nicht gut im Umgang mit HTTP-Daten, außer Header.

Also würde ich gerne Datenfelder als HTTP-Header (3 Felder max) zurückgeben, aber ich bin mir nicht sicher, wie dies in einer richtigen MVC-Weise zu tun.

Können Kopfzeilen als gültiges Ansichts- oder Renderformat betrachtet werden?

Sollen Header in der Steuerung oder in der Ansicht geschrieben werden? (wissend, dass zurückgegebene Daten von 2 Modellen stammen).

Beachten Sie auch, dass ich gemeinsame HTML- und JSON-Ausgaben in einer zukünftigen Phase behandeln muss.

Ich weiß, das sowieso ein schmutziges Hack sein wird, aber glauben Sie mir: Lack fragen auf Antwort Körper zu arbeiten, noch schlimmer auf json oder XML, würde x10 mehr schmutzig ...

Dank sein!

Antwort

1

Bleiben Sie bei Kopfzeilen, wenn Sie eine leichtgewichtige Anwendung wünschen, ohne die View-Pipeline aufzurufen.

API-Aufrufe verwenden Header, um Informationen an den Client zu senden (einfach gehalten).

Header sollten in den Controller geschrieben werden, bevor die Ansicht aufgerufen wird, da die HTTP-Header vor dem Text liegen.

Sie können derzeit render => :nothing für die Ansichten ausführen und sobald Sie JSON oder XML integrieren möchten, können Sie die Aktion "admit_to" hinzufügen.

+0

Vielen Dank! Ich wusste nichts von "render =>: nothing". Dadurch kann die Ansichtspipeline umgangen werden, wenn ich sie nicht verwende. Wie ich dachte, sollten Header im Controller geschrieben werden. Aber wie frage ich nach der "header version"? Es gibt keinen MIME-Typ für Header. Soll ich das angeforderte Format mit der Erweiterung ".headers" angeben? Oder gibt es einen anderen Weg? –

+0

Request-Objekt im Controller hat die Details, die Sie benötigen. Das Format kann über die angeforderte Benutzeraktion festgelegt werden - siehe http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respand_to – Sairam

0

Ich würde sagen, das ist etwas, was Sie in der Steuerung einstellen können. Werfen Sie einen Blick auf diese und sehen, ob es hilft Ihnen heraus:

http://work.j832.com/2008/10/ruby-rails-render-and-content-type-http.html

Ich schlage vor, diese in der Steuerung zu tun, wie es klingt, als ob die Header unabhängig von der Ansicht, die Sie machen.

+0

Diese Links erklärt eigentlich die Syntax zum Schreiben von http-Headern, das war nicht mein Problem. Das Ändern des Inhaltstyps ist in REST-APIs ziemlich üblich; o) –