Я проектирую RESTful API и столкнулся с проблемой заголовка, для ясности:
Должен ли я быстро потерпеть неудачу, если клиент отправляет нераспознанный параметр? Например,
http://example.com/api/foo?bar=true&paula=bean
Выше указан bar
допустимый параметр, но paula
он не указан API. Нужно ли мне
- Предупредить клиента об ошибке
- Терпеть неудачу быстро
- Игнорируй это
Если я предупреждаю клиента, я могу выдать предупреждение только для первого параметра, поскольку он может отправлять почти бесконечное число из них, и у сервера, вероятно, есть более важные задачи. Точно так же, при сбое, он будет указывать только первый неверный параметр в качестве проблемы.
Я предпочитаю отказ, а не выдачу предупреждения, чтобы заставить программиста принять меры, так как в противном случае они могли бы игнорировать проблему и продолжать тратить ресурсы или в конечном итоге непреднамеренно завладеть грузом. Ничего не делать в этом отношении еще хуже.
Мои аргументы имеют смысл? Есть ли принятая практика на такие вещи?
источник
api/v1
и т. Д. Позаботится об этом, но все равно не допускает дополнительных обновлений. +1Ответы:
По моему мнению, вы должны вернуть статус Invalid Request, чтобы клиент знал, что то, что он пытается сделать, недопустимо. Мое мнение об этом зависит от концепции, что API-интерфейсы RESTful являются обнаруживаемыми . Если вы предоставляете достаточно информации заранее, то клиент никогда не пытается сделать неверный запрос с самого начала. Если это так, то в коде клиента что-то не так, и быстрый сбой предупредит секунду об этой ошибке. Конечно, это очень пуристический подход, и его нельзя рекомендовать, если ваш API не доступен для обнаружения.
Более прагматичный подход может заключаться в том, чтобы игнорировать недопустимые параметры, но в любом случае обязательно хорошо документируйте поведение.
источник
Если вы используете открытый API (или API, который будет использоваться другой командой), я бы порекомендовал вернуть ошибку, как предложено @RubberDuck.
Если ваш API будет использоваться только внутри вашей команды (или только вами), возможно, будет легче игнорировать дополнительные поля (например, требуется меньше кода и легче сделать).
источник