Contents
1 Introduction
You can find Webmachine here: https://github.com/webmachine/webmachine
Most of what you need to know is here: https://github.com/webmachine/webmachine/wiki
More help with Webmachine is here:
2 Generating a Webmachine starter application
Instructions can be found here https://github.com/webmachine/webmachine under "Quick Start".
These instructions use rebar3. For more on rebar3, see: https://github.com/erlang/rebar3.
Step 1. Install rebar3, if you do not already have it.
Step 2. Create the Webmachine template for rebar3:
$ mkdir -p ~/.config/rebar3/templates $ git clone git://github.com/webmachine/webmachine-rebar3-template.git ~/.config/rebar3/templates
Step 3. Create a new Webmachine starter application:
$ cd my_work_directory $ rebar3 new webmachine myapp
Step 4. Build (compile) your application:
$ cd myapp $ rebar3 release
Now, you can edit (possibly following the notes below), re-build, and test your application, repeatedly.
3 Configuration
You can specify configuration options in myapp/config/sys.config, then retrieve them and return them from myapp/src/myapp_config:web_config/0.
Here is an example of myapp/config/sys.config:
[ {'myapp01', [{web_ip, "0.0.0.0"}, {web_port, 8080}]} ].
And, here is an example of myapp/src/myapp_config:web_config/0:
web_config() -> {ok, App} = application:get_application(?MODULE), {ok, Ip} = application:get_env(App, web_ip), {ok, Port} = application:get_env(App, web_port), [ {ip, Ip}, {port, Port}, {log_dir, "priv/log"}, {dispatch, dispatch()} ].
4 Dispatching and resources
In Webmachine, a resource is implemented in an Erlang module in myapp/src, for example, myapp/src/myapp_simple_resource.erl. This module implements a number of functions, some required and some optional. For a description of those functions, see: https://github.com/webmachine/webmachine/wiki/Resource-Functions.
Dispatching guides Webmachine to that module based on a URI, and that "routes" that you specify in myapp/src/myapp_config:dispatch/0.
The list returned by dispatch/0 specifies a set of routes. Each "route" specifies (1) a pattern to be matched against the request URI, (2) a resource implementation module, and (3) configuration arguments to be passed to the init/1 function in the resource implementation module.
Keep in mind that you can retrieve query strings using wrq:get_qs_value/2.
And, you can retrieve parts of the URI that match atoms using wqr:get_path_info/2 and the atom that was replaced.
For more on developing REST-style applications in Erlang and Webmachine, see: http://www.davekuhlman.org/design-and-implement-a-rest-api.html