okapi/README.md

38 lines
1.6 KiB
Markdown
Raw Normal View History

2022-03-31 05:35:32 +03:00
# Okapi
2022-03-31 05:45:20 +03:00
A microframework based on monadic parsing. Official documentation [here](https://www.okapi.wiki/).
2022-03-31 05:35:32 +03:00
2022-07-27 06:42:57 +03:00
import Callout from 'nextra-theme-docs/callout'
2022-03-31 05:35:32 +03:00
## Introduction
2022-07-27 06:42:57 +03:00
**Okapi** is a microframework for building web servers using parsers.
2022-03-31 05:35:32 +03:00
In contrast to other web frameworks in the Haskell ecosystem, Okapi is primarily concerned with being easy to understand and use, instead of extreme type safety.
2022-07-27 06:42:57 +03:00
2022-03-31 05:35:32 +03:00
Here's an example of a simple web server:
```haskell
{-# LANGUAGE OverloadedStrings #-}
import Data.Text
import Okapi
main :: IO ()
main = runOkapi id 3000 greet
greet = do
2022-07-27 06:42:57 +03:00
pathSeg "greet"
name <- pathParam
okPlainText [] $ "Hello " <> name <> "! I'm Okapi."
2022-03-31 05:35:32 +03:00
```
Running this code will start a server on [localhost:3000](http://localhost:3000.org).
If you go to [http://localhost:3000/greeting/Bob]() the server will respond with `Hello Bob! I'm Okapi.` in plain text format.
2022-07-27 06:42:57 +03:00
Okapi provides [monadic parsers](https://www.cs.nott.ac.uk/~pszgmh/monparsing.pdf) for extracting data from HTTP requests.
Since they are monads, parsers can be used with all `Applicative`, `Alternative`, and `Monad` typeclass methods, plus other Haskell idioms like [parser combinators](https://hackage.haskell.org/package/parser-combinators).
Because of this, parsers are very modular and can be easily composed with one another to fit your specific your needs.
2022-03-31 05:35:32 +03:00
2022-07-27 06:42:57 +03:00
With Okapi, and the rest of the Haskell ecosystem, you can create anything from simple website servers to complex APIs for web apps.
2022-03-31 05:35:32 +03:00
All you need to get started is basic knowledge about the structure of HTTP requests and an idea of how monadic parsing works.