API に配列を渡す方法

一部の API 呼び出しでは、POST データに値の配列を渡す必要があります。その方法はどのように行うのでしょうか?

試行錯誤の結果、1 つの要素を持つ配列を渡す方法を理解しました。例えば、owner 変更の場合、以下のようにします:

username: sean-finnegan
post_ids[]: 925

(または、URL エンコードされた形式では)

post_ids%5B%5D=925&username=sean-finnegan

素晴らしい質問です。確かに少し混乱しやすい部分ですね。複数の post_ids を渡したい場合は、post_ids[] のフォームデータフィールドを複数回指定します。以下は curl の例です:

curl -i -sS -X POST "http://localhost:8080/t/15/change-owner.json" 
-H "Api-Key: api-key" \
-H "Api-Username: system" \
-F "username=blake" \
-F "post_ids[]=29" \
-F "post_ids[]=30"

こんにちは、ブレイクさん。

配列を API に送信する現在の推奨方法はこれでしょうか?Web フックを作成しようとしているのですが、web_hook_event_type_ids 配列パラメータを送信できません。

CURL で試しました(multipart/form-data として)

curl -X POST "https://MYSITE.com/admin/api/web_hooks" \
  -H "Api-Key: KEY" \
  -H "Api-Username: USER" \
  -F "payload_url=https://MYOTHERSITE.com" \
  -F "content_type=1" \
  -F "wildcard_web_hook=false" \
  -F "verify_certificate=true" \
  -F "active=true" \
  -F "web_hook_event_type_ids[]=2"

# 結果
{"errors":["param is missing or the value is empty: web_hook"]}%

また、httpie でも試しました(application/json として)

http POST https://MYSITE.com/admin/api/web_hooks \
  Api-Key:KEY \
  Api-Username:USER \
  payload_url=https://MYOTHERSITE.com \
  content_type=1 \
  wildcard_web_hook:=false \
  verify_certificate:=true \
  active:=true \
  web_hook_event_type_ids:='[2]'

# 結果
{
    "errors": [
        "Web hook event types can't be blank"
    ]
}

このエンドポイント全体が、ネストされた web_hook パラメータに値を求めているようです:

私はこのネスト形式をあまり好んでいませんが、同様のエンドポイントがいくつかあり、それらを修正する予定のリストに入っています。以下のように form-data で API リクエストを送信できます:

各パラメータに web_hook[payload_url] という「配列」構文が使われている点に注目してください。JSON でリクエストを送信する場合は、以下のようになります:

{
  "web_hook": {
    "payload_url": "https://example.com/hello",
    "content_type": "1",
    ...
  }
} 

ああ、どうもありがとうございます。Discourse API の説明ではそうではなかったので、頭が混乱していました。:sweat_smile:

また、wildcard_web_hook=true を使用する場合でも、web_hook_event_type_ids に少なくとも 1 つの項目を設定する必要があることに気づきました。これもしばらく頭を悩ませる原因でした。