REST Api を開発するとき、私がオブジェクト レベルのメタデータ、CreatedBy、CreatedOn、ModifiedBy、ModifiedOn などと呼んでいるものを処理する最良の方法は何ですか?
典型的なクラスは次のとおりです。
public class Person {
public Guid Id {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public DateTime CreatedOn {get; set}
public Guid CreatedBy {get; set;}
}
私は理想的な世界では、REST http メソッドは次のようにコントローラ メソッドに直接マッピングされると考えていました。
public void Post (Person person) {
...perform the logic to add a person.
}
したがって、API の消費者は理論的に次のように投稿できます。
{
"Id": "...guid...",
"FirstName": "Joe",
"LastName" : "Bloggs",
"CreatedOn" : "01/01/12",
"CreatedBy" : "...guid..."
}
ただし、消費者設定の Id、CreatedOn、および CreatedBy は適切ではありません。これを行うのは消費者の責任ではないと思います。したがって、これにより、私のPost
方法で次のことを行うことができます。
public void Post (Person person) {
person.Id = Guid.NewGuid();
person.CreatedOn = DateTime.Now;
person.CreatedBy = ...get user credentials from request...
}
したがって、消費者は自由に投稿できます。
{
"FirstName": "Joe",
"LastName" : "Bloggs"
}
Put メソッドを使用して更新を行うにはどうすればよいでしょうか。これにより、同じ問題が残ります。消費者がこのメタデータを通過することを望まない (または信頼しない) 場合は、Put
メソッドでこれを行う必要があります。
public void Put (Person person) {
Person existingPerson = myRepository.GetEmployee(person.Id);
existingPerson.FirstName = person.FirstName;
existingPerson.LastName = person.LastName;
myRepository.Save(existingEmployee);
}
Post (Person person
コンシューマーの json/xml をモデル オブジェクトにデシリアライズし、 orを通過することに本当の意味があるのではないかと考え始めてPut (Person person)
います。すべてをディクショナリに逆シリアル化しないのはなぜですか (ただし、実際には json に対してのみ実行可能です)。
REST について何か基本的なことが欠けていますか? Id と 1 つのプロパティをモデル オブジェクトに逆シリアル化し、完全なオブジェクトを取得して更新するのは正常ですか? コンシューマーに毎回すべてを通過させてから検証する必要がありますか?
コンシューマーが json または xml のチャンクを通過し、それがコントローラーに到達するまでにオブジェクトを処理しているという考えが気に入っています。このすべてのプロパティを無視し、更新のために既存のレコードをプリフェッチするなど、少し面倒に思えます.RESTを根本的に誤解していない限り?