Rack (Webserverschnittstelle)

Rack, eine Ruby -Webserver -Oberfläche
Rack-logo.png
Originalautor (en) Leah Neukirchen
Entwickler (en) James Tucker, Josh Peek, José Valim, Michael Fellinger, Aaron Patterson, Santiago Pastorino, Konstantin Haase
Stabile Version
2.2.3 / 15. Juni 2020; vor 2 Jahren[1]
Repository
Betriebssystem Plattformübergreifend
Typ Middleware
Lizenz MIT -Lizenz
Webseite Gestell.Github.io Edit this on Wikidata

Gestell ist eine modulare Schnittstelle zwischen Webserver und Web Applikationen entwickelt in der Ruby -Programmiersprache. Mit Rack, Anwendungsprogrammierschnittstellen (APIS) für Webrahmen und Middleware sind eingewickelt in eine Single Methodenaufruf Handhabung HTTP -Anfragen und Antworten.

Rack wird von vielen Ruby -Webrahmen verwendet und Bibliotheken, wie zum Beispiel Rubin auf Schienen und Sinatra. Es ist als Rubin erhältlich Juwel. Viele Ruby-Anwendungen werden als "Rack-konforme" bezeichnet.[2]

Rack hat ähnliche Frameworks in inspiriert JavaScript[3] (Jack.js), Clojure,[4] Perl (Plack), Common Lisp (Klappern),[5] und .NETZ (Owin).[6]

Überblick

Die Eigenschaften einer Rack -Anwendung sind, dass das Anwendungsobjekt auf die Anrufmethode reagiert. Die Anrufmethode nimmt das Umgebungsobjekt als Argument auf und gibt das Rack -Antwortobjekt zurück.

Umfeld[7]

Die Umgebung, die von der Anrufmethode als Argument genommen wird, bezieht sich auf ein Objekt, das:
a) Informationen zur HTTP -Anfrage

Dies umfasst die Informationen wie:

  • HTTP -Anforderungsmethode
  • Das URL Informationen (Informationen, die sich an die Anwendung lenken, Informationen, die zum tatsächlichen Standort in der Anwendung angewiesen sind, Abfragezeichenfolge)
  • Serverinformationen wie den Servernamen und den Serverport
  • Das http Metavariablen die vom Kunden erhalten werden

b) Rackspezifische Informationen

Dies beinhaltet die Informationen wie

  • Die Version der Rack -Anwendung, die ausgeführt wird
  • Das URL -Schema, das verwendet wird, dh, wenn die empfangene Anfrage http oder https ist.
  • Die rohen HTTP -Daten.
  • Ein Ruby -Objekt für die Meldung von Fehlern.
  • Informationen wie wenn das Anwendungsobjekt gleichzeitig aus einem anderen Thread oder Prozess aufgerufen wird.
  • Informationen zu den Servererwartungen und -funktionen (Fähigkeit des Servers für die Verbindungsentführung).

Falls die Anwendung als Middleware verwendet wird, kann die Umgebung Objekte haben, die Sitzungsinformationen, Protokollierungsfunktionen und Informationen zur Größe der Daten bereitstellen, die zum Lesen verwendet werden können, und schreibt usw. Zusätzlich dazu kann der Server kann Speichern Sie ihre eigenen Daten in der Umgebung.

Rackantwort[7]

Das Rack -Server -Objekt gibt eine Antwort zurück, die drei Teile enthält: den Status, die Header und den Körper.

  • Der Status enthält die HTTP -Statuscodes wie 200.404.
  • Der Header enthält die Antwort für jeden und gibt die Schlüsselwertpaare. Die Schlüssel müssen Saiten sein.
  • Body enthält die endgültigen Daten, die vom Server an den Antragsteller gesendet werden.

Rack :: Antwort bietet eine bequeme Schnittstelle, um eine Rack -Antwort zu erstellen. Die Klasse Rack :: Antwort ist in lib/rack/response.rb definiert. Um die Antwortklasse zu verwenden, instanziieren Sie sie von der Middleware -Ebene im Stapel. Es kann verwendet werden, um die Cookies zu ändern.

Middleware in Racks[7]

Rack macht es einfach, eine Kette von hinzuzufügen Middleware Komponenten zwischen der Anwendung und dem Webserver. Mehrere Middleware -Komponenten können im Rack verwendet werden, das die Anforderung/Antwort modifiziert, bevor sie an die nächste Komponente übergeben. Dies nennt man Middleware Stack.

Der Rack -Server fügt standardmäßig mehrere Middleware für die Funktionen hinzu, z. B. die Ausnahme mit allen Details.[8] Validierung der Anfrage und Antworten entsprechend der Rackspezifikation[9] usw.

Beispielanwendung

Ein Rack-kompatibel "Hallo Welt"Anwendung in Rubin Syntax:

# HelloWorld.ru # Die Anwendung mit der Anrufmethode definiert. Klasse Hallo Welt  # Aufrufmethode, mit der der HTTP -Statuscode, den Inhaltstyp und den Inhalt zurückgegeben werden würde.  def Anruf (env)  [200, {"Inhaltstyp" => "text/html; charset = utf-8"}, ["Hallo Welt"]]  Ende Ende 

Der Server für den obigen Code kann mit "Rackup HelloWorld.ru" initiiert werden und kann unter zugegriffen werden http: // localhost: 9292/ Der von der Rack -Anwendung verwendete Standardport ist 9292.

Siehe auch

Verweise

  1. ^ "Veröffentlichungen - Rack/Rack". Abgerufen 20. Juni 2020 - via GitHub.
  2. ^ Pfannkuchen: Wie man zusammen stapelte und lose zusammenpaare, basierende Webapps mit basierten Rackbasis zusammen. Rubyinside.com (2009-12-04). Abgerufen am 2013-09-20.
  3. ^ Jack - Einführung Archiviert 2014-12-17 bei der Wayback -Maschine. Jackjs.org. Abgerufen am 2013-09-20.
  4. ^ Ring - Einführung. Github.com. Abgerufen am 2020-04-20.
  5. ^ clacklisp.org. Abgerufen am 2014-10-17.
  6. ^ http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-project-katana. ASP.NET. Abgerufen am 2014-10-01.
  7. ^ a b c "Dokumentation für Rack". www.rubydoc.info. Abgerufen 2016-09-14.
  8. ^ "Rack :: Showexceptions". www.rubydoc.info. Abgerufen 2016-09-14.
  9. ^ "Rack :: Lint". www.rubydoc.info. Abgerufen 2016-09-14.

Externe Links