Когда вы используете пользовательские заголовки HTTP в части запроса REST API?
Пример:
Используете ли вы когда-либо
GET /orders/view
(custom HTTP header) CLIENT_ID: 23
вместо
GET /orders/view/client_id/23 or
GET /orders/view/?client_id=23
Когда вы используете пользовательские заголовки HTTP в части запроса REST API?
Пример:
Используете ли вы когда-либо
GET /orders/view
(custom HTTP header) CLIENT_ID: 23
вместо
GET /orders/view/client_id/23 or
GET /orders/view/?client_id=23
URL-адрес указывает на сам ресурс. "Клиент" - это ресурс, на который можно воздействовать, поэтому он должен быть частью базового URL: /orders/view/client/23
.
Параметры - это просто параметр параметризации доступа к ресурсу. Это особенно вступает в игру с сообщениями и поисками: /orders/find?q=blahblah&sort=foo
. Там есть тонкая грань между параметрами и подресурсами: /orders/view/client/23/active versus /orders/view/client/23?show=active
. Я рекомендую стиль и ресурсы резервного ресурса для поиска.
Поскольку каждая конечная точка RE представляет перенос состояния (для блокировки мнемоники), пользовательские заголовки должны использоваться только для вещей, которые не включают имя ресурса (URL), состояние ресурса (тело), или параметры, непосредственно влияющие на ресурс (параметры). Это оставляет истинные метаданные о запросе пользовательских заголовков.
HTTP имеет очень широкий выбор заголовков, которые охватывают большинство всего, что вам нужно. Где я видел, как пользовательские заголовки появляются в системе, системный запрос работает от имени пользователя. Прокси-система проверит пользователя и добавит "X-User: userid
" в заголовки и использует учетные данные системы для достижения конечной точки. Принимающая система подтверждает, что учетные данные системы уполномочены действовать от имени пользователя, а затем подтверждают, что пользователь имеет право выполнять действие.
Я бы использовал только пользовательский заголовок, когда нет другого способа передавать информацию по стандарту или условному обозначению. Darren102 объясняет типичный способ передать это значение. Ваш Api будет намного более дружелюбным, используя типичные стихи стилей с использованием пользовательских заголовков. Нельзя сказать, что у вас не будет случая использовать их, просто они должны быть последним средством и чем-то еще не обработанным спецификацией HTTP.
Пользовательские заголовки имеют следующие преимущества:
Я бы не использовал пользовательские заголовки, так как вы не знаете, будут ли прокси-серверы пропускать их. URL-адрес - это путь.
GET/orders/view/client/23
Когда вы используете... HTTP-заголовки в части запроса API REST?
Аутентификация: идентификаторы GUID, базовая аутентификация, пользовательские токены и т.д., например, Основная аутентификация с помощью маркера Guid для REST api вместо имени пользователя/пароля
Если вы участвуете в передаче токенов или другой информации, подобной аутентификации, между доменами, охватываемыми PCI-DSS или другими правилами безопасности, вы также можете захотеть закопать параметры, поскольку в некоторых правилах явно требуется, чтобы элементы аутентификации не содержали URL-адреса, которые могут быть тривиальными (из истории браузера, прокси-журналов и т.д.).
Нет стандарта для REST, однако принятый способ был бы
GET /orders/view/23
Не использовать пользовательские заголовки, и, следовательно, представление 23 после представления предполагает идентификатор, поэтому у вас будет функция, которая принимает идентификатор и, следовательно, производит именно эту информацию.
Определенно OK:
GET /orders/view/client_id/23 or
GET /orders/view/?client_id=23
Также ОК:
GET /orders/view/23 or
Я бы подумал, что это тоже будет хорошо:
POST /orders/view
(custom HTTP header) CLIENT_ID: 23
Вы можете использовать пользовательские заголовки для включения дополнительной информации о частично обработанном запросе, учитывая, что Enveloping не является хорошей практикой. Заголовки защищены.