REST API: ошибка возврата для запроса GET, если документ будет меняться в зависимости от параметра запроса? - PullRequest
0 голосов
/ 17 апреля 2019

В настоящее время мы внедряем API REST для обработки корзин покупок в интернет-магазине.Для этого нам требуется возможность изменить валюту покупки корзины.Подобные API в нашей системе используют параметры запроса для изменения таких вещей, как локаль или валюты, например, для получения информации о продукте (включая цены в определенной валюте), вы бы отправили запрос, например: GET /products/<product-id>?currency=USD

Для нашего API корзиныизменение такой валюты означало бы, что нам нужно было бы провести внутренний расчет с ценами в новой валюте;если в корзине есть товары, которые недоступны в этой валюте, то эти товары будут удалены.Поскольку запросы GET должны только извлекать данные, но не изменять их, мы не хотим запускать вычисления для запроса GET.Мы не уверены, как с этим справиться: должны ли мы вернуть корзину в старой валюте и просто игнорировать тот факт, что клиент запросил другую валюту, или мы должны вернуть ошибку, что корзина недействительна для запрашиваемой валюты (и, следовательно,вообще не возвращать документ корзины)?

При отправке запроса POST или PUT / PATCH на корзину с новой валютой он будет в любом случае пересчитан, поэтому в этом случае проблем нет.

Другой подход заключается в том, чтобы включить валюту в качестве поля в документ ресурса вместо параметра запроса.Это означало бы, что его нельзя изменить с помощью запросов GET, хотя с помощью POST / PUT / PATCH клиент может явно указать валюту через тело запроса.Однако это решение будет отличаться от других API в нашей системе, что также не является оптимальным.

Если вы видите другое решение, не стесняйтесь его предлагать.Заранее спасибо!

1 Ответ

0 голосов
/ 17 апреля 2019
  1. Можете ли вы сделать это более понятным, например, если предмет другой валюты, ваша система поддерживает конвертацию валют или вы просто хотите отказаться от этих предметов.
  2. По сути, вы должны пойти на конвертацию валюты при расчетеитоговая цена вместо конвертации при добавлении в корзину
  3. Или вы должны взять валюту в качестве параметра пути вместо параметра запроса и сделать его фиксированным в оставшемся URI в соответствии с валютой пользователя. Так что пользователь не может запросить любуюэлемент другой валюты, отличной от его валюты (при условии, что пользователь должен установить свою валюту)
...