haleoas
Version:
139 lines (110 loc) • 3.29 kB
Markdown
Supported HTTP Methods:
* `GET` : supports url templating params using [RFC6570](http://tools.ietf.org/html/rfc6570)
* `HEAD`
* `OPTIONS`
* `PUT` : sends everything except `_link` as `content-type: application/json`
* `POST`
* `PATCH` : conforms to [RFC6902](http://tools.ietf.org/html/rfc6902) and sends `content-type:application/json-patch+json`
* `DELETE`
When running browser tests, a modern web server is expected ^1.1.
* Safari borks by babel-core because of [this silliness](https://github.com/thlorenz/convert-source-map/issues/31)
- **unminified** ~3.8kb
- **minified** ~1.4kb
**NodeJS**
`npm test`
**Browser**
`npm serve`
In your browser, visit `http://localhost:3000/test-runner.html` and look in the console.
**BREAKING CHANGE AS OF v0.3.0: All HTTP methods may receive a full request config object + `data` and `params`**
A full Request object may be passed into all methods. For mutating methods, a `data` JSON parameter may be passed for serializing
to the request body. For all methods a `params` Object parameter may be passed for expanding templated urls.
```js
import haleoas from ‘haleoas’
let hal = haleoas({ fetch: myFetchImpl })
let resource = hal({ self: ‘http://my.api.com{?foo’})
/**
* GET /?foo=bar HTTP/1.1
* Host: http://my.api.com
* Accept: application/hal+json
**/
resource.get({
params: {
foo: ‘bar’,
}
}).then({ resource, response }) => {
//the resource, mapped to the HAL body and ready for traversal
//the response, whatever is returned from `fetch`
})
```
```js
import haleoas from ‘haleoas’
let hal = haleoas({ fetch: myFetchImpl })
let resource = hal({ self: ‘http://my.api.com’})
/**
* POST / HTTP/1.1
* Host: http://my.api.com
* Content-Type: application/json
* Accept: application/hal+json
*
* {
* “foo”: “bar”
* }
**/
resource.post({
data: {
foo: ‘bar’,
},
params: { q: 'foo' }
}).then({ resource, response }) => {
//the resource, mapped to the HAL body and ready for traversal
// or, if a 201 with a `location` is returned, the new entity is returned
//the response, whatever is returned from `fetch`
})
```
```js
import haleoas from ‘haleoas’
let hal = haleoas({ fetch: myFetchImpl })
let resource = hal({ self: ‘http://my.api.com’})
/**
* DELETE / HTTP/1.1
* Host: http://my.api.com
* Accept: application/hal+json
**/
resource.delete().then({ resource, response }) => {
//the resource, mapped to the HAL body and ready for traversal
//the response, whatever is returned from `fetch`
})
```
```js
import haleoas from ‘haleoas’
let hal = haleoas({ fetch: myFetchImpl })
let resource = hal({ self: ‘http://my.api.com’})
/**
* PATCH / HTTP/1.1
* Host: http://my.api.com
* Accept: application/hal+json
* Content-Type: application/json-patch+json
*
* [
* {
* “op”:“add”,
* “path”: “/foo”,
* “value”: “bar”
* }
*]
**/
resource.patch({foo:bar}).then({ resource, response }) => {
//the resource, mapped to the HAL body and ready for traversal
//the response, whatever is returned from `fetch`
})
```