Дизайн Rest Dao и обработка исключений - PullRequest
1 голос
/ 20 августа 2011

Мне нужно спроектировать DAO, который делает вызов REST WS.Этот WS должен возвращать учетные данные пользователя с заданным именем пользователя и паролем.

Случай 1: пользователь был найден => REST WS отправляет http-код 200 и ответ с учетными данными.

Случай 2: пользователь не был найден => REST WS отправляет http-код 400и объект ошибки с причиной.

Случай 3: пользователь был найден, но его учетная запись отключена => REST WS отправляет http-код 400 и объект ошибки с причиной.

Случай4: REST WS недоступен

Каков наилучший способ в моем DAO для сопоставления ответа REST WS?

1 - Я выбрасываю функциональные проверенные исключения в моем DAO для обработки случаев объектов ошибок, а в нормальных случаях я возвращаю объекты ответа учетных данных.Когда REST WS недоступен, я выбрасываю непроверенное исключение

2 - я не выкидываю никаких функциональных исключений в моем DAO, так как это работа уровня службы.Я возвращаю то, что возвращает REST WS, то есть ответы учетных данных и ответы на ошибки в обернутом объекте, например, и я позволяю уровню службы проверять, чтобы эти объекты выполняли правильную работу.Когда REST WS недоступен, я выбрасываю непроверенное исключение

3 - я выбрасываю только непроверенные исключения для случаев ошибок и позволяю сервисному уровню решать, что с ним делать.И я возвращаю только ответные данные.

Заранее большое спасибо.

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Ответы 4XX в протоколе HTTP определяются как клиентские ошибки, и я думаю, что они имеют право на создание исключения на уровне DAO.В этом случае объект ошибки является просто представлением сгенерированного исключения.

Если вы должны сгенерировать проверенное или непроверенное исключение, это, вероятно, будет основой для длительного обсуждения и, в конце концов, зависит от личных предпочтений или общих рекомендаций по кодированию впроект.При создании исключения вы можете сопоставить тип исключения с соответствующим кодом ошибки HTTP, например, BadCredentialsException становится ошибкой HTTP 400, все, что не может быть сопоставлено, становится внутренней ошибкой 500 сервера

1 голос
/ 20 августа 2011

Я предпочитаю вариант 1, потому что ваш DAO берет на себя ответственность за понимание того, что возвращает удаленный источник данных.Ваш уровень обслуживания находится выше вашего DAO и не должен понимать какие-либо тонкости удаленного источника;это включает в себя, как ошибки возвращаются по проводам.

...