module
ActionController::Responders
Direct including types
Defined in:
action-controller/responders.crConstant Summary
-
MIME_TYPES =
{ binary: "application/octet-stream", json: "application/json", xml: "application/xml", text: "text/plain", html: "text/html", yaml: "text/yaml", } -
common response mime types
-
REDIRECTION_CODES =
{ multiple_choices: 300, moved_permanently: 301, found: 302, see_other: 303, not_modified: 304, use_proxy: 305, temporary_redirect: 307, permanent_redirect: 308, } -
codes to use when redirecting
-
STATUS_CODES =
{ continue: 100, switching_protocols: 101, processing: 102, ok: 200, created: 201, accepted: 202, non_authoritative_information: 203, no_content: 204, reset_content: 205, partial_content: 206, multi_status: 207, already_reported: 208, im_used: 226, bad_request: 400, unauthorized: 401, payment_required: 402, forbidden: 403, not_found: 404, method_not_allowed: 405, not_acceptable: 406, proxy_authentication_required: 407, request_timeout: 408, conflict: 409, gone: 410, length_required: 411, precondition_failed: 412, payload_too_large: 413, uri_too_long: 414, unsupported_media_type: 415, range_not_satisfiable: 416, expectation_failed: 417, misdirected_request: 421, unprocessable_entity: 422, locked: 423, failed_dependency: 424, upgrade_required: 426, precondition_required: 428, too_many_requests: 429, request_header_fields_too_large: 431, unavailable_for_legal_reasons: 451, internal_server_error: 500, not_implemented: 501, bad_gateway: 502, service_unavailable: 503, gateway_timeout: 504, http_version_not_supported: 505, variant_also_negotiates: 506, insufficient_storage: 507, loop_detected: 508, not_extended: 510, network_authentication_required: 511, } -
standard response codes
Class Method Summary
-
.write_string(response : HTTP::Server::Response, body : String) : Nil
A String is already the complete response body.
Macro Summary
-
head(status)
only sends the header, no content to be sent.
-
redirect_to(path, status = :found)
redirects the browser to a new route
-
render(status = :ok, head = nil, json = nil, yaml = nil, xml = nil, html = nil, text = nil, binary = nil, template = nil, partial = nil, layout = nil)
used to stream a response back to the user, serializing directly to the IO
-
respond_with(status = :ok, &block)
uses the content-type header to respond in the appropriate format
Instance Method Summary
-
#accepts_formats : Array(String)
Extracts the mime types from the Accept header
Class Method Detail
A String is already the complete response body. Crystal's HTTP response switches to chunked transfer when a write reaches its output buffer size; supplying the known length avoids that work for large bodies. Leave custom output wrappers and explicit framing headers in control of their own bytes.
Macro Detail
only sends the header, no content to be sent.
you should only use render with the Macro DSL
delete "/:id", :destroy do
MyModel.find(route_params["id"]).destroy
head HTTP::Status::ACCEPTED
end
redirects the browser to a new route
you should only use render with the Macro DSL
patch "/:id", :update do
redirect_to "/#{params["id"]}"
end
used to stream a response back to the user, serializing directly to the IO
the content type is set appropriately based on the response type
a call to render implicitly executes a return as the response has been written to the client
you should only use render with the Macro DSL
get "/:id", :show do
render json: MyModel.find(route_params["id"])
end
uses the content-type header to respond in the appropriate format
you should only use render with the Macro DSL
get "/:id", :show do
model = MyModel.find(route_params["id"])
respond_with do
text model # calls to_s(response) on the object passed
json model # calls to_json(response) on the object passed
xml do # can provide a block to perform additional processing too
str = "<set_var>#{model.build_xml}</set_var>"
XML.parse(str)
end
end
end
Instance Method Detail
Extracts the mime types from the Accept header
Scanned by hand rather than split(";").flat_map(&.split(ACCEPT_SEPARATOR_REGEX)...).
Every route that negotiates a content type runs this on every request, and
the regex plus the intermediate arrays it built dominated the cost.
Behaviour is unchanged, including that only a comma consumes the whitespace
that follows it.