lua-Spore
a generic ReST client

Interface

A middleware must use the namespace Spore.Middleware and follow this caveat:

local m = {}

function m:call (req)
    ... something useful
end

return m

Spore.Middleware.Auth.Basic

client:enable('Auth.Basic', {
    username = 'schacon/token',
    password = '6ef8395fecf207165f1a82178ae1b984',
})

Spore.Middleware.Auth.OAuth

This middleware requires luacrypto.

This middleware should be loaded as the last middleware, because it directly sends the request.

client:enable('Auth.OAuth', {
    oauth_consumer_key     = 'key',
    oauth_consumer_secret  = 'secret',
    oauth_token            = 'accesskey',
    oauth_token_secret     = 'accesssecret',
    oauth_signature_method = 'HMAC-SHA1',
})

Spore.Middleware.Format.JSON

client:enable 'Format.JSON'

Spore.Middleware.Format.XML

This middleware requires LuaExpat.

client:enable 'Format.XML'
client:enable('Format.XML', {
    indent      = '  ',
    key_attr    = {
        tagname = attrname,
        ...
    },
},

Spore.Middleware.Format.YAML

This middleware requires luaYAML.

client:enable 'Format.YAML'

Spore.Middleware.Parameter.Default

client:enable('Parameter.Default', {
    state = 'open',
    ...
})

Spore.Middleware.Parameter.Force

client:enable('Parameter.Force', {
    format = 'json',
    ...
})

Spore.Middleware.Proxy.Basic

client:enable('Proxy.Basic', {
    proxy    = 'http://proxy.myorg:8080',
    username = 'john',      -- optional
    password = 's3kr3t',    -- optional
})
client:enable 'Proxy.Basic'     -- uses HTTP_PROXY=http://john:s3kr3t@proxy.myorg:8080

Spore.Middleware.Cache

client:enable 'Cache'

Note: This middleware uses only URL as unique key.

Spore.Middleware.Logging

This middleware requires LuaLogging.

require 'logging.file'

client:enable('Logging', {
    logger = logging.file 'test%s.log'
})

Spore.Middleware.Mock

rules = {
    function (req) return req.method == 'HEAD' end,
    function (req) return { status = 404 } end,

    'pattern_in_url', -- shortcut for: function (req) return req.url:match 'pattern_in_url' end
    function (req) return { status = 401 } end,
}
client:enable('Mock', rules)

Spore.Middleware.Redirection

This middleware handles the header Location.

client:enable 'Redirection'

Spore.Middleware.Runtime

client:enable 'Runtime'
...
print(response.headers['x-spore-runtime']

Spore.Middleware.UserAgent

client:enable('UserAgent', {
    useragent = 'Mozilla/5.0'
})