Перейти к содержимому

Request id что это

  • автор:

Как правильно передать и обработать X-Request-ID?

Здравствуйте! В общем искал на просторах интернета информацию по тому как правильно передавать и обработать requestId на сервере. И к моему удивлению не нашел нормального примера, если тут есть те кто этим занимался, просветите меня в следующих вопросах.
1. Как правильно генерировать и передавать requestId через заголовок на сервер ?
2. Как правильно регистрировать переданный requestId . Имеется ввиду, его надо обрабатывать на PHP и где-то хранить или же это все должен делать сервер ( в моем случае nginx) ?
Если я неправильно понял саму суть requestId , тогда можете и в этом просветить)) Спасибо.

  • Вопрос задан более трёх лет назад
  • 6580 просмотров

Комментировать
Решения вопроса 1

Lynn

nginx, js, css

Смысл requestId в том, что бы оседлать в различных логах для дальнейшего анализа работы приложения.

Обычно он создаётся как можно раньше, если мы говорим про nginx, то там уже есть (начиная с 1.11.0) переменная $request_id, которую нужно а) писать в лог nginx и б) передавать дальше в PHP (с помощью fastcgi_param). Так же можно отдавать её в http-заголовке клиенту.

Дальше, по хорошему, ваше PHP-приложение во всех своих логах тоже должно сохранять это значение, а так же передавать во все другие сервисы с которыми оно общается (базы данных, другие http-сервера и т.п.).

Ответ написан более трёх лет назад
Нравится 2 2 комментария
Nujabes37 @Nujabes37 Автор вопроса

Тогда такой вопрос, допусти мы записали $requestId в логах nginx. Но ведь при повторном запросе клиента будет генерироваться новый id-шник, правильно? Или же запросы от одного клиента будут приходить с одним requestId ?
Просто не могу понять как реализовать идемпотентный POST запрос, передавая с ним requestId.

Lynn

Nujabes37, да, новый. В этом и смысл, что бы для каждого запроса можно было отследить что с ним происходило.

Ответы на вопрос 1

FanatPHP

Чебуратор тега РНР

Я не занимался, но прочел ответ на стаковерфлое

Генерировать уникально. UUID подойдет.
Передавать наверное через квери стринг — тогда этот ид попадет в лог веб-сервера, на случай, если пхп совсем уж упадет еще до запуска обработчика ошибок. Ну, или если такая точность не особо критична, то просто дополнительным полем в джейсон.
Плюс в обработчике ошибок РНР учитывать это значение и добавлять к сообщению об ошибке, записанному в лог.

Requests — Get Requests Request Id

Используемая версия API. Для использования этой версии API необходимо задать значение 7.1-preview.1.

Ответы

Запрос символа успешно получен в соответствии с идентификатором запроса.

Запрос символа, указанный идентификатором запроса, не найден.

Безопасность

oauth2

Type: oauth2
Flow: accessCode
Authorization URL: https://app.vssps.visualstudio.com/oauth2/authorize&response_type=Assertion
Token URL: https://app.vssps.visualstudio.com/oauth2/token?client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer

Scopes
Имя Описание
vso.symbols Предоставляет возможность чтения символов.

Примеры

Sample Request
GET https://artifacts.dev.azure.com/fabrikam/_apis/symbol/requests/9dc380b5c295c03188108014a73574987cdef9a4edce00b01c9ec2d05fa97c37?api-version=7.1-preview.1 
Sample Response

Status code: 200

Определения

Состояние этого запроса.

IDomainId

Request

Идентификатор пользователя, создавшего этот элемент. Необязательный элемент.

Дата создания этого элемента. Необязательный элемент.

Необязательное описание, обращенное к человеку.

Идентификатор домена, в котором находится этот запрос. Это свойство не должно иметь значение NULL.

Необязательная дата окончания срока действия запроса. Запрос станет недоступным и будет удален после даты, независимо от его состояния. В HTTP POST, если дата окончания срока действия имеет значение NULL или отсутствует, сервер назначает данные по умолчанию об истечении срока действия (30 дней, если не переопределено в реестре на уровне учетной записи). В PATCH, если дата окончания срока действия имеет значение NULL или отсутствует, поведение заключается в том, чтобы не изменять текущую дату окончания срока действия запроса.

Идентификатор этого элемента. Необязательный элемент.

Указывает, следует ли выполнять дедупликацию фрагментов запроса.

Имя запроса, обращенное к человеку. Требуется в POST, игнорируется в PATCH.

Общий размер для этого запроса.

Состояние этого запроса.

Непрозрачный ETag, используемый для синхронизации с версией, хранящейся на сервере. Необязательный элемент.

