Publier des fichiers et des données associées sur RESTful WebService au format JSON
P粉056618053
2023-08-20 13:47:10
<p>Dans l'application que je développe, nous souhaitons que le client envoie des données au format JSON, je développe donc une API RESTful. Une partie de l'application nécessite que le client télécharge un fichier (généralement une image), ainsi que des informations sur l'image. </p>
<p>J'ai du mal à trouver comment y parvenir en une seule requête. Est-il possible d'encoder en Base64 les données d'un fichier dans une chaîne JSON ? Dois-je effectuer deux requêtes POST au serveur ? Ne devrais-je pas utiliser JSON pour gérer cela ? </p>
<p>Nous utilisons également Grails sur le backend, et ces services sont accessibles par les clients mobiles natifs (iPhone, Android, etc.), si ces informations sont différentes. </p>
Vous pouvez utiliser le type de contenu multipart/form-data pour envoyer des fichiers et des données en une seule requête :
De http://www.faqs.org/rfcs/rfc2388.html :
Vous pouvez inclure des informations de fichier ou des informations de champ dans chaque section entre chaque limite. J'ai implémenté avec succès un service RESTful qui oblige les utilisateurs à soumettre des données et des formulaires, multipart/form-data fonctionne parfaitement. Le service est construit en utilisant Java/Spring et le client utilise C#, donc malheureusement je n'ai pas d'exemple Grails à vous donner sur la façon de configurer le service. Dans ce cas, vous n'avez pas besoin d'utiliser JSON puisque chaque section "form-data" vous donne un emplacement pour spécifier les noms des paramètres et leurs valeurs.
L'avantage d'utiliser multipart/form-data est que vous utilisez les en-têtes définis par HTTP, vous suivez donc la philosophie REST consistant à utiliser les outils HTTP existants pour créer des services.
J'ai posé une question similaire ici :
Comment télécharger des fichiers avec des métadonnées à l'aide du service Web REST ?
Vous avez essentiellement trois options :
multipart/form-data
et renvoyez l'identifiant au client. Le client envoie ensuite des métadonnées en utilisant cet ID et le serveur réassocie le fichier et les métadonnées.