Хотя строка несколько размыта, для меня эмпирическое правило таково: данные, над которыми работает ваша бизнес-логика, должны быть в теле, метаданные могут / должны быть помещены в заголовки.
Другой способ взглянуть на это: данные, которые появляются только в определенных видах запросов, должны быть в теле, а данные, которые обрабатываются последовательно во всем приложении, должны попадать в заголовки.
Еще одна точка зрения такова: можете ли вы представить, что часть данных обрабатывается глобально, например, маршрутизатором / брандмауэром, а не вашим приложением? Если да, то, вероятно, он должен идти в заголовках, а не в теле.
Вот некоторые примеры применения этих правил:
- Учетные данные безопасности помещаются в заголовки, поскольку, скорее всего, они будут обрабатываться одинаково во всех местах приложения; на уровне реализации, вероятно, будет какой-то фильтр запросов, отклоняющий запросы без действительных учетных данных, независимо от фактической конечной точки, обрабатывающей запрос в случае, если он действительно проходит через фильтр.
- Если, с другой стороны, у вас есть конечная точка, которая позволяет администратору добавлять пользователей в вашу систему, логин создаваемого пользователя должен быть в теле запроса, поскольку: а) он обрабатывается бизнес-логикой вашего приложения, б) это появляется в этой конкретной конечной точке, но не в других.
- Опции, которые управляют кэшированием, могут хорошо вписываться в заголовки (если только кэширование не является основной частью бизнес-логики вашего приложения).
Возвращаясь к вашему вопросу об уникальном идентификаторе устройства: если оно используется повсеместно, например, только для ведения журнала, его можно поместить в заголовки. Но если он используется для фильтрации запросов по-разному в зависимости от конечной точки, он лучше будет в теле. Конечно, если у вас есть оба варианта использования, вероятно, лучше придерживаться только одного способа его передачи (возможно, заголовков), а не заставлять пользователя API размещать одни и те же данные в двух местах, что дает вам дилемму того, противоречивые входные данные или осуществление некоторой проверки.