Kullanıcılara basit mesajlar gönderen bir API’m olduğunu varsayalım.Web API'sındaki nesneyi okumak ve güncellemek için iki farklı model sınıfım olmalı mı?
POST {
Content: "Message here",
To: "[email protected]"
} api/messages
Şimdi tüm gönderilen mesajları okumak istiyorum ama göndermek (ı çerezdeki kimliğini vardı) ve saati (otomatik olarak atanan) göndermek kullanıcı ile: göndermek için ben gibi bir şey kullanmak.
GET api/messages
ve alacağım:: Yine basit gibi görünüyor API kontrol tarafında
[{
Content: "Message here",
To: "[email protected]",
From: "user1",
Time: "0001-01-01T00:00:00"
}]
Ben iki yöntem olacaktır:
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;
}
}
Benim sorun olduğunu nesne nedir gönderim aldığım nesneden farklı. Bu yüzden aynı Message sınıfını kullanamayacağımı düşünüyorum. Neden yapmalıyım?
- Uygun şekilde yapabilmek için iki farklı dersim olmalı mı? (Daha fazla kod yazacağım ve Bilmiyorum REST bakış açısıyla doğrudur)
- Bir sınıf kullanmalıyım, ancak kullanıcı bana gönderecekse Kimden ve Zaman özelliklerini görmezden gelmeli miyim?
- Kullanıcımdan Bana Gönderme Zamanı göndermesini söylemeliyim ama null gönderelim mi?
Tel üzerinden gönderilen nesnelerin DTO'lar (Veri Transferi Nesneleri) olarak düşünün. Genelde sadece tel üzerinden gerekenleri göndermeniz tavsiye edilir. Javascript istemciniz sadece api'nin beklediği şeyi yapmalıdır. Zaman ve danışanın müşterinin sağlaması gerekmediği bir şey varsa o zaman yapmamalı. Güvenlik açısından, müşteri için gerekli olandan daha fazla bilgi sızdırmak istemezsiniz. – Nkosi