Каков хороший шаблон дизайна для возвращаемых значений веб-метода?
-
09-06-2019 - |
Вопрос
Как вы структурируете возвращаемые значения при кодировании веб-сервисов? Как вы справляетесь с ошибочными условиями (ожидаемыми и неожиданными)? Если вы возвращаете что-то простое, например, int, вы просто возвращаете его или встраиваете в более сложный объект? Все ли веб-методы в одном сервисе возвращают экземпляр одного класса или вы создаете собственный класс возвращаемого значения для каждого метода?
Решение
Мне нравится шаблон объекта Request / Response, в котором вы инкапсулируете свои аргументы в один класс запроса [Operation], который имеет простые общедоступные свойства.
Что-то вроде AddCustomerRequest, которое будет возвращать AddCustomerResponse.
Ответ может включать информацию об успешном / неудачном завершении операции, любые сообщения, которые могут быть использованы в пользовательском интерфейсе, например, идентификатор добавленного клиента.
Еще один хороший пример - сделать все это производным от простого интерфейса IMessage, где ваша общая конечная точка - что-то вроде Process (params IMessage [] messages) ... таким образом, вы можете передавать несколько операций в одной и той же сети. запрос.
Другие советы
+1 за ответ Бена.
Кроме того, я предлагаю учесть, что общий ответ позволяет использовать несколько элементов ошибок / предупреждений, чтобы сделать ответ максимально полным и действенным. (Вы хотите использовать компилятор, который остановился после первого сообщения об ошибке, или компилятор, который сказал вам как можно больше?)
Если вы используете веб-службы SOAP, то Ошибки SOAP - это стандартный способ возврата сведений об ошибках, где сообщения об ошибках могут возвращать любые дополнительные сведения, которые вам нравятся.
Неисправности мыла являются стандартной практикой, когда вызывающее приложение является клиентом Soap. В таких случаях, как COM-клиент, использующий XMLHTTP, Soap анализируется как XML, а ошибки Soap не могут быть легко обработаны. Не могу голосовать, но еще +1 за @Ben Scheirman.