rest apiを使ってユーザーを複数登録する方法をご教示頂けませんでしょうか?

2,633 views
Skip to first unread message

Yutaka KOGURE

unread,
Nov 25, 2015, 9:03:23 PM11/25/15
to Redmine Users (japanese)
一件別のユーサ登録は、以下の様なJSON形式でPOSTして登録できる環境があります。
(RestclientとDHC)

URL:
       http://(redmine url)/users.json?key=(APIキー)
content-type : application/json 
Body:
{
    "user": {
        "login": "Taro",
        "firstname": "taro",
        "lastname": "aka",
        "mail": "aka....@sample.com"
    }
}

ですが、以下のJSONで複数件のユーザーを同時にPOSTしようとして以下のようなBody部で実行しました。
(urlやcontent-typeは同じ)
しかし、エラーとなって登録できません。エラーの内容は以下の通り
(HTTP/1.1 500 Internal Server Error)
複数ユーザーを1POSTで可能にするようにする為のJSONの形式をご教示いただけませんでしょうか?
また、もし一件別に登録をするのが現在の仕様になっているのであれば、改善要望はどの様に出せばよいのか?あわせてご教示いただけます様にお願い申し上げます。

Body:
{
    "user": [
        {
            "login": "Jiro",
            "firstname": "jiro",
            "lastname": "aka",
            "mail": "aka....@sample.com"
        },
        {
            "login": "Sabu",
            "firstname": "sabu",
            "lastname": "aka",
            "mail": "aka....@sample.com"
        }
    ]
}

【環境】サーバー側
Environment:
  Redmine version                3.1.1.stable
  Ruby version                   2.0.0-p647 (2015-08-18) [x86_64-linux]
  Rails version                  4.2.4
  Environment                    production
  Database adapter               Mysql2
Redmine plugins:
  clipboard_image_paste          1.10
  redmine_checklists             3.1.3
  redmine_glossary               0.7.1
  redmine_issue_completion       0.0.2
  redmine_knowledgebase          3.0.7
  redmine_logs                   0.1.0
  redmine_planning               1.0.0
  redmine_xlsx_format_issue_exporter 0.1.2
  
【環境】クライアント側
  Client環境
  ・OS         Windows7 Pro SP1
  ・ブラウザー     Chrome 46.0.2490.86 m
  ・JRE         V7u80
  ・Restプログラム#1  Restclient 3.5
  ・Restプログラム#2  DHC Version: 0.8.5
  
【ログ】2ユーザーをポストした時のRedmineのログ
Started POST "/users.json?key=(APIキー)" for (RedmineIPアドレス) at 2015-11-26 10:21:23 +0900
Processing by UsersController#create as JSON
  Parameters: {"user"=>[{"login"=>"Jiro", "firstname"=>"jiro", "lastname"=>"aka", "mail"=>"aka....@sample.com"}, {"login"=>"Sabu", "firstname"=>"sabu", "lastname"=>"aka", "mail"=>"aka....@sample.com"}], "key"=>(APIキー)}
  Current user: taka (id=5)
Completed 500 Internal Server Error in 16ms (ActiveRecord: 2.2ms)

TypeError (no implicit conversion of Symbol into Integer):
  app/controllers/users_controller.rb:92:in `[]'
  app/controllers/users_controller.rb:92:in `create'
  lib/redmine/sudo_mode.rb:63:in `sudo_mode'

あきぴー

unread,
Mar 7, 2016, 5:02:54 AM3/7/16
to Redmine Users (japanese)
あきぴーと申します。
REST APIは分からないのですが、下記のユーザ一括インポートのプラグインが
Rails4.2に対応しているので、Ver3.xでも動作するようです。

shrkw/redmine_user_import: redmine plugin for user bulk import from csv file https://github.com/shrkw/redmine_user_import

試してみてはいかがでしょうか?

あきぴー

unread,
Mar 7, 2016, 5:08:08 AM3/7/16
to Redmine Users (japanese)
あきぴーと申します。
立て続けですが、@g_maedaさんが下記のRubyスクリプトを公開されています。
試されてはいかでしょうか?

CSVファイルを読み込んでRedmineにREST API経由でユーザーを登録する https://gist.github.com/vividtone/15ed9b221d4cbd54d744

Yutaka KOGURE

unread,
Mar 9, 2016, 5:47:36 AM3/9/16
to Redmine Users (japanese)
あきぴー様

@g_maedaさんのRubyスクリプトのご紹介ありがとうございます。
何とかこのスクリプトでユーザーデータを読込み、実行するところまでできる様になりましたが、
Completed 422 Unprocessable Entity
のメッセージがRedmineから出力され登録が出来ませんでした。

そこで、HTTPのステータスコード 422 はデータのフォーマットが異なる場合とかにでるので、
入力項目の中からパスワード列を省略して実行してみたところ無事複数件が一度のコマンドで登録できました。
(user_batch.rbは、@g_maedaさんのプログラムを修正したrubyスクリプト、user_ID2.csvはパスワード列を省いたCSVファイル
==========================
$ ruby user_batch.rb < user_ID2.csv
-:1: success
-:2: success
-:3: success
==========================
redmineのログでも綺麗に、HTTPステータスコード 201 が帰っていました。


変更した部分
  userdata = { 
    :login => row[0], 
    :firstname => row[1], 
    :lastname => row[2], 
    :mail => row[3], 
  } 

プラグインは増やしたく無いので、プラグインによるソリューションは行っておりません。
ちなみにRedmineのバージョンは、3.2.0.stable です。

お蔭様で解決する事が出来ました。ありがとうございます。
これもコミュニティの良いところですね。



2016年3月7日月曜日 19時08分08秒 UTC+9 あきぴー:
Reply all
Reply to author
Forward
0 new messages