| Rack、Ruby ウェブサーバーインターフェース | |
|---|---|
| 原作者 | リア・ノイキルヒェン |
| 開発者 | ジェームズ・タッカー、ジョシュ・ピーク、ホセ・ヴァリム、マイケル・フェリンジャー、アーロン・パターソン、サンティアゴ・パストリーノ、コンスタンティン・ハーセ |
| 安定版リリース | |
| リポジトリ | |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | ミドルウェア |
| ライセンス | MITライセンス |
| Webサイト | ラック |
Rackは、 Rubyプログラミング言語で開発された、 WebサーバーとWebアプリケーション間のモジュール型インターフェースです。Rackでは、Webフレームワークとミドルウェアのアプリケーションプログラミングインターフェース(API)が、 HTTPリクエストとレスポンスを処理する単一のメソッド呼び出しにラップされます。
Rackは、 Ruby on RailsやSinatraなど、多くのRubyウェブフレームワークやライブラリで使用されています。Ruby Gemとして入手可能です。多くのRubyアプリケーションは「rack準拠」と呼ばれています。[ 2 ]
RackはJavaScript [ 3 ] (jack.js)、Clojure [ 4 ] 、 Perl ( Plack )、Common Lisp (Clack)、[ 5 ] 、. NET ( OWIN )などの同様のフレームワークに影響を与えてきました。 [ 6 ]
Rackアプリケーションの特徴は、アプリケーションオブジェクトがcallメソッドに応答することです。callメソッドは環境オブジェクトを引数として受け取り、Rackレスポンスオブジェクトを返します。
出典: [ 7 ]
呼び出しメソッドの引数として取られる環境は、次の情報を持つオブジェクトを参照します: a) HTTPリクエストに関する情報
これには次のような情報が含まれます:
b) ラック固有の情報
これには次のような情報が含まれます
アプリケーションがミドルウェアとして使用されている場合、環境には、セッション情報、ログ機能、読み取りおよび書き込みに使用できるデータのサイズに関する情報などを提供するオブジェクトが存在する可能性があります。これらに加えて、サーバーは独自のデータを環境に保存できます。
出典: [ 7 ]
ラック サーバー オブジェクトは、ステータス、ヘッダー、本文の 3 つの部分を含む応答を返します。
Rack::Response は、 Rack レスポンスを作成するための便利なインターフェースを提供します。Rack ::Responseクラスは lib/rack/response.rb で定義されています。Response クラスを使用するには、スタックの下位にあるミドルウェア層でインスタンス化します。このクラスは、Cookie の変更に使用できます。
出典: [ 7 ]
Rackを使用すると、アプリケーションとWebサーバーの間にミドルウェアコンポーネントのチェーンを簡単に追加できます。Rackでは複数のミドルウェアコンポーネントを使用でき、リクエスト/レスポンスを次のコンポーネントに渡す前に変更することができます。これをミドルウェアスタックと呼びます。
Rackサーバーは、例外の詳細をすべて表示したり、 [ 8 ] Rack仕様に従ってリクエストとレスポンスを検証したりする機能のために、デフォルト で複数のミドルウェアを追加します。[ 9 ]
Ruby構文によるRack 互換の「Hello World」アプリケーション:
# helloWorld.ru # callメソッドが定義されているアプリケーション。class HelloWorld # HTTPステータスコード、コンテンツタイプ、コンテンツを返すcallメソッド。def call ( env ) [ 200 , { " content - type" => "text/html; charset=utf-8" }, [ "Hello World" ]] end endHelloWorldを実行します。上記のコードのサーバーは、「rackup helloWorld.ru」を使用して起動でき、http://localhost:9292/でアクセスできます。Rack アプリケーションで使用されるデフォルトのポートは 9292 です。