Packages
raxx
0.12.2
1.1.0
1.0.1
1.0.0
1.0.0-rc.3
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.18.1
0.18.0
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
retired
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.14
0.14.13
0.14.12
0.14.11
0.14.10
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.1
0.11.0
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
0.0.1
Interface for HTTP webservers, frameworks and clients.
Current section
Files
Jump to
Current section
Files
README.md
# Raxx
**Interface for HTTP webservers and frameworks.
Supports server, client and bidirectional streaming.**
- [Install from hex.pm](https://hex.pm/packages/raxx)
- [Documentation available on hexdoc](https://hexdocs.pm/raxx)
### Hello World!
*Hello world example where the client sends a single request to the server and gets a single response back.*
```elixir
defmodule MyApp.WW do
use Raxx.Server
@impl Raxx.Server
def handle_request(_request, _config) do
Raxx.response(:ok)
|> Raxx.set_header("content-type", "text/plain")
|> Raxx.set_body("Hello, World!")
end
end
```
*Echo server example where the request body is streamed back to the client as it becomes available.*
```elixir
defmodule MyApp.Echo do
use Raxx.Server
@impl Raxx.Server
def handle_headers(_request, state) do
outbound = Raxx.response(:ok)
|> Raxx.set_body(true)
{[outbound], state}
end
@impl Raxx.Server
def handle_fragment(data, state) do
outbound = Raxx.fragment(data)
{[outbound], state}
end
@impl Raxx.Server
def handle_trailers(_trailers, state) do
outbound = Raxx.trailer()
{[outbound], state}
end
end
```
`Raxx.Server` specifies 5 callbacks allowing implementers to handle:
- Unary request/response exchanges.
- Client streamed requests.
- Server streamed responses.
- Bidirectional streaming.
See documentation on [hexdocs](https://hexdocs.pm/raxx/Raxx.Server.html) for details.
## Community
- [elixir-lang slack channel](https://elixir-lang.slack.com/messages/C56H3TBH8/)
- [FAQ](FAQ.md)
## Testing
To work with Raxx locally Elixir 1.4 or greater must be [installed](https://elixir-lang.org/install.html).
```
git clone git@github.com:CrowdHailer/raxx.git
cd raxx
mix deps.get
mix test
```