Rack Middleware for LINK/UNLINK
Provides a simple implementation of HTTP Link and Unlink Methods draft-snell-link-method-08 as configurable Rack middle-ware.
The code provides an easy way to instrument any existing Rack based application with support for the
LINK
and UNLINK
HTTP Methods.
Installation
Add the gem into your Gemfile:
gem 'link-middleware', :git => "git://github.com/ldodds/link-middleware.git"
Or:
sudo gem install link-middleware
Basic Usage
There are two separate middleware components:
LinkMiddleware::Filter
-- provides the basic LINK/UNLINK supportLinkMiddleware::Annotator
--- provides support for annotating requests with stored links
Here is a simple example see: examples/simple.rb
require 'sinatra'
require 'link-middleware'
set :store, LinkMiddleware::MemoryStore.new
use LinkMiddleware::Filter, :store => settings.store
use LinkMiddleware::Annotator, :store => settings.store
get '/' do
'Hello World'
end
The Filter
middleware will intercept and process LINK
and UNLINK
requests.
The Annotator
middleware will automatically annotate responses to /
with any stored links.
The middleware is configured to use a shared in-memory store. To make this persistent across HTTP connections the store instance is cached as a Sinatra setting
Link Store Implementations
- In-Memory
- Redis (TODO)
- RDF Triplestore (TODO)
To configure a Link Store. The following will instantiate a new instance, passing any additional options to the constructor of the store class:
use LinkMiddleware::Filter, :store_impl => LinkMiddleware::MemoryStore
Or, initialize the middleware with an existing object:
use LinkMiddleware::Filter, :store => LinkMiddleware::MemoryStore.new
Link Store implementations should have the following methods:
add(context_uri, header)
remove(context_uri, header)
read(context_uri)
The header parameter passed to add
and remove
will be an instance of LinkHeader
from the
link-header gem. This will have an array of links. Similarly
the response from read
should be a LinkHeader
instance.
Licence
Placed into the public domain under the unlicence. See LICENCE.md