Ejabberd的REST服务; DELETE和PUT方法

时间:2011-05-31 10:20:51

标签: rest curl erlang ejabberd

我正在使用ejabberd中的请求处理程序来构建REST服务。

是否可以使用PUT和DELETE HTTP方法调用ejabberd request_handlers?如果是这样的话?

我已经能够成功调用带有POST和GET HTTP方法的request_handlers,但似乎无法对PUT或DELETE执行相同的操作。

每当我尝试进行PUT或DELETE时,我都会收到“400 Bad Request”

我正在使用curl进行测试

curl -i -X <METHOD>  <URL>

用于GET,PUT和DELETE,以及

curl -i -X <METHOD>  <URL> -d <POSTBody>

用于POST(也尝试用于PUT和DELETE)

我已使用以下

在ejabberd.cfg中配置了请求处理程序
{listen,
 [
  (...)
  {5280, ejabberd_http, [
                     http_bind,
                     http_poll,
                     web_admin,
                    {request_handlers, [
                            {["hello_world"], mod_http_hello_world},
                            {["users"], mod_http_registered_users},
                            {["api"],mod_http_rest_api}
                    ]}
   ]}

和mod_http_rest_api

-module(mod_http_rest_api).
-define(EJABBERD_DEBUG, true).

-behavior(gen_mod).

-export([start/2,stop/1,process/2]).

-include("ejabberd.hrl").
-include("jlib.hrl").
-include("ejabberd_http.hrl").

start(_Host, _Opts) ->
  ?INFO_MSG("mod_http_rest_api: Starting",[]),
  ok.

 stop(_Host) ->
   ?INFO_MSG("mod_http_rest_api: Stoping",[]),
   ok.

 process(List,#request{method = Method}) ->
    StrMethod = atom_to_list(Method),
    List ++ " was invoked with method " ++ StrMethod.

1 个答案:

答案 0 :(得分:0)

目前我还没有做过,因为我现在无法做到。但问题似乎是ejabberd服务器在ejabberd 2.1.0之后只接受DELETE和PUT http方法而我使用ejabberd 2.0.5已在EJAB-662中说明

所以要使DELETE和PUT工作,我需要将ejabberd更新到2.1.0或更高版本

另一种看似可能的方法是使用此ejabberd_http_rest.patch

编辑:我将我的ejabberd升级到2.1.6,现在我可以使用DELETE和PUT HTTP方法了。