【发布时间】:2013-03-14 08:57:21
【问题描述】:
我正在尝试构建一个(主要是)宁静的服务,但我在设计的一部分方面遇到了困难。我们公开各种资源,在服务器端如下所示:
public class Thing1 : Resource {
public string ABC {get;set;}
public string DEF {get;set;}
}
Resource 是一个基类:
public class Resource {
public List<Link> Links {get;set;}
}
其中Links,反过来,只需绑定rels 和uris。这样,每个Resource 都有指向其他资源等的链接,消费者可以浏览服务提供的各种资源。
一些(但不是全部)资源是可编辑的,因此消费者将检索资源,对其进行更改,然后PUT 将这些更改返回给服务。当然,到那时,服务将根据需要执行验证(并处理任何并发问题)。
但是,与往常一样,如果消费应用程序可以在尝试 PUT 请求之前预先执行一些验证,以减少不必要的往返行程(与我们可能使用 javascript 的方式大致相同),那就太好了即使服务器必须重复验证)。
所以,我想在我们的响应中包含一些验证信息,以便消费应用程序知道(例如)ABC 不能超过 6 个字符。需要注意的是,目前,消费者可以使用相同的资源类(它们在一个单独的程序集中,以及适当的MediaTypeFormatter 类)- 添加属性(例如System.ComponentModel.DataAnnotations.RequiredAttribute)感觉不对,因为消费应用程序最终会得到验证,就像他们获取共享程序集时一样,而不是它可能现在在服务中。
还有一些更基于策略的验证,实际验证属性直到运行时才能计算出来。
tl;dr;
什么是在 REST 响应中包含“有用”验证信息以及实际资源的良好设计,以便使用应用程序可以构建良好的用户体验?
【问题讨论】:
标签: c# rest asp.net-web-api