#javascript #json #rest #http-status-codes
#javascript #json #остальное #http-status-codes
Вопрос:
Я работаю над проектом, в котором я создаю интерфейс, а кто-то другой создает API. Я предлагал следующую структуру для всех запросов, отправляемых в формате JSON:
{
"success": true, // true/false
"message": null, // a string if success==false indicating the error
"data": {} // The actual data in the response
}
Они больше заинтересованы в том, чтобы сделать API более RESTful, и вместо поля «сообщение» они предлагают отправить сообщение обратно в сообщении с кодом состояния, в заголовках HTTP, например:
HTTP/1.1 401 Authentication Failed for john.smith@example.com. Please log in again.
и интерфейс отобразил бы «Ошибка аутентификации для john.smith@example.com . Пожалуйста, войдите снова «. во всплывающем окне или что-то в этом роде.
Меня беспокоят ограничения по длине, но я не смог найти ничего, что указывало бы на отсутствие максимальной длины. Должны ли мы гарантировать, что мы сохраняем эти сообщения минимальной длины? Есть ли веская причина не делать этого и вместо этого отправлять его обратно в виде содержимого (JSON или обычного текста)?
Комментарии:
1. В моих тестах с IIS Express и Google Chrome я получал
ERR_CONNECTION_RESET
ошибки при слишком длинном сообщении об ошибке и / или при наличии разрывов строк.
Ответ №1:
Небольшое тестирование будет иметь большое значение, но вы должны быть в порядке, чтобы сделать это, и на самом деле в RFC конкретно говорится:
Приведенные здесь фразы о причинах являются только рекомендациями — они МОГУТ быть заменены локальными эквивалентами без влияния на протокол.
Единственное, что вас может беспокоить, это размер заголовка (некоторые серверы могут иметь ограничения, но я думаю, что все они относительно большие) и то, как некоторые старые браузеры могут реагировать на это. Честно говоря, я думаю, что имеет смысл использовать тело ответа, поскольку его легче интерпретировать и прояснить, но в вашем подходе не должно быть ничего плохого.
Комментарии:
1. К вашему сведению, RFC 2616 был заменен в прошлом месяце RFC 7231 через 7235. RFC 7230 определяет требования к длине для различных элементов, но не
reason-phrase
в ответе о состоянии.
Ответ №2:
Я хочу добавить, что, хотя в спецификации может не быть ограничений, существует реальная вероятность того, что реализации усекут сообщение о состоянии, как я обнаружил, когда я пробовал что-то похожее на OP с Jetty 9.4.14 .
Мне потребовалось некоторое время, чтобы найти причину усеченного сообщения — существует жестко закодированное, не настраиваемое ограничение в 1024 символа [см. Метод getReasonBytes(строка)].
(не удалось опубликовать это в качестве комментария из-за отсутствия репутации)