Je travaille sur un ensemble de services Web pour un client mobile, et les exigences exigent qu'un identifiant d'appareil unique soit inclus avec toutes les demandes, stocké dans certaines demandes et utilisé pour filtrer les résultats dans d'autres.
Il a été suggéré de le placer dans un en-tête HTTP personnalisé car il sera inclus dans toutes les demandes, j'ai donc commencé à me demander quels critères pourraient être utilisés pour déterminer si une donnée donnée appartient à un en-tête ou avec d'autres données dans l'organisme de demande.
Existe-t-il de tels critères?
Lorsque l'information est importante, vous devez la mettre dans le corps.
Pourquoi?
Bien que la ligne soit quelque peu floue, pour moi, une règle de base est la suivante: les données sur lesquelles votre logique métier fonctionne doivent être dans le corps, les métadonnées peuvent/doivent être placées dans des en-têtes.
Une autre façon de voir les choses est la suivante: les données qui n'apparaissent que dans des types spécifiques de demandes doivent être dans le corps tandis que les données qui sont traitées de manière cohérente dans l'ensemble de l'application doivent aller dans les en-têtes.
Un autre point de vue est: pouvez-vous imaginer qu'un élément de données est traité à l'échelle mondiale, par exemple par un routeur/pare-feu plutôt que par votre application? Si oui, cela devrait probablement aller dans les en-têtes plutôt que dans le corps.
Voici quelques exemples d'application de ces règles:
Revenons à votre question sur l'identifiant unique de l'appareil: s'il est utilisé de manière cohérente partout, par exemple uniquement pour la journalisation, il peut être mis dans les en-têtes. Mais s'il est utilisé pour filtrer les demandes de différentes manières selon le point de terminaison, il serait préférable qu'il soit dans le corps. Bien sûr, si vous avez les deux cas d'utilisation, il est probablement préférable de s'en tenir à une seule façon de les transmettre (probablement les en-têtes) plutôt que de forcer l'utilisateur de l'API à mettre les mêmes données à deux endroits, ce qui vous donne le dilemme de permettre entrées incohérentes ou implémentant une sorte de validation.
Le contenu de la demande du client; qui ne sera pas modifié sur plusieurs demandes adressées au même serveur fera partie de HEADER, par ex. les informations d'identification, d'autres qui sont fréquemment modifiées par demande feront partie de BODY.
OR
la propriété du contenu du message/corps ira dans l'en-tête. par exemple) type de codage, longueur du contenu, type de contenu.
ET
Dans votre cas, des paramètres de filtre similaires devraient être ajoutés en tant que paramètres de requête/demande dans l'URL.
/mobiles?type=MOTO&colour=black
Dans les services reposants, l'URL elle-même fera référence à un objet
/conferences/{conference_id}
-> fait référence à une conférence spécifique