Aggiunta membri di gruppo vs aggiunta proprietari: il formato dei dati è diverso

Quando si utilizza l’API per aggiungere membri e proprietari a un gruppo, sembra che il formato dei dati richiesti sia diverso. Potrebbe essere intenzionale, ma vorrei sapere il motivo (sta rompendo pydiscourse, la migliore libreria che riesco a trovare per interagire con l’API di Discourse in Python).

Aggiunta di un membro a un gruppo:

curl -X PUT "https://{mydomain}/admin/groups/{group_id}/members.json" \ 
    -d 'usernames={my-username}' \
    -H "Api-Key: {my-api-key}" \
    -H "Api-Username: {my-api-username}"

Aggiunta di un proprietario a un gruppo:

curl -X PUT "https://{mydomain}/admin/groups/{group_id}/owners.json" \ 
    -d 'group[usernames]={my-username}' \
    -H "Api-Key: {my-api-key}" \
    -H "Api-Username: {my-api-username}"

Mi incuriosisce perché la chiave per il parametro username nell’endpoint dei proprietari debba essere scritta come group[usernames] invece di semplicemente usernames?

L’unica ragione che posso dare è che stanno effettivamente utilizzando due controller diversi.

L’endpoint per aggiungere membri è mappato al controller dei gruppi:

PUT /admin/groups/:id/members(.:format) groups#add_members 

Mentre l’endpoint per aggiungere owner è mappato al controller admin/groups.

PUT /admin/groups/:id/owners(.:format) admin/groups#add_owners

È improbabile che aggiorniamo questo endpoint, dato che molte integrazioni lo utilizzano già così com’è. La cosa migliore da fare è aprire un issue nel repository pydiscourse. Potresti anche applicare una patch di tipo monkey patch per correggere add_group_owner nella tua applicazione Python fino a quando non verrà risolto all’interno di pydiscourse.