|
@@ -11,6 +11,13 @@ Just plug REST endpoint directly to your Cowboy router:
|
|
|
{"/rest/:resource/:id", rest_cowboy, []},
|
|
|
```
|
|
|
|
|
|
+Emakefile
|
|
|
+```
|
|
|
+{["deps/jsone/src/*"], [{outdir, "deps/ebin"}]}.
|
|
|
+
|
|
|
+{["deps/rest/src/rest.erl", "deps/rest/src/*"], [{outdir, "deps/ebin"}]}.
|
|
|
+```
|
|
|
+
|
|
|
Module
|
|
|
------
|
|
|
|
|
@@ -19,31 +26,50 @@ Sample REST service implementation:
|
|
|
```erlang
|
|
|
-module(rest_users).
|
|
|
-compile({parse_transform, rest}).
|
|
|
+
|
|
|
-export([init/0, populate/1, new/0, exists/1, get/0, get/1, post/1, delete/1]).
|
|
|
+-export([keys_allowed/1]).
|
|
|
+
|
|
|
|
|
|
-record(user, {id, cn, name, type}).
|
|
|
-rest_record(user).
|
|
|
|
|
|
+keys_allowed(Keys) ->
|
|
|
+ Allow = [<<"id">>, <<"test">>],
|
|
|
+ lists:all(fun(X) ->
|
|
|
+ lists:member(X, Allow)
|
|
|
+ end, Keys).
|
|
|
+
|
|
|
new() -> #user{}.
|
|
|
-init() -> ets:new(users, [public, named_table, {keypos, #user.id}]).
|
|
|
-populate(Users) -> ets:insert(users, Users).
|
|
|
-exists(Id) -> X = ets:member(users, erlang:binary_to_list(Id)), io:format("Member: ~p~n", [X]), X.
|
|
|
-get() -> ets:tab2list(users).
|
|
|
-get(Id) -> [U] = ets:lookup(users, erlang:binary_to_list(Id)), io:format("User: ~p~n", [U]), U.
|
|
|
-delete(Id) -> ets:delete(users, erlang:binary_to_list(Id)).
|
|
|
-post(#user{} = User) -> ets:insert(users, User);
|
|
|
+init() -> ets:new(rest_users, [public, named_table, {keypos, #user.id}]).
|
|
|
+populate(Users) -> ets:insert(rest_users, Users).
|
|
|
+
|
|
|
+exists(Id) ->
|
|
|
+ X = ets:member(rest_users, erlang:binary_to_list(Id)),
|
|
|
+ io:format("Member: ~p~n", [X]),
|
|
|
+ X.
|
|
|
+
|
|
|
+get() -> ets:tab2list(rest_users).
|
|
|
+
|
|
|
+get(Id) ->
|
|
|
+ [U] = ets:lookup(rest_users, erlang:binary_to_list(Id)),
|
|
|
+ io:format("User: ~p~n", [U]),
|
|
|
+ U.
|
|
|
+
|
|
|
+delete(Id) -> ets:delete(rest_users, erlang:binary_to_list(Id)).
|
|
|
+post(#user{} = User) -> ets:insert(rest_users, User);
|
|
|
post(Data) -> post(from_json(Data, #user{})).
|
|
|
```
|
|
|
|
|
|
Usage
|
|
|
-----
|
|
|
```
|
|
|
-curl -i -X POST -d "id=vlad" localhost:8000/rest/users
|
|
|
-curl -i -X POST -d "id=doxtop" localhost:8000/rest/users
|
|
|
-curl -i -X GET localhost:8000/rest/users
|
|
|
-curl -i -X PUT -d "id=5HT" localhost:8000/rest/users/vlad
|
|
|
-curl -i -X GET localhost:8000/rest/users/5HT
|
|
|
-curl -i -X DELETE localhost:8000/rest/users/5HT
|
|
|
+curl -i -X POST -d "id=vlad" localhost:4000/rest/rest_users
|
|
|
+curl -i -X POST -d "id=doxtop" localhost:4000/rest/rest_users
|
|
|
+curl -i -X GET localhost:4000/rest/rest_users
|
|
|
+curl -i -X PUT -d "id=5HT" localhost:4000/rest/rest_users/vlad
|
|
|
+curl -i -X GET localhost:4000/rest/rest_users/5HT
|
|
|
+curl -i -X DELETE localhost:4000/rest/rest_users/5HT
|
|
|
```
|
|
|
|
|
|
Credits
|