Я пытаюсь создать (в основном) успокоительный сервис, но я борюсь с одной частью дизайна. Мы показываем различные ресурсы, которые на стороне сервера выглядят следующим образом:
public class Thing1 : Resource {
public string ABC {get;set;}
public string DEF {get;set;}
}
Где Resource
- базовый класс:
public class Resource {
public List<Link> Links {get;set;}
}
Где Link
s, в свою очередь, просто привяжите rel
и uri
s. Таким образом, каждый Resource
имеет ссылки на другие ресурсы и т.д., И потребитель может перемещаться по различным ресурсам, предлагаемым службой.
Некоторые (но не все) ресурсы доступны для редактирования, поэтому потребитель будет извлекать ресурс, вносить в него изменения, а затем PUT
эти изменения возвращаются к службе. Конечно, в этот момент служба будет выполнять валидацию по мере необходимости (и решать любые проблемы concurrency).
Но, как всегда, было бы неплохо, если бы потребительское приложение могло выполнить некоторую проверку перед тем, как даже попытаться выполнить запрос PUT
, чтобы сократить ненужные круглые поездки (почти так же, как мы могли бы использовать javascript хотя сервер должен повторить его).
Итак, я хотел бы включить в наши ответы некоторые данные проверки, так что потребительское приложение знает, что (например), ABC
не может быть длиннее 6 символов. Следует отметить, что в настоящее время потребитель может использовать одни и те же классы ресурсов (они находятся в отдельной сборке вместе с соответствующими классами MediaTypeFormatter
) - добавление атрибутов (например, System.ComponentModel.DataAnnotations.RequiredAttribute
) чувствует себя не так, потому что тогда потребляющее приложение заканчивается проверкой, как это было в то время, когда они брали общую сборку, а не как может быть теперь в службе.
Также существует некоторая проверка, которая больше основана на политике, где фактические свойства проверки не могут быть вычислены до времени выполнения.
TL;DR;
Какая хорошая конструкция для включения "полезной" информации проверки в ответах REST наряду с фактическим ресурсом, чтобы потребительские приложения могли создавать хорошие пользовательские впечатления?