我正在尝试构建一个(大部分)宁静的服务,但我正在努力解决设计的一部分。我们公开各种资源,在服务器端如下所示:
public class Thing1 : Resource {
public string ABC {get;set;}
public string DEF {get;set;}
}
Resource
基类在哪里:
public class Resource {
public List<Link> Links {get;set;}
}
where Link
s,反过来,只是绑定rel
s 和uri
s。通过这种方式,每个Resource
都有指向其他资源等的链接,消费者可以浏览服务提供的各种资源。
一些(但不是全部)资源是可编辑的,因此消费者将检索资源,对其进行更改,然后将PUT
这些更改返回给服务。当然,此时,服务将根据需要执行验证(并处理任何并发问题)。
但是,和往常一样,如果消费应用程序可以在尝试请求之前预先执行一些验证PUT
,以减少不必要的往返行程(这与我们可能使用 javascript 验证的方式非常相似,即使服务器已经重复一遍)。
所以,我想在我们的响应中包含一些验证信息,以便消费应用程序知道(例如)ABC
不能超过 6 个字符。应该注意的是,目前,消费者可以使用相同的资源类(它们在一个单独的程序集中,以及适当的MediaTypeFormatter
类)——添加属性(例如System.ComponentModel.DataAnnotations.RequiredAttribute
)感觉不对,因为消费应用程序最终以验证为那是在他们使用共享程序集的时候,而不是现在在服务中。
还有一些更基于策略的验证,其中实际验证属性在运行时才能计算。
tl;博士;
什么是在 REST 响应中包含“有用”验证信息以及实际资源的良好设计,以便使用应用程序可以构建良好的用户体验?