Bonjour,

J'ai lu il y a quelques années, je ne sais plus trop où, qu'on ne pouvait pas utiliser de multipart/form-data (ou multipart/mixed) avec les méthodes PUT et PATCH. En relisant les RFCs (RFC2388, RFC7231)et documentations récentes (cf), je ne trouve plus aucune mention de cela. À priori, de ce que je comprends, c'est que la seule différence entre POST et PUT, c'est que PUT doit être idempotent. Plusieurs appels d'un même PUT donne le même état, alors que le POST modifie l'état en créant de nouvelles ressources. Je ne vois pas en quoi ça interdirait de faire du multipart/form-data ou du multipart/mixed.

Je dois implémenter des services REST dans un système où certaines ressources comprennent plusieurs binaires (par exemple, un document PAO et son brief, une vidéo et son poster, un ebook (genre .epub) et sa couverture...). Créer une telle ressource, en une fois, avec un POST ne pose pas de souci. Mais comment la modifier, en une fois, si la modification est de modifier ces binaires (plusieurs donc en une fois), avec un PUT, si le multipart n'est pas censé être supporté. Développer mon propre format et tout passer dans le body ? Autant refaire le multipart/form-data ou multipart/mixed, et l'appeler autrement. Autrement dit, une perte de temps. Et utiliser un POST pour faire une modification n'est pas en accord avec les préconisations du REST. Il y a bien faire du PUT en override POST, mais c'est un peu entrer par la fenêtre plutôt que par la porte... et surtout ça complique l'invocation (inutilement) par le consommateur de l'API (enfin pas tant que ça, ça dépend du framework client, mais ça peut potentiellement). Et faire plusieurs PUT est exclu : la modification n'est plus atomique et donc plus stateful (une ressource pourrait être dans un état incomplet, voire incohérent).
Et je ne veux pas, comme l'indique certains blogs ou forums, imposer une conversion des binaires en texte (base 64) et intégration dans du JSon. Je trouve ça absurde (et hyper impactant sur la charge), sans parler de la complication inutile de l'invocation. C'est aussi un peu réinventer la poudre en faisant quelque chose qui ressemble à du multipart mais dans du JSon.

J'aimerais connaître d'autres avis éclairés sur la question. Je n'ai pas trouvé de documentation, ou blog, qui exprime clairement les choses à ce sujet. J'ai la même interrogation d'ailleurs au sujet de la méthode PATCH. Tout ce que je trouve de détaillé sur le sujet me semble systématiquement finir en une confusion entre la méthode HTTP et le format JSon Patch (RFC6902).

Et si quelqu'un a un lien vers une documentation de référence qui explicite clairement que HTTP PUT ne supporte pas le multipart, ça m'intéresse beaucoup.