2014-01-29 56 views
1

我正努力爲特定情況制定出正確的REST端點。在我的網站上,用戶可以互相發送消息。一個用戶可以將消息發送給多個收件人。正確處理消息傳遞時的REST端點設計

我覺得/ V1 /用戶/ 123 /消息將返回已發送到用戶123

我應該使用用戶123已發送的郵件什麼終點的所有消息?

我的數據庫結構如下...

賬表

id    INT 
username  VARCHAR(64) 

信息表

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

messagerecipients表

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