Использовать коды состояния ответов 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)