Хоча рядок дещо розмитий, для мене головним правилом є: дані, над якими працює ваша логіка бізнесу, повинні бути в тілі, метадані можуть / повинні бути поміщені в заголовки.
Ще один спосіб його розгляду: дані, які відображаються лише в конкретних видах запитів, повинні бути в тілі, тоді як дані, які обробляються послідовно в усьому додатку, повинні надходити в заголовки.
Ще одна точка зору: чи можете ви уявити, що частина даних обробляється глобально, наприклад, маршрутизатором / брандмауером, а не вашою програмою? Якщо так, то, ймовірно, це має йти в заголовках, а не в тілі.
Деякі приклади застосування цих правил:
- Вхідні дані безпеки надходять у заголовки, оскільки, швидше за все, вони будуть оброблятися однаково у всіх місцях програми; на рівні впровадження, ймовірно, буде якийсь фільтр запитів, який відхиляє запити без дійсних облікових даних, незалежно від фактичної кінцевої точки, що обробляє запит, якщо він потрапить через фільтр.
- Якщо, з іншого боку, у вас є кінцева точка, яка дозволяє адміністратору додавати користувачів до вашої системи, логін користувача, який буде створений, повинен знаходитись у тілі запиту, оскільки: вона з’являється в цій конкретній кінцевій точці, але не в інших.
- Параметри керування кешуванням цілком можуть вписуватися в заголовки (якщо тільки кешування не є основною частиною бізнес-логіки вашої програми).
Повертаючись до свого питання про унікальний ідентифікатор пристрою: якщо він використовується послідовно скрізь, наприклад лише для ведення журналу, він може бути поміщений у заголовки. Але якщо він використовується для фільтрації запитів різними способами залежно від кінцевої точки, то краще буде в тілі. Звичайно, якщо у вас є обидва випадки використання, можливо, краще дотримуватися лише одного способу передачі їх (можливо, заголовків), а не змушувати користувача API розміщувати однакові дані у двох місцях, що дає вам дилему чи дозволяти непослідовні входи або реалізація певної перевірки.