Comment passer un tableau à l'API

On some of the api calls, you are expected to pass an array of values in the post data. How do you do this?

I have figured out by trial an error how to pass an array with one item in it - e.g. for change-owner, you want something like:

username: sean-finnegan
post_ids[]: 925

(or, in url-encoded)

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

Great question, I agree that can be a bit confusing. If you want to pass multiple post_ids you would pass in multiple form data fields for post_ids[] like this curl example:

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"

Salut Blake,

Est-ce que c’est toujours la méthode recommandée pour envoyer un tableau à l’API ? J’essaie de créer un web hook et je n’arrive pas à envoyer le paramètre tableau web_hook_event_type_ids.

J’ai essayé avec CURL (en tant que 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"

# J'obtiens
{"errors":["param is missing or the value is empty: web_hook"]}%

Et avec httpie (en tant que 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]'

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

Il semble que tout ce point de connexion attende les valeurs dans un paramètre web_hook imbriqué :

Je ne suis pas un grand fan de ce format imbriqué, et il existe plusieurs points de connexion comme celui-ci sur ma liste à corriger éventuellement. Vous pouvez effectuer un appel API vers celui-ci en utilisant form-data comme suit :

Remarquez comment chaque paramètre utilise la syntaxe “tableau” web_hook[payload_url]. Si vous envoyez votre requête avec du JSON, cela ressemblera à ceci :

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

Ah, merci beaucoup. Ce n’est pas ce qui était indiqué dans l’API Discourse, alors je commençais à perdre la tête. :sweat_smile:

De plus, j’ai remarqué que la définition de web_hook_event_type_ids avec au moins un élément est requise, même si j’utilise wildcard_web_hook=true. Cela m’a aussi fait gratter la tête pendant un moment.