我想把服务定义为web服务。我定义了一个具有register
名称的方法。它是以RegisterParam
名称作为输入参数的类,以及以RegisterResult
名称作为输出的返回类型。
public class RegisterParam{
String name;
String family;
}
public class RegisterResult{
Integer registr_id;
}
public interface Service{
public RegisterResult register(RegistrParam param);
}
如果注册服务失败,而它的逻辑没有这样做,我有两种解决方案用于通知服务调用者:
result_code
,并为其值添加枚举。如果它的值为零,则表示成功完成注册服务器,如果它的值为零,则注册服务失败,result_code
显示失败的原因。我的问题是:上面的解决方案是什么?为什么?
发布于 2014-11-07 12:45:35
我认为你应该有两种不同的设想:
1)异常发生,就像某些环境(例如数据库)不可用一样。在这种情况下,我将抛出一个异常,该异常将由web服务实现自动转换为SOAPFault。这个方法的优点是,您的服务调用方也得到了一个异常,并且可以通过它的异常处理来处理它。
2)预期的业务“错误”会发生,就像用户没有登录或没有提供必要的信息使服务能够成功地完成一样。您的web服务的调用方接收到一个响应消息,调用方必须对其进行解释,并可能希望将其显示给提供信息的用户。
最后,这取决于您提供给您的界面用户的接口契约!最重要的是描述您的服务如何处理不同的错误场景。
发布于 2014-11-07 13:09:29
案例1没有结果:
public interface Service{
public void register(RegistrParam param);
}
在这种情况下,您的服务可以发送类似于200的HTTP状态码。您的客户将以下列方式解释状态代码:
如果您想了解发生了什么,以及为什么您的请求失败了400错误,您必须检查您的服务器日志或类似的东西。
案例2及其结果:
public interface Service{
public Response register(RegistrParam param);
}
我总是向我的客户发送一个响应对象:
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
}
如果我在开发我的客户,我总能理解为什么我的请求失败了。
https://stackoverflow.com/questions/26801326
复制相似问题