2014-11-07 3 views
0

Я хочу определить услугу как веб-сервис. Я определяю метод с именем register. Его класс как входной параметр с именем RegisterParam и возвращаемым типом с именем RegisterResult как выход.выставлять сервис по возвращаемому значению или исключать исключение

public class RegisterParam{ 
     String name; 
     String family; 
} 

public class RegisterResult{ 
     Integer registr_id; 
} 

public interface Service{ 
     public RegisterResult register(RegistrParam param); 
} 

Если служба регистра не удалось, и его логика не делать так, у меня есть два решения для уведомляют обслуживания абонентов:

  1. В классе RegisterResult добавить свойство как result_code и перечисление для его стоимости. Если его значение равно нулю, это означает, что регистрация серпсиса успешно выполнена, а если его значение равно нулю, значит, служба регистрации не сработала, и result_code показывает причину сбоя.

  2. Служба регистрации выдает исключение, если оно ложно, и если не выбрано какое-либо исключение, служба регистрации завершена успешно.

Мой вопрос: что выше решение bettr и почему?

+0

Это мыло или веб-сервис отдыха? – dit

+0

@dit В моем случае мыло, но мой вопрос логичен и не зависит от технологии. – MJM

ответ

0

Я думаю, вы должны отличаться два различных сценария:

1) Исключение составляют, как некоторые среды (например, базы данных) не доступен. В этом случае я бы выбрал исключение, которое автоматически преобразуется в SOAPFault с помощью реализации веб-службы. Преимущество этого заключается в том, что вызывающий абонент получает также исключение и может справиться с этим путем обработки исключений.

2) Ожидаемая бизнес-ошибка «happend», так как пользователь не выполнил вход или не предоставил необходимую информацию, чтобы обеспечить успешное завершение службы. Вызывающий ваш веб-сервис получает ответное сообщение, которое вызывающий должен интерпретировать и, возможно, хочет показать его пользователю, предоставившему эту информацию.

В конце концов, это зависит от вашего контракта на интерфейс, который вы предоставляете своим пользователям интерфейса! Самое главное в том, чтобы описать, как ваша служба обрабатывает различные сценарии ошибок.

0

корпус 1 нет результата:

public interface Service{ 
    public void register(RegistrParam param); 
} 

В этом случае ваша служба может отправить HTTP Status Code как 200. Ваш клиент будет интерпретировать код состояния таким образом:

  • 200: ок я Зарегистрировано
  • 400: hm не знаю почему, но не удалось ...

Если вы хотите понять, что произошло, и почему ваш запрос не удался с ошибкой 400, вы должны проверить свои журналы сервера или что-то в этом роде.

корпус 2 с результатом:

public interface Service{ 
    public Response register(RegistrParam param); 
} 

Я всегда посылаю объект Response для моих клиентов:

public class Response { 

    private ResponseStatus status;  // enum: (OK, ERROR, BAD_REQUEST) 
    private ResultType  type;  // enum: (RegisterResult, LoginResult etc...) defines how to interpret the field "data" 
    private Object   data;  // RegisterResult.java as jsonstring or Exception.java as jsonstring etc... 
    private long   time = -1L; // execution time 

} 

Если я разрабатываю мой клиент, я всегда могу понять, почему мой запрос был неудачным.

Смежные вопросы