私は単純なメッセージをユーザーに送信するAPIを持っているとしましょう。今、私は(自動的に割り当てられた)すべての送信されたメッセージを読んで、それを送信するユーザーと(私はクッキーにアイデンティティを持っていた)との時間を送信したいWeb APIのオブジェクトを読み込んで更新するための2つの異なるモデルクラスを用意する必要がありますか?
POST {
Content: "Message here",
To: "[email protected]"
} api/messages
:それを送信するには、私のようなものを使用します。私の問題は、オブジェクトどのようなことです
public class MessagesController : ApiController
{
[HttpPost, Route("Messages")]
public HttpResponseMessage Post([FromBody] Message message)
{
messageRepository.Create(message);
return Request.CreateResponse(HttpStatusCode.Created, "Message was send.");
}
[HttpGet, Route("Messages")]
public HttpResponseMessage Get()
{
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(JsonConvert.SerializeObject(messageRepository.GetMessages()))
};
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
return response;
}
}
:私は二つの方法があります
[{
Content: "Message here",
To: "[email protected]",
From: "user1",
Time: "0001-01-01T00:00:00"
}]
APIコントローラ側から:
GET api/messages
と私が取得します:再び簡単なことのようです私は何を得るのですか?だから私は同じMessageクラスを使うことはできないと思う。なぜ私はしなければならない:
- 私はそれを適切な方法でここに2つのクラスがありますか? (私はコードを書く必要があり、それはRESTの観点からは正しいのか分かりません)
- 私は1つのクラスを使うべきですが、ユーザーがそれを私に送るなら、FromとTimeプロパティを無視するべきですか?
- FromとTimeを送信するようにユーザーに通知する必要がありますが、ここでnullを送信しますか?
DTO(データ転送オブジェクト)としてワイヤを介して送信されるオブジェクトを考えてください。通常は、必要なものだけを電信で送信するようにしてください。だからあなたのjavascriptクライアントは、apiが期待しているものだけを構築すべきです。 fromとtimeがクライアントが提供する必要がないものであれば、そうではありません。セキュリティの観点からは、クライアントに必要な情報よりも多くの情報を漏らしたくはありません。 – Nkosi