purescript-fetch/README.md
2022-08-26 14:10:09 +01:00

83 lines
1.8 KiB
Markdown

# purescript-fetch
High-level library for the [WHATWG Fetch Living Standard](https://fetch.spec.whatwg.org/).
`purescript-fetch` works on browser and Node.js.
Running on Node.js requires version `>17.5`, see [# Usage](#usage).
## Installation
```bash
spago install fetch
```
## Usage
**Note:**
Node.js `<17.5` is not supported.
Node.js `>=17.5` and `<18.0` requires the `--experimental-fetch` node options:
```bash
NODE_OPTIONS=--experimental-fetch spago run
```
Node.js `>18.0` you don't need to set the `--experimental-fetch` node option.
Perform a simple `GET` request:
```purescript
fetch "https://httpbin.org/get" {} >>= _.text
```
Perform a `POST` request:
```purescript
do
{ status, text } <- fetch "https://httpbin.org/post"
{ method: POST
, body: """{"hello":"world"}"""
, headers: { "Content-Type": "application/json" }
}
responseText <- text
```
### Json parsing
`fetch` works well with `yoga-json` and `argonaut`, use our little helper libraries.
### yoga-json
```bash
spago install fetch-yoga-json
```
```purescript
type HttpBinResponse = { json :: { hello :: String } }
main :: Effect Unit
main = launchAff_ do
{ json } <- fetch "https://httpbin.org/post"
{ method: POST
, body: writeJSON { hello: "world" }
, headers: { "Content-Type": "application/json" }
}
{ json: { hello: world } } :: HttpBinResponse <- fromJSON json
log world
```
### argonaut
```bash
spago install fetch-argonaut
```
```purescript
type HttpBinResponse = { json :: { hello :: String } }
do
{ json } <- fetch "https://httpbin.org/post"
{ method: POST
, body: toJsonString { hello: "world" }
, headers: { "Content-Type": "application/json" }
}
{ json: { hello: world } } :: HttpBinResponse <- fromJson json
log world
```