2016-07-20 13 views
0

При работе над API-интерфейсом REST (json) я столкнулся с ситуацией, когда у нас есть представление ресурса user, где Я хотел предотвратить, чтобы поле (email) было переопределено в пределах PUT. Если я правильно понимаю, тогда PUT должен содержать полное представление ресурса для замены старого.Разрешено ли использовать код состояния 409, чтобы предотвратить обновление некоторых полей в запросе HTTP PUT.

Так, например, при извлечении пользователя из API (некоторые заголовки опущены для простоты):

> GET /user/123 HTTP/1.1 
> Host: example.com 
> Authorization: Bearer XXXXX 
> Accept: application/json 

< HTTP/1.1 200 OK 
< Content-Type: application/json 
< 
< { "name": "John Smiht" 
< , "email": "[email protected]" 
< } 

И вы хотите, чтобы исправить опечатку в имени Джон Smiths, вы могли бы сделать:

> PUT /user/123 HTTP/1.1 
> Host: example.com 
> Content-Type: application/json 
> 
> { "name": "John Smith" 
> , "email": "[email protected]" 
> } 

< HTTP/1.1 201 No Content 

Теперь, если кто-то поставить другой адрес электронной почты, могу ли я использовать 409, чтобы указать запрос не был обработан?

> PUT /user/123 HTTP/1.1 
> Host: example.com 
> Content-Type: application/json 
> 
> { "name": "John Smith" 
> , "email": "[email protected]" 
> } 

< HTTP/1.1 409 Conflict 
< Content-Type: application/json 
< 
< { "errorNumber": "XXX" 
< , "errorMessage": "Not allowed to change e-mail address this way" 
< } 

Согласно https://tools.ietf.org/html/rfc2616

  • 400 Bad Request указывает некорректный синтаксис (что это не так)
  • 403 Forbidden можно было бы использовать, но мне кажется, что это больше о доступе к весь ресурс, а не его часть
  • A 409 Conflict, по-видимому, связано с технической причиной того, что он не может выполнить запрос, а не о том, чтобы иметь какие-либо привилегии.

Итак, мой вопрос: какой код состояния следует использовать?


Редактировать: в свете принятого ответа; ответ станет

> PUT /user/123 HTTP/1.1 
> Host: example.com 
> Content-Type: application/json 
> 
> { "name": "John Smith" 
> , "email": "[email protected]" 
> } 

< HTTP/1.1 403 Forbidden 
< Content-Type: application/json 
< 
< { "errorNumber": "XXX" 
< , "errorMessage": "Not allowed to change e-mail address this way" 
< } 

ответ

0

Я бы сказал, что если пользователь не имеет права изменять адрес электронной почты 403 будет правильный код, как сервер понял пользователь, но отказывается действовать на него. (Обычно это означает отсутствие области/привилегий)

+0

Правильно, я думаю, что согласен с вашими рассуждениями. Принимая это как ответ :-) – mhogerheijde

 Смежные вопросы

  • Нет связанных вопросов^_^