REST сервис в Эджаберде;УДАЛИТЬ и PUT Метод - PullRequest
1 голос
/ 31 мая 2011

Я использую обработчики запросов, найденные в ejabberd, для создания службы REST.

Можно ли вызывать обработчики запросов ejabberd с помощью метода PUT и DELETE HTTP?Если да, то как?

Я смог успешно вызвать request_handlers с методами HTTP POST и GET, но не могу сделать то же самое с 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 голосов
/ 31 мая 2011

В данный момент я тоже ничего не сделал, так как сейчас не могу делать шестое.Но проблема, по-видимому, заключается в том, что сервер ejabberd принимает только методы DELETE и PUT http после ejabberd 2.1.0, и я использую ejabberd 2.0.5, как указано в EJAB-662

Поэтому, чтобы DELETE и PUT работали, мне нужно обновить ejabberd до версии 2.1.0 или выше

Еще один способ, который кажется возможным, будет использовать этот ejabberd_http_rest.patch .

Редактировать: я обновил свой ejabberd до версии 2.1.6, и теперь я могу использовать HTTP-методы DELETE и PUT.

...