2017-04-10 4 views
1

이 API 튜토리얼/설명 참조하기 : https://thinkster.io/tutorials/design-a-robust-json-api/getting-and-setting-user-dataPUT 대신 DELETE/POST를 사용하여 사용자를 '언 폴백/팔로우'하는 이유는 무엇입니까?

튜토리얼 '은 사용자에 따라'하려면 사용하는 것이라고 설명 :

POST /api/profiles/:username/follow합니다.

'사용자를 팔로우 취소'하려면 사용합니다 :

DELETE /api/profiles/:username/follow합니다.

사용자 프로필의 초기 값은 "following": false입니다.

true에서 false으로 업데이트되는 대신 "다음"필드가 생성/삭제 (POST/DELETE)되는 이유를 이해할 수 없습니다. 실제로 무슨 일이 일어나고 있는지 파악하지 못하는 것 같습니다. 단지 "후속"값을 truefalse 사이에서 토글하지 않고있는 것입니까?

감사합니다.

답변

0

나는 데이터베이스 계층이 "다음"에 대한 부울 열을 갖는 것보다 약간 더 복잡한 방법으로 구현되어야한다고 생각합니다.

사용자가 3 명이라면 사용자 중 한 명이 "following": true 인 것은 무엇을 의미합니까? 그 사용자는 무엇인가를 팔로우합니까? 이것만으로 사용자가 다른 모든 사용자를 따르고있는 것은 아닙니다. 맞습니까?

데이터베이스 계층은 아마도 사용자와 추종자의 두 가지 개념으로 구성됩니다. 사용자는 사용자에 대한 정보를 포함하고 다음은 사용자가 서로 따라야하는 것을 지정합니다.

[ 
    {"username": "jake"}, 
    {"username": "jane"} 
] 

우리가 제인은 제이크 다음과 같은 것을 말하고 싶은,하지만 다른 방법으로 주위 :

우리는 두 명의 사용자를 가지고 있다고 말한다.

그런 다음 우리는 그 개념을 표현할 무언가가 필요합니다. 다음과 같이 호출 해 봅시다 :

{"follower": "jane", "followee": "jake"} 

API가 다음을 만들거나 삭제하는 것에 대해 이야기 할 때, 이것은 아마도 그들이 생성하는 것으로 상상할 수 있습니다. 그래서 PUT 대신 POST/DELETE를 사용합니다. 사용자 개체를 수정하지 않고 다음을 나타내는 다른 개체를 만듭니다.

당신이 다른 사용자의 하나로서 특정 사용자에 대한 정보, 를 요청할 때 사용자가 특정 사용자에게 다음과 당신 같은 경우, 당신이 알고 싶어하기 때문에 그들의 JSON의 API 응답에 "following": true/false 부분을 가지고있는 이유는 .

제인은 GET /api/profiles/jake에서 제이크에 대한 정보를 요청 할 때, 위의 예를 주어, 그녀는 다음과 같이받을 것이다 : 제이크에 대한 프로파일 정보를 요청 할 때

{ 
    "profile": { 
    "username": "jake", 
    "bio": "...", 
    "image": "...", 
    "following": true 
    } 
} 

을,

{ 
    "profile": { 
    "username": "jane", 
    "bio": "...", 
    "image": "...", 
    "following": false 
    } 
} 

그래서 정보가 API 응답이 실제로이 특정 사용자에 대한 데이터베이스에 저장되는, 그것은 또한 contai 아니므로 목록 : 제인, 그는 대신이 응답을 얻을 것 누가 질문을했는지에 따라 계산 된 정보.

+1

데이터베이스 계층은 API의 디자인 고려 사항과 관련이 없어야합니다. POST/DELETE 대 PUT의 의미는 API 계층에만 관련이 있습니다. –

+0

동의합니다. 나는 그것을 단지 예로서 사용하고 있었고 아마 어색한 것이었다. 이 경우 "다음"은 "사용자 프로필"과는 별도의 개념이며, 물론 링크 된 예제가 우리에게도 알려주려고합니다. 질문은 부울 값을 토글하지 않는지 묻습니다. 그 이유는 나에게 그들이 요청이 만들어진 후 전후에 프로필 응답이 왜 다르게 보일 것인지보다는 오히려 생성/삭제 된 이유에 대해 설명하는 한 가지 이유를 설명하려고했습니다. – Frost

0

microPUT을 사용하면 확실히 합리적인 대안이 될 것입니다. 임의의 API 튜토리얼로 인해 특정 디자인 결정이 내려진 이유를 말할 수있는 사람은 없을 것이라고 생각합니다. POST/DELETE를 사용하기 위해 고안된 예제가 필요할 수도 있습니다.

작성자가이 질문을 보는 경우를 제외하고는 답변을 드릴 수 없습니다. 추적 상태 변경의 타임 스탬프와 같은 메타 정보를 저장하려고하지만 POST/DELETE와 PUT의 영향을받지 않을 것이라고 생각할 수 있습니다.

관련 문제