2017-02-08 3 views
3

У нас есть серия служб REST, которые извлекают ресурсы по идентификатору, но нам недавно поручили передавать параметры раскрытия для сохранения с помощью аудита.REST Best Practice GET с параметрами контекста

Какая польза будет ...

GET entity/{id} 

Теперь превращается в нечто вроде ...

GET entity/{id}?requestName=&requestingOrganization=&reasonForUse=&verificationMethod=&otherAuditDisclosureProperties.... 

состояние entity не изменяется и по-прежнему идемпотентна однако мы должны проверять дополнительные информацию с каждым звонком для ее предоставления.

Сначала мысль заключалась в том, чтобы построить тело, но это не показалось правильным для GET. Это второй подход с использованием параметров запроса, которые не имеют намерения запрашивать/фильтровать. Эти дополнительные параметры - это действительно контекстная информация, захваченная в точке запроса. Они эквивалентны атрибутам SAML в SOAP-вызове, которые живут вне тела SOAP (что заставляет меня думать о возможных атрибутах заголовка).

Также обратите внимание, что эта информация передается так, что предоставленный токен аутентификации предназначен для вызова пользователя службы, а не фактического идентификатора контекста. Идентификация исходного вызывающего объекта неявно доверяется окружению доверия.

Как вы бы описали этот глагол/путь?

+0

Могут ли эти параметры быть выведены сервером или они должны быть определены клиентом? Являются ли эти параметры для запроса или могут быть глобальными для клиента (как в архитектуре клиент/сервер) или учетной записью клиента? –

+0

К сожалению, у сервера нет этой дополнительной информации, и они предназначены для каждого запроса. В принципе, я могу запросить тот же ресурс, но по другой причине (которую мы должны взять). – RailRhoad

+0

Является ли клиент и сервер одной и той же корпорацией? можете ли вы предоставить больше информации о проблеме, которую вы пытаетесь решить? а не решение ... что кажется ужасным. Как вы гарантируете правильное использование причин для вызова службы? Как клиент, зачем мне это делать?Вы ставите большую нагрузку на мою сторону. Я бы не использовал такой API или не сообщил о причинах, как вы ожидаете. Слишком много работы. Если вы предоставите больше информации по этой проблеме, я бы предложил лучший подход. –

ответ

1

Возможно пользовательский заголовок: vnd.mycompany.myheader; где вы ставите все параметры, которые вам нужны, в некотором анализируемом формате: name1=value1; name2=value2. Вы берете отходы из строки запроса.

Отходящей тема Ответ

Я не могу представить себе ситуацию, когда вы просите пользователь о API для такой субъективной информации, которая требует много усилий, чтобы обеспечить (как она изменяется по запросу) и не дает клиенту никакой ценности. Это только для вашего внутреннего использования. Наиболее вероятным результатом является то, что клиенты жестко кодируют эти значения и повторяют их во всех запросах.

Если клиент является внутренним, вы можете искать способы корреляции запросов, которые охватывают несколько служб, например Sleuth, что позволит вам понять, почему клиенты используют ваш API.

Если клиент является внешним, подумайте о проведении опросов и личных интервью с разработчиками. Я также предлагаю вам сначала научить сообщество API сообщать об этих людях и понять, как и почему они используют ваш API.

0

Я согласен с Daniel Cerecedo. Правильный способ состоит в том, чтобы добавить информацию как часть заголовка запроса. Общая информация приведена по адресу: https://www.w3.org/Protocols/HTTP/HTRQ_Headers.html Реализация будет зависеть от вашего языка программирования.