2016-07-20 1 views
0

(json) REST API에서 작업하는 동안 우리는 user 리소스가있는 상황이 발생했습니다. 필드 (email)가 PUT에서 덮어 쓰지 않도록하고 싶었습니다. 제가 올바르게 이해한다면, PUT은 이전 것을 대신 할 자원의 전체 표현을 포함해야합니다.HTTP PUT 요청에서 일부 필드가 업데이트되지 않도록하기 위해 409 충돌 상태 코드를 사용할 수 있습니까

> 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]" 
< } 

그리고 당신은, 당신이 할 것 존 스미스의 이름에 오타를 수정 싶어 다음 API에서 사용자를 가져 오는 경우

그래서 예를 들어, (일부 헤더는 단순화를 위해 왼쪽으로) :

> 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를 사용할 수 있습니까? https://tools.ietf.org/html/rfc2616

  • 400 Bad Request에 따르면

    > 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" 
    < } 
    

  • 403 Forbidden이 사용될 수있다 (이 아닌) 잘못된 구문을 표시하지만, 그것이 액세스에 대한 자세한 것을 나에게 보인다 전체 리소스, 일부가 아님
  • 409 Conflict은 요청을 수행 할 수 없다는 기술적 이유에 관한 것으로 보이며, 뭔가를 할 수있는 권한에 관한 것이 아닙니다.

내 질문은 : 어떤 상태 코드를 사용해야합니까?


편집 : 허용 대답; 응답은 사용자가 서버가 사용자를 이해로 전자 메일 주소 (403)가 올바른 코드가 될 것이다 변경할 수있는 권한을 가지고 있지만 그것을 행동을 거부하지 않은 경우

> 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

내가 말하고 싶지만이 될 것입니다. (일반적으로 범위/권한이 누락되었음을 의미합니다.)

+0

맞아, 나는 당신의 추론에 동의한다고 생각합니다. 답변을 수락 :-) – mhogerheijde

관련 문제