2011-05-31 4 views
1

J'utilise les gestionnaires de requêtes trouvés dans ejabberd pour créer un service REST.Service REST à Ejabberd; DELETE et PUT, méthode

Est-il possible d'appeler les handles de requêtes ejabberd avec une méthode HTTP PUT et DELETE? Si c'est le cas, comment?

J'ai été en mesure d'invoquer request_handlers avec les méthodes HTTP POST et GET avec succès, mais ne semble pas pouvoir faire la même chose avec PUT ou DELETE.

Chaque fois que j'essaie de faire un PUT ou supprimer des que je reçois en retour un "400 Bad Request"

J'utilise une boucle pour faire le test

curl -i -X <METHOD> <URL> 

pour GET, PUT et DELETE, et

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

POST (également essayé pour PUT et DELETE)

J'ai configuré la re les gestionnaires de quête ejabberd.cfg avec les éléments suivants

{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} 
        ]} 
    ]} 

et 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. 

Répondre

0

Au moment où je ne l'ai pas fait non plus puisque je ne peux pas le faire maintenant. rigth Mais le problème semble être que le serveur ejabberd n'accepte que la méthode DELETE et PUT http après ejabberd 2.1.0 et j'utilise ejabberd 2.0.5 a été indiqué dans EJAB-662

Donc pour faire un DELETE et PUT pour fonctionner devra mettre à jour ejabberd à 2.1.0 ou supérieur

Une autre façon qui semble possible serait d'utiliser ce ejabberd_http_rest.patch. Edit: J'ai amélioré mon ejabberd en 2.1.6 et maintenant je suis capable d'utiliser les méthodes HTTP DELETE et PUT.

Questions connexes