Readme and build script cleanup

This commit is contained in:
Greg Hale 2016-09-21 10:54:26 -04:00
parent 5a38a7b1ff
commit 93fe36c332
3 changed files with 41 additions and 62 deletions

View File

@ -1,63 +1,13 @@
# servant-reflex
[![Build Status](https://travis-ci.org/imalsogreg/servant-reflex.svg?branch=dynamic)](https://travis-ci.org/imalsogreg/servant-reflex)
[![Build Status](https://travis-ci.org/imalsogreg/servant-reflex.svg?branch=master)](https://travis-ci.org/imalsogreg/servant-reflex)
## The problem `servant-reflex` solves
Keeping your frontend in sync with your API server can be difficult - when the API changes its input parameters or return type, XHR requests from the frontend will fail at runtime. If your API is defined by [servant](haskell-servant.readthedocs.io) combinators, you can use `servant-reflex` to share the API between the server and frontend.
Syncronization between is checked at compile time, and rather than building XHR requests by hand, API endpoints are available behind `reflex`'s FRP semantics.
This library lets you automatically derive [`reflex-dom`](https://github.com/reflex-frp/reflex-dom) clients that query each endpoint of a [`servant`](htps://github.com/haskell-servant/servant) webservice.
## Building the library and test server
### With `reflex-platform`:
First build the library:
```
git clone https://github.com/imalsogreg/servant-reflex
cd servant-reflex
git submodule update --init --recursive
./build.sh
./toSite.sh
```
(the `toSite.sh` script copies the generated javascript to the server's static assets directory)
Then build the test server (not in a nix-shell):
```
./init-sandbox.sh
cd testserver && cabal install --only-dep && cabal build && cd ..
```
### Or, with a system-wide ghcjs
You will need a recent [GHCJS installation](https://github.com/ghcjs/ghcjs), or use the [reflex-platform](https://github.com/reflex-frp/reflex-platform). A [snap](https://github.com/snapframework) server using [servant-snap](https://github.com/haskell-servant/servant-snap) is provided for serving the api. `Snap 1.0` is not yet on Hackage (and servant-snap is still experimental), but we bundle the sources as a git submodule. To install everything with cabal:
```
git clone https://github.com/imalsogreg/servant-reflex
cd servant-reflex
git submodule update --init --recursive
./init-sandbox.sh
cd testserver && cabal install --only-dep && cabal build && cd ..
cabal install --only-dep
cabal build
./toSite
```
The `toSite.hs` script copies the ghcjs-generated files into the server's static directory.
## Running the example site
The server must be run from the directory where static assets live:
```
cd testserver
dist/build/back/back -p 8001
```
And simply browse to `localhost:8001`
## Example
@ -156,8 +106,35 @@ This example builds some input fields to enter API parameters, buttons to trigge
For a great introduction to recative DOM building, see the [README](https://github.com/reflex-frp/reflex-platform) for the `reflex-platform`. For more information about servant, see their [documentation](http://haskell-servant.readthedocs.io/en/stable/). Thanks to the respective authors of these fabulous libraries.
## TODOs
- Request Headers
- Tests
- Code cleanup
## Building the library and test server
This repository comes with a small example of an API shared between a ghcjs-compiled frontend ([exec/](https://github.com/imalsogreg/servant-reflex/tree/master/exec)) and a ghc-compiled backend ([testserver/](https://github.com/imalsogreg/servant-reflex/tree/master/testserver). To build these components:
First build the library:
```
git submodule update --init --recursive
./build.sh
```
Then build the test server:
```
deps/reflex-platform/work-on ./overrides-ghc.nix ./testserver --command "cd testserver && cabal build"
```
## Running the example site
The server must be run from the directory where static assets live:
```
cd testserver
dist/build/back/back -p 8001
```
And simply browse to `localhost:8001`
**For a larger example of a project that shares types between backend and frontend, see [hsnippet](https://github.com/mightybyte/hsnippet).**

View File

@ -1,3 +1,3 @@
#!/bin/sh
#!/usr/bin/env bash
deps/reflex-platform/work-on ./overrides.nix ./. --run "cabal configure --ghcjs && cabal build && testdriver/toSite.sh"
deps/reflex-platform/work-on ./overrides.nix ./. --run "cabal configure --ghcjs && cabal build && exec/toSite.sh"

View File

@ -1 +1,3 @@
#!/usr/bin/env bash
cp dist/build/example/example.jsexe/* testserver/static