Представление аутентификации REST из браузера - PullRequest
1 голос
/ 13 июля 2011

Компания, в которой я работаю, начала создавать сервисы RESTful, при этом большая часть разработки была отдана на аутсорсинг.

Наш первый сервис предназначен для аутентификации пользователей. Когда пользователь вводит неправильное имя пользователя и пароль, браузер получает код состояния 200 и представление тела ответа:

{
    "state": "FAILED",
    "responseCode": 400,
    "timestamp": 1310378271300,
    "anies": [
        {
            "errorCode": "-6600",
            "errorType": "MSG_ERR_EMPTY_ACCOUNT_API_KEY",
            "translation": {
                            "lang": "en",
                            "value": "Provided login is empty"
                        },
            "property":"apiKey"
        },
        {
            "errorCode": "-6601",
            "errorType": "MSG_ERR_EMPTY_ACCOUNT_API_PASSWORD",
            "translation": {
                            "lang":"en",
                            "value":"Provided password is empty"
                        },
            "property": "apiPassword"
        }
    ]
}

Браузер взаимодействует с контроллером, который, в свою очередь, вызывает веб-сервис. У нас также будут клиенты, напрямую взаимодействующие с сервисами.

Представленное выше представление содержит состояние сбоя (400), внутренний код ошибки, чтобы клиент службы мог посмотреть, что это за ошибка на определенном языке, и перевод ошибки, который браузер будет использовать для отображения на экран. Атрибут «property» - это элемент / параметр формы, которому соответствует ошибка.

Мне кажется, это неправильно.

  1. Должен ли браузер получить код состояния 400, а затем посмотреть, почему произошел сбой?
  2. Должен ли быть атрибут для переведенного текста или имеет смысл иметь уже переведенный текст, если заголовок принятия - en, fr и т. Д.?
  3. Может ли кто-нибудь еще что-нибудь предложить?

Спасибо

Ответы [ 3 ]

1 голос
/ 13 июля 2011

См. Ответ здесь , чтобы узнать, почему ответ 400 может быть правильным.

Большая проблема заключается в том, что код состояния возвращается как часть содержимого.Я думаю, что было бы намного разумнее возвращать правильные 400 статусов для вызовов API, возвращая детали ошибки в контенте.Кроме того, я думаю, что вы правы, так как имеет смысл включить заголовок Accept-Language и возвращать содержимое на требуемом языке.

1 голос
/ 02 декабря 2013

Служба не должна возвращать статус http: 200 ok, поскольку произошла ошибка. Должен возвращать код ошибки:

  • 400 bad request означает, что формат запроса был неправильным, например, имя пользователя не отправлено.
  • 401 unauthorized означает, что имя пользователя и пароль не совпадают, произошел сбой при входе в систему или на другой странице, для которой требуются разрешения, это означает, что вам необходимо сначала войти в систему.
  • 403 no permission означает, что вы вошли в систему, но у вас нет прав для просмотра текущей страницы.

REST имеет только рекомендации по коду состояния при обработке ошибок, поэтому все, что вы возвращаете в теле ответа, может зависеть от приложения. Не стесняйтесь использовать responseCode: 400 в вашем формате сообщения об ошибке, если вы счастливы с этим ...

0 голосов
/ 13 июля 2011

400 представляет неверный запрос (см. здесь ).В этом случае использование некорректно, запрос был в порядке, просто пользователь не был проверен.Я бы вернул код ответа 200 с указанными выше деталями.

...