- Notifications
You must be signed in to change notification settings - Fork1
Cross-library feature rich HTTP request / response API
License
digital-fabric/qeweney
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Qeweney provides a uniform API for dealing with HTTP requests and responses onthe server side. Qeweney defines a uniform adapter interface that allowshandling incoming HTTP requests and sending HTTP responses over any protocol ortransport, be it HTTP/1, HTTP/2 or a Rack interface.
Qeweney is primarily designed to work withTipi, but can also be used directlyinside Rack apps, or to drive Rack apps.
- Works with different web server APIs, notably Tipi, Digital Fabric, and Rack.
- Transport-agnostic.
- High-performance routing API inspired by Roda.
- Rich API for extracting data from HTTP requests: form parsing, cookies, fileuploads, etc.
- Rich API for constructing HTTP responses: streaming responses, HTTP upgrades,static file serving, delate and gzip encoding, caching etc.
- Suitable for both blocking and non-blocking concurrency models.
- Allows working with request before request body is read and parsed.
In Qeweney, the main class developers will interact with isQeweney::Request
,which encapsulates an HTTP request (from the server's point of view), and offersan API for extracting request information and responding to that request.
A request is always associated with anadapter, an object that implements theQeweney adapter interface, and that allows reading request bodies (for uploadsand form submissions) and sending responses.
classAdapterInterface# Reads a chunk from the request body# @req [Qeweney::Request] request for which the chunk is to be readdefget_body_chunk(req)end# Send a non-streaming response# @req [Qeweney::Request] request for which the response is sent# @body [String, nil] response body# @headers [Hash] response headersdefrespond(req,body,headers)end# Send only headers# @req [Qeweney::Request] request for which the response is sent# @headers [Hash] response headers# @empty_response [boolean] whether response is emptydefsend_headers(req,headers,empty_response:nil)end# Send a body chunk (this implies chunked transfer encoding)# @req [Qeweney::Request] request for which the response is sent# @body [String, nil] chunk# @done [boolean] whether response is finisheddefsend_chunk(req,body,done:false)end# Finishes response# @req [Qeweney::Request] request for which the response is sentdeffinish(req)endend
About
Cross-library feature rich HTTP request / response API