Publier des fichiers et des données associées sur RESTful WebService au format JSON
P粉056618053
P粉056618053 2023-08-20 13:47:10
0
2
580
<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>
P粉056618053
P粉056618053

répondre à tous(2)
P粉994092873

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.

P粉145543872

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 :

  1. Base64 encode le fichier, mais augmente la taille des données d'environ 33 % et ajoute une surcharge de traitement d'encodage/décodage à la fois sur le serveur et sur le client.
  2. Envoyez d'abord le fichier sous la forme 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.
  3. Envoyez d'abord les métadonnées et renvoyez l'ID au client. Le client envoie ensuite le fichier en utilisant cet ID et le serveur réassocie le fichier et les métadonnées.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal