Dam*_*ver 10 c# rest asp.net-web-api
我正在努力建立一个(大多数)宁静的服务,但我正在努力设计的一部分.我们公开了各种资源,在服务器端看起来像:
public class Thing1 : Resource {
public string ABC {get;set;}
public string DEF {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
Resource基类在哪里:
public class Resource {
public List<Link> Links {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
其中LinkS,反过来,只要绑定relS和uri秒.以这种方式,每个都Resource具有到其他资源等的链接,并且消费者可以浏览服务提供的各种资源.
一些(但不是全部)资源是可编辑的,因此消费者将检索资源,对其进行更改,然后将PUT这些更改返回给服务.当然,此时,服务将根据需要执行验证(并处理任何并发问题).
但是,与往常一样,如果消费应用程序可以在尝试PUT请求之前预先执行某些验证,减少不必要的往返行程(就像我们可能使用javascript验证一样,即使服务器具有重复一遍).
所以,我想在我们的响应中包含一些验证信息,以便消费应用程序知道(例如),ABC不能超过6个字符.应该注意的是,目前,消费者可以使用相同的资源类(它们在一个单独的程序集中,与适当的MediaTypeFormatter类一起) - 添加属性(例如System.ComponentModel.DataAnnotations.RequiredAttribute)感觉不对,因为消费应用程序最终会将验证作为这是当时他们把共享程序集,而不是因为它可能是现在的服务.
还有一些基于策略的验证,其中直到运行时才能计算实际验证属性.
TL;博士;
在REST响应中包含"有用的"验证信息以及实际资源的优秀设计是什么,以便消费应用程序可以构建良好的用户体验?
如果您有足够的预算(时间、金钱或两者),请为资源构建元服务,以便您的其余部分仅返回数据(带有元数据标识符),并且如果客户端需要,它可以请求刚刚收到的数据的验证元数据。这样您就可以只发送客户需要的东西,并合理分离蛋黄和蛋白。
作为一种实现变体,对于每个请求,/some/res/ource您都可以创建一个同伴/some/res/ource/meta,它将返回有关该资源的只读元数据。鉴于路径几乎相同,您可以将验证定义为类成员的属性,元服务将简单地从路由中找到一个类,并从类定义中构建验证信息。