У нас есть REST API для загрузки бинарных файлов с сервера.
Запросы выглядят так
GET /documents/e62dd3f6-18b0-4661-92c6-51c7258f9550 HTTP/1.1
Accept: application/octet-stream
Для каждого ответа, указывающего на ошибку, мы хотели бы указать причину в JSON. Проблема сейчас в том, что ответ не имеет того же типа содержимого, что и запрошенный клиентом.
Но какой ответ должен выдать сервер?
В настоящее время он отвечает
HTTP / 1.1 406 Not Acceptable
Content-Type: application/json
{
reason: "blabla"
...
}
Что мне кажется неправильным, поскольку основная проблема заключается в том, что ресурс не существует, а клиент не запрашивает неправильный тип контента.
Но вопрос в том, как правильно поступить в таких ситуациях?
- Можно ли отвечать 404 + application/json, хотя был запрошен application/octet-stream
- Можно ли отвечать 406 + application/json, так как клиент не указал application/json в качестве допустимого типа
- Должна ли быть расширена спецификация, чтобы клиент использовал q-параметр, например,
application/octet-stream, application/json;q=0.1
- Другие опции?
Accept: text/html
, но и набор типов мультимедиа, которые он понимает (или неограниченный набор MIME-типов, то есть вообщеimage/*
или*/*
). Использование квалификатора для согласования содержимого в целом может быть неплохой идеей. - person Roman Vottner   schedule 19.09.2018