后端应用程序应如何响应错误或无效输入?

时间:2014-01-22 20:46:48

标签: java google-app-engine google-cloud-endpoints

我们正在为iOS创建一个应用程序,并选择在Google App Engine上运行Java作为后端。我们使用Google Cloud Endpoints为iOS生成客户端库。我们对此大多数都相对较新,我们不太确定后端应该如何在基于用户操作的错误后做出响应。例如,我们有一个创建自定义用户的方法,如果保存成功,应该返回用户对象。但是可能存在未满足的条件,如果是这样,应用程序必须得到适当的响应并处理呈现给用户。这就是我们想到的方式:

@ApiMethod(name = "createUser", httpMethod = HttpMethod.POST)
public User createUser(User user) throws BadRequestException
{
    if(!validateUsername(user.getUsername()))
        throw new BadRequestException("Invalid characters in username");

    //Do stuff and save user
    .........

    return user
}

如果用户名存在,可能会抛出从ServiceException派生的自定义异常等。这是一种合理的方法吗?我觉得每次这样的事情发生时抛出异常都会有点残酷。它也会出现在日志中,这可能使得难以区分需要修复的实际应用程序错误。

1 个答案:

答案 0 :(得分:0)

我相信你在这种情况下抛出错误400(BadRequestException)的方法很好。

此外,Endpoints还提供其他异常,如UnauthorizedException(401),ForbiddenException(403)等。查看list

您还可以拥有可以映射到Endpoints支持的其他HTTP代码的自定义例外。因此,您可以使用自定义异常,但请记住,最终需要映射到其中一个HTTP代码。

当解析客户端中的响应并根据错误进行一些自定义处理时,它可能会变得棘手,因为您必须设置特定详细信息的所有控件都限于message属性。因此,您需要以这样一种方式来破解消息格式,以便您可以解析并找出要执行的操作。