在典型的RESTful应用程序中,对象query
和create
不包含ID,而update
和query result
- 包含ID。为这些操作构建模型存在设计困境:
IncludesId<TObject,TId>
(可能派生Dictionary
和KeyValuePair
)类和自定义序列化添加到项目中。这可能与资源定位器很好地配对。我还没有给出足够的想法,只是到达这里...... 如何处理视图模型上的ID以解决这种双重需求?
我包含了我通常在标签中使用的环境,但我认为这个问题确实非常特定于该环境。对不起,这个问题有点开放。只是在这段时间之后,我仍然没有任何练习来管理这种感觉干净,所以我对这些想法持开放态度。
示例(按要求)
public class AccountController : _ApiController {
// returns but does not consume Id, dead member to confuse maintainers
public IEnumerable<AccountViewModel> GetBestMatches(AccountViewModel searchCriteria) { ... }
// returns Id, but consuming Id adds risk of updating another account
public AccountViewModel PostRegisterUser(AccountViewModel newAccount) { ... }
// consumes Id, returning Id is typically unimportant
[Require(Privilege.AccountEdit)]
public AccountViewModel PutEditUser(AccountViewModel editedAccount) { ... }
// Id is derived from current authentication, presence adds maintenance risk
public AccountViewModel PostEditOwnProfile(AccountViewModel selfAccount) { ... }
// should not expose/return Id
[Route("api/Appointment/{appointmentId}/ClientContactInfo")]
public AccountViewModel GetContactInformation(int appointmentId) { ... }
}
在上面的例子中,使用的技术是AngularJS - &gt; JSON - &gt; ASP.NET WebAPI2 - &gt; C# - &gt; EntityFramework 6 - &gt; SQL Server 2012