mirror of
https://github.com/rowtype-yoga/purescript-fetch.git
synced 2024-11-26 07:41:31 +03:00
83 lines
1.8 KiB
Markdown
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
|
|
```
|