| 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リクエストに関する情報
これには次のような情報が含まれます:
- HTTPリクエストメソッド
- URL情報(アプリケーションへ誘導する情報、アプリケーション内の実際の場所へ誘導する情報、クエリ文字列)
- サーバー名やサーバーポートなどのサーバー情報
- クライアントから受信したHTTPメタ変数
b) ラック固有の情報
これには次のような情報が含まれます
- 実行中のRackアプリケーションのバージョン
- 使用される URL スキーム、つまり、受信した要求が http か https かを示します。
- 生の HTTP データ。
- エラーを報告するための Ruby オブジェクト。
- アプリケーション オブジェクトが別のスレッドまたはプロセスから同時に呼び出されるかどうかなどの情報。
- サーバーの期待と機能に関する情報 (接続ハイジャックに対するサーバーの機能)。
アプリケーションがミドルウェアとして使用されている場合、環境には、セッション情報、ログ機能、読み取りおよび書き込みに使用できるデータのサイズに関する情報などを提供するオブジェクトが存在する可能性があります。これらに加えて、サーバーは独自のデータを環境に保存できます。
ラックレスポンス
出典: [ 7 ]
ラック サーバー オブジェクトは、ステータス、ヘッダー、本文の 3 つの部分を含む応答を返します。
- ステータスには、200、404 などのHTTP ステータス コードが含まれます。
- ヘッダーにはそれぞれのレスポンスが含まれており、キーと値のペアが提供されます。キーは文字列である必要があります。
- 本文には、サーバーから要求元に送信される最終データが含まれます。
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 です。
参照
- Python WSGI
- Perl PSGI
- ジャバスクリプト JSGI
- Pythonペースト
- スモールトークシーサイド
- 高速CGI
- Javaサーブレット
- サーバーサイドJavaScript
- Apache JServ プロトコル
- ゼロCアイス
- シスコエッチング
- ISAPIインターネット サーバー アプリケーション プログラミング インターフェイス (Microsoft)
参考文献
- ^ 「リリース - rack/rack」 。 2022年12月5日閲覧– GitHub経由。
- ^ Pancake: ラックベースのウェブアプリをスタックして疎結合する方法. Rubyinside.com (2009年12月4日). 2013年9月20日閲覧。
- ^ jack - introduction Archived 2014-12-17 at the Wayback Machine . Jackjs.org. Retrieved on 2013-09-20.
- ^ ring - introduction . GitHub.com. 2020年4月20日閲覧。
- ^ clacklisp.org . 2014年10月17日閲覧。
- ^ https://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana . Asp.net. 2014年10月1日閲覧。
- ^ a b c「rackのドキュメント」 . www.rubydoc.info . 2016年9月14日閲覧。
- ^ "Rack::ShowExceptions" . www.rubydoc.info . 2016年9月14日閲覧。
- ^ "Rack::Lint" . www.rubydoc.info . 2016年9月14日閲覧。