orq - Observable Request Queue
HTTP Request Queue Optimized for Web Workers.
Features
- TTL cache
- RESTful cache policy
- Cancelable requests
- Duplicate request elimination
- Works with Web Workers
- Platform independent
Usage
worker.js
import { mkMemCache, mkCachePolicy, mkReceiver } from 'orq'
import request from '@orq/superagent'
const fiveMinutes = 300000
const applyCachePolicy = mkCachePolicy({ ttl: fiveMinutes })
const cache = applyCachePolicy(mkMemCache())
mkReceiver(self, request, cache)
main.js
import mkInterface from 'orq/interface'
const orqWorker = new Worker('worker.js')
const orq = mkInterface(orqWorker)
Featrues in detail
TTL cache
mkCachePolicy({
ttl: 3600000,
ressources: {
'https://example.com/api': {
'/fish': {
ttl: 180000,
},
},
},
})
RESTful cache policy
⚠️ Pseudo code ahead
orq.addRequest('https://example.com/api/fish')
.subscribe()
orq.addRequest('https://example.com/api/fish/42', { method: 'PUT' })
.subscribe()
orq.addRequest('https://example.com/api/fish/42')
.subscribe()
Cancelable requests
const requestSub = orq.addRequest('https://example.com/api/fish', { cancelable: true })
.subscribe()
setTimeout(() => {
requestSub.unsubscribe()
}, 1000)
By default all requests are cancelable except GET
requests. The reasoning is, that the user might request the same resource again, at which point the response can be served from cache. So that's why we have to pass the option explicitly in the above GET
request.
Duplicate request elimination
orq.addRequest('https://example.com/api/fish')
.subscribe()
orq.addRequest('https://example.com/api/fish')
.subscribe()
Platform independent
The request
implementation isn't implemented by orq
itself. So you may write your own. For example by wrapping the node internal http
/https
modules. orq
only uses a subset of the worker API. You could easily wrap the node cluster module to provide a worker like API. Those wrapped node master/worker can then be passed to orq
mkInterface
and mkReceiver
. See test helpers to see how this could be done.
TODO
- update deps
- write @orq/superagent
- cannot add type constraints on request and response bodies
- cache policy should limit cache item size
Developed at Vimcar.