Универсальный код ресурса (URI), который можно использовать для получения этого элемента в необработанном формате. Необязательный элемент. Обратите внимание, что это отличается от других URI, которые присутствуют в производном ресурсе.

RequestStatus

Состояние этого запроса.

Запрос создается и открыт для принятия отладочных записей.

Состояние этого запроса не определено или не имеет значения в текущем контексте.

Запрос запечатан. В нее нельзя добавить больше отладочных записей.

Запрос больше недоступен, возможно, удален.

Формат заголовка ответа

Далее после заголовка может следовать тело ответа. В случае кода ответа 200 оно содержит блоки с данными, в случае кода 402 — блок errors с подробным описанием ошибок в теле запроса и рекомендациями по их исправлению на указанном в запросе языке.

Заголовок ответа отделяется от тела ответа пустой строкой.

При возврате ошибок 4ХХ и 5ХХ в заголовке ответа запрос не будет обработан.

В случае ошибок 4ХХ необходимо исправить ошибки и повторить запрос.

В случае ошибок 5ХХ и 405 следует повторить попытку позже.

Распространенные заголовки HTTP-запросов и ответов, используемые в поиске ИИ Azure

ИНТЕРФЕЙСы REST API поиска Azure ai поддерживают набор распространенных заголовков HTTP-запросов и ответов, приведенных здесь для справки:

Заголовок запроса Тип Описание
Принять Тип содержимого Запрошенный тип содержимого ответа. Значение по умолчанию — application/json;odata.metadata=minimal. Другие допустимые значения: application/json, application/json; odata.metadata=full, application/json; odata.metadata=none и text/plain (только для $count).
api-key Строка Задайте для запроса или ключа администратора в зависимости от API.
авторизация Строка Маркер доступа OAuth 2.0 для запроса. Требуется настройка службы поиска для доступа на основе ролей. Этот заголовок запроса предназначен для клиентских приложений, использующих проверку подлинности Azure Active Directory и назначения ролей Azure. Код клиента должен предоставить маркер. Этот заголовок запроса можно использовать с любой поддерживаемой версией REST API, если служба поиска настроена для проверки подлинности на уровне данных.
Content-Type Content-Type Тип содержимого текста запроса (PUT или POST). По умолчанию — application/json .
client-request-id GUID Необязательный идентификатор запроса, заданный вызывающим абонентом, в виде GUID без оформления, например фигурные скобки (например, client-request-id: 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0). Определяемое вызывающим объектом значение, по которому можно идентифицировать данный запрос. Если это значение указано, оно будет включено в ответное сообщение для сопоставления запроса.
OData-MaxVersion «4.0» Задает максимальную версию протокола OData, поддерживаемую клиентом. Значение по умолчанию — «4.0».
Prefer «return=representation» или «return=minimal» Используется для управления полезными данными ответа от запросов PUT и POST /indexes. Значение по умолчанию — «return=representation» при создании нового индекса с помощью POST и PUT и «return=minimal» для обновления существующего индекса с помощью PUT.
return-client-request-id Значение true или false Если этот параметр указан, когда задан client-request-id, сервер включает в ответ заголовок client-request-id. Значение по умолчанию — False.
If-Match ETag или * Используется для изменения ресурса, только если текущая версия соответствует указанному ETag. Используйте этот заголовок с методами POST, PUT или DELETE для ресурсов (таких как индексаторы, индексы и источники данных, но не документы), чтобы обеспечить управление оптимистичным параллелизмом.
If-None-Match ETag или * Используется для изменения ресурса, только если текущая версия не соответствует указанному ETag. Используйте этот заголовок с методами POST, PUT или DELETE для ресурсов (таких как индексаторы, индексы и источники данных, но не документы), чтобы обеспечить управление оптимистичным параллелизмом.
Заголовок ответа Тип Описание
client-request-id GUID Идентификатор, указанный вызывающим объектом в исходном запросе, если он имеется.
Content-Type Content-Type Тип содержимого текста ответа.
Расположение URL-адрес URL-адрес созданного определения индекса для запросов POST и PUT /indexes.
OData-Version «4.0» Версия протокола OData ответа.
request-id GUID Уникальный идентификатор текущей операции. Равен client-request-id, если указан; в противном случае значение создается на сервере.
elapsed-time Число Время в миллисекундах, затраченное службой на обработку запроса. Включено только время, затраченное на обработку запроса, но не время передачи по сети.
ETag Строка Непрозрачная строка, представляющая текущую версию ресурса (возвращается для индексаторов, индексов и источников данных, но не для документов). Используйте эту строку в заголовке If-Match или If-None-Match для управления оптимистическим параллелизмом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *