Обработка исключений веб-службы - поиск альтернатив SOAP - PullRequest
1 голос
/ 17 мая 2010

Я ищу шаблон проектирования для обработки исключений, сгенерированных веб-службой.

Я посмотрел примеры SOAP, и они не подходят для моего проекта.

Я звоню на веб-сервисы через AJAX. Если вызов не удался или бизнес-логика не соблюдена, я бы хотел передать в браузер пользовательский объект, который будет содержать некоторую информацию об исключении. Браузер будет просматривать информацию об исключении через java-скрипт и обрабатывать его. Это разумная вещь, или я должен искать альтернативы?

Единственное, что мне удалось найти, это SOAP.

Спасибо

1 Ответ

0 голосов
/ 21 апреля 2011

Использовать коды состояния ответов HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html. Существует диапазон кодов ответов 4xx-5xx, который предназначен для обработки сообщений об ошибках.Он обрабатывает уровень http, поэтому вы должны договориться об использовании определенных кодов для определенных типов ошибок.См. http://distilledme.wordpress.com/2010/12/22/http-status-codes-quick-reference/, чтобы увидеть, как коды ошибок http могут быть применены к приложению REST.

В общем, вы, вероятно, будете много использовать код ответа 500, с полезной нагрузкой, указывающей на конкретную ошибку уровня приложения.Если вы хотите использовать AJAX, вы можете встроить контент в объект JSON, в котором будет храниться информация об ошибках на уровне приложения, например:

  // normal response
   {'status': 'ok',
    'error': null,
    'response': some_response}

  // error response (with 500 http code)
   { 'status': 'error',
     'error_msg': 'you should enter your name',
     'error': 'UserInputError'}

На стороне клиента вы десериализуете JSON, проверьте наличие элемента 'status',Если оно равно «error», примите значение «error» и посмотрите, какая это конкретная ошибка (значение должно быть согласовано как на стороне сервера, так и на стороне клиента), и, если необходимо, добавьте описание ошибки в «error_msg».Если 'error' равен null, вы берете объект 'response' и обрабатываете его дальше.

Если вы используете какую-то инфраструктуру JavaScript, посмотрите, как можно добавить функции обратного вызова для обработки ошибочных ответов сервера (кроме 2xx) единообразным способом в оболочках запрашивающей стороны AJAX (например, в JQuery можно добавить глобальные обработчикик событиям AJAX, поэтому вы устанавливаете его один раз и используете каждый раз: http://docs.jquery.com/Ajax_Events)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...