Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rowtype-yoga/purescript-fetch


https://github.com/rowtype-yoga/purescript-fetch

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

        

# 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
```