🪁 A simple, type-safe http server for PureScript
Go to file
2023-09-18 10:28:47 +01:00
.github/workflows Minor fixes 2022-08-25 12:16:36 +01:00
.vscode Update node libs (tests do not pass) 2023-09-18 10:28:47 +01:00
docs Minor fixes 2022-08-25 12:16:36 +01:00
LICENSES Add record extra license information 2022-08-25 12:02:28 +01:00
src Update node libs (tests do not pass) 2023-09-18 10:28:47 +01:00
test Update node libs (tests do not pass) 2023-09-18 10:28:47 +01:00
.envrc #153 bind to 0.0.0.0 instead of localhost (#154) 2020-02-26 16:43:38 -08:00
.gitignore Update for PureScript 0.15 (#194) 2022-05-04 14:02:29 -07:00
.tidyrc.json Update for PureScript 0.15 (#194) 2022-05-04 14:02:29 -07:00
bower.json Update bower.json 2022-11-19 08:54:25 -03:00
CHANGELOG.md Update changelog 2022-08-25 12:47:05 +01:00
Contributing.md Rename 'master' branch to 'main' (#173) 2021-03-22 12:34:49 -07:00
History.md Release notes for v0.14.0 2021-12-06 21:03:07 -08:00
License Rename modules and rudimentarily update readme 2022-05-22 12:48:32 +01:00
packages.dhall Upgrade package set 2023-09-18 10:28:47 +01:00
Readme.md Migrate to record studio 2022-11-19 08:52:47 -03:00
Releasing.md Update Releasing notes 2021-11-20 09:47:43 -08:00
shell.nix Use niv out of nixpkgs (#195) 2022-05-04 23:33:37 -07:00
sources.json Update for PureScript 0.15 (#194) 2022-05-04 14:02:29 -07:00
sources.nix Use niv out of nixpkgs (#195) 2022-05-04 23:33:37 -07:00
spago.dhall Update node libs (tests do not pass) 2023-09-18 10:28:47 +01:00
test.dhall Update node libs (tests do not pass) 2023-09-18 10:28:47 +01:00

HTTPurple 🪁

License purescript-httpurple on Pursuit

A functional http server with a focus on type-safety and making the common case easy.

Note: If you are looking for a http client, check out purescript-fetch

Note: This project was originally forked from the amazing HTTPure http server framework, but has since deviated quite a bit. If you are coming from HTTPure you might want to have a look at the differences to HTTPure.

ToC

  1. Features
  2. Installation
  3. Quick start
  4. Documenation
  5. Examples
  6. Testing
  7. License

Features

  • λ fp-style http server & request handlers
  • 🛣 Powerful & type-safe routing dsl
  • 🕵🏻‍♂️ Easy json parsing and data validation
  • 🥪 Supports Node/Express middlewares
  • 📜 Extensive documentation & examples

Installation

spago install httpurple

Quick start

module Main where

import Prelude hiding ((/))

import HTTPurple

data Route = Hello String
derive instance Generic Route _

route :: RouteDuplex' Route
route = mkRoute
  { "Hello": "hello" / segment
  }

main :: ServerM
main =
  serve { port: 8080 } { route, router }
  where
  router { route: Hello name } = ok $ "hello " <> name

then start the server

➜ spago run
           Src   Lib   All
Warnings   0     0     0  
Errors     0     0     0  
[info] Build succeeded.
HTTPurple 🪁 up and running on http://0.0.0.0:8080

query your server, e.g. using httpie

➜ http http://localhost:8080/hello/🗺  
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 10
Date: Sun, 22 May 2022 16:50:52 GMT
Keep-Alive: timeout=5

hello 🗺

Documentation

See the docs folder for the in-depth guides.

  • Basics - Basic introduction to HTTPurple 🪁
  • Routing - Explanation of the routing dsl
  • Requests - Guide to request handling
  • Response - Guide to response handling
  • Middleware - Guide to HTTPurple and Node.js middlewares
  • Differences - A detailed description of the differences to HTTPure

Examples

HTTPurple ships with a number of examples. To run an example, in the project root, run:

spago -x test.dhall run --main Examples.<Example Name>.Main

Each example's startup banner will include information on routes available on the example server.

Testing

To run the test suite, in the project root run:

spago -x test.dhall test

License

This is a fork of HTTPure, which is licensed under MIT. See the original license. This work is similarly licensed under MIT.