Rack (web server interface)
Rack is a modular interface between web servers and web applications developed in the Ruby programming language. With Rack, application programming interfaces for web frameworks and middleware are wrapped into a single method call handling HTTP requests and responses.
Rack is used by many Ruby web frameworks and libraries, such as Ruby on Rails and Sinatra. It is available as a Ruby Gem. Many Ruby applications are called "rack-compliant".
Rack has inspired similar frameworks in JavaScript, Clojure, Perl, Common Lisp, and.NET.
Overview
The characteristics of a Rack application is that the application object responds to the call method. The call method takes in the environment object as argument and returns the Rack response object.Environment
Source:The environment that is taken as argument by the call method refers to an object that has:
a) Information on the HTTP Request
This includes the information like:
- HTTP request method
- The URL information
- Server information like the server name and server port
- The HTTP metavariables that are received from the client
This includes the information like
- The version of the Rack application that is running
- The URL scheme that is used, that is, if the request that is received is http or https.
- The raw HTTP data.
- A Ruby object for reporting errors.
- Information like if the application object is simultaneously invoked from another thread or process.
- Information on the server expectations and capabilities.
Rack response
Source:The rack server object returns a response which contains three parts: the status, headers and the body.
- The status contains the HTTP status codes such as 200, 404.
- The header contains the response for each and gives the key-value pairs. The keys have to be strings.
- Body contains the final data which is sent by the server to the requester.
Middleware in racks
Source:Rack makes it easy to add a chain of middleware components between the application and the web server. Multiple middleware components can be used in the rack which modifies the request/response before handing it over to the next component. This is called middleware stack.
The Rack server adds multiple middle middleware by default for the functionalities like showing exception with all the details, validating the request and responses according to the Rack spec etc.
Example application
A Rack-compatible "Hello World" application in Ruby syntax:- helloWorld.ru
- The application that has the call method defined.
# Call method that would return the HTTP status code, the content type and the content.
def call
[200,, ["Hello World"
end
end
run HelloWorld.new