Использование WCF в RESTful пути кажется большим. Я большой поклонник больших пушек, таких как простота и гибкость, но мне также нравится, как Urls в конечном итоге выглядят. Что я могу сказать, я программист.
Простой API для извлечения и редактирования ресурсов сопоставляется почти одинаково простым набором возможных ответов об ошибках, и я не могу понять, что для того, чтобы придерживаться "чистого" подхода RESTful, я, возможно, или, более конкретно, нос моих пользователей веб-сервисов. Я могу ошибаться, но, похоже, не очень много кодов ошибок Http, которые я могу использовать, и нет способов передать пользовательское сообщение об ошибке.
Чтобы уточнить, я говорю о правильных исключительных ошибках и ожидаемых ошибках. Я хочу на самом деле сообщить о проблеме пользователю, чтобы помочь им определить, что им нужно сделать, чтобы исправить это.
Возможные варианты, которые я рассматриваю...
-
Просто используйте коды ошибок Http. Похоже, что это было бы слишком ограничительным в том, что я могу выразить, и не позволяю мне предоставлять настраиваемое сообщение. Пожалуйста, (!) Исправьте меня, если я ошибаюсь.
-
Всегда возвращать Http-успех, но возвращать пользовательские объекты ошибок - очевидно, самый гибкий, но, конечно, не самый RESTful.
Я был бы очень признателен, если бы кто-нибудь мог поделиться каким-то реальным опытом в этой конкретной проблеме.
Update
Спасибо за предложение использовать свойство StatusDescription
объекта OutgoingWebResponseContext
. Сначала это казалось тем, что я мог использовать.
Я пришел к выводу, что мой второй вариант выше не для меня. Я хочу придерживаться того, что может дать мне Http.
У меня возникают проблемы с его работой. Независимо от значения, которое я предоставляю для этого свойства, оно не возвращается в ответ.
Мой метод обслуживания выглядит следующим образом
public MyType GetMyTypes(string criteria)
{
try
{
return GetMyTypes();
}
catch (Exception ex)
{
OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse;
response.StatusCode = HttpStatusCode.Forbidden;
response.StatusDescription = "A Big fat error occurred";
return null;
}
}
И вот сообщение сырого ответа. В пользовательском сообщении нет упоминания...
HTTP/1.1 403 Запрещено Сервер: ASP.NET Development Server/9.0.0.0
Дата: ср, 07 янв 2009 14:01:20 GMT
X-AspNet-Version: 2.0.50727
Кэш-контроль: частный
Content-Length: 0
Соединение: Закрыть
Это не так, как будто мне просто нужно получить доступ к правильному свойству на клиенте. Информация просто не отправляется по ссылке.
Что делает это свойство StatusDescription
?
Update
Я никогда не узнал, как установить свойство StatusDescription. Я в конечном итоге не включал никаких сообщений об ошибках и шел исключительно с кодами состояния Http. Я решил разоблачить как конечные точки Soap, так и Restful для своих сервисов, и поэтому клиенты могут выбирать, какие они предпочитают использовать, - простые сообщения Restful или относительно более богатые сообщения Soap.