2014-01-29 1 views
1

특정 상황에서 올바른 REST 끝점을 찾기 위해 고심하고 있습니다. 내 웹 사이트에서는 사용자가 서로에게 메시지를 보낼 수 있습니다. 한 사용자가 여러 수신자에게 메시지를 보낼 수 있습니다.메시징을 처리 할 때 올바른 REST 끝점 디자인

나는/V1/사용자/123/메시지 I 사용자 (123)가 보낸 메시지에 사용할해야합니까 끝점

사용자 (123)로 전송 된 모든 메시지를 반환 것이라고 생각하십니까? 다음과 같이

내 데이터베이스 구조는

id    INT 
username  VARCHAR(64) 

메시지 테이블을 테이블에게

id    INT 
account_id  INT   <!-- This is the senders account ID 
subject   VARCHAR(128) 
message   TEXT 

messagerecipients 테이블

계정입니다 ...3210
id    INT 
message_id  INT 
account_id  INT   <!-- This is the recipients account ID 

는 메시지 테이블은 messagerecipients 테이블이 메시지와 자신의 수신자 사이의 다 대다 관계를 정의

메시지와 발신자 사이에 일대일 관계를 정의


또한 a PDF on API design을 통해 읽는 중입니다. 쿼리 문자열 뒤에 이런 종류의 복잡성을 숨겨야한다고 제안하는 것 같습니다. 예를 들어

....

/v1/emails?filter=author_id(123) 
/v1/emails?filter=recipient_id(123) 

생각?

답변

1

내가

/v1/users/123/messages 

이 사용자에게 속한 모든 메시지를 반환 할 것으로 예상합니다. 이것은 수신, 전송, 삭제, 태그 지정, 제도 등을 의미합니다.

쿼리 문자열 : 내가 예를 들어, 같은 필터링이 완벽하게 유효한 찾을

는 말했다 당신처럼이 두 가지 방법을 가서 bertvh 수있는 자원의 일부을 지정하려면
/v1/users/123/messages?type=received&folder=important 

또는

하위 리소스로 : 사용이 당신은 더 높은 수준의 예에서 필터 옵션을 많이 가지고 기대하는 경우

/v1/users/123/messages/received?folder=important

당신이 필터 옵션을 줄이는 것이 볼 수 있듯이.

bertvh와 마찬가지로, 기본 데이터베이스 스키마는 응답을 제공하는 것과 관련이 없습니다.

1

나는 이렇게 할 것입니다.

/v1/users/123/inbox 

데이터베이스 구조가 자원 체계에 대한 무관하지만이 영향을 미칠 수 있습니다

/v1/users/123/sent 

모든 메시지는 사용자가 수신하려면 :

모든 메시지는 사용자가 전송하려면 페이로드 구조. 당신이 JSON을 사용하려면 메시지는 다음과 같이 보일 수 있습니다 :

{ 
    sender: 123, 
    receivers: [124, 125] 
    content: "My message content" 
}