gpt4 book ai didi

java - 如何正确地从 RESTful API 传递错误?

转载 作者:行者123 更新时间:2023-12-01 07:20:49 25 4
gpt4 key购买 nike

我指的是this project on Github 。所以这应该是一个用于管理电影租赁服务的 RESTful API。我的意思是它现在在技术上“有效”,但它要做的事情之一就是从内部方法将错误消息直接传递给客户端。

以这段代码为例:

/*
GET films
*/
get("/films", (req, res) -> {
try {
String json_output = get_film_list();
return json_output;
} catch (Exception e) {
return "{\"error\":\"There was an error: " + e.toString().replace("\"","") + "\"}";
}
});

我们有 get_film_list() 方法:

public static String get_film_list()  throws SQLException, URISyntaxException{
Connection connection = ConnectionPool.getDBCP2Connection();
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM films");

String output = "{\"films\":[";
int got_result = 0;
while (rs.next()) {
output += "{\"id\":\""+rs.getInt(1)+"\",\"name\":\""+rs.getString(2)+"\",\"type\":\""+rs.getInt(3)+"\"},";
got_result = 1;
}
rs.close();
stmt.close();
output = output.substring(0, output.length()-1) + "]}";

if (got_result == 1){
return output;
}else{
throw new SQLException("No films.");
}
}

因此错误会通过 API 传递给用户。我发现这对于开发来说非常方便。我知道如果服务器响应包含 error 属性,那么就会出现错误,并且它会提供错误消息。我通过代码审查听说这根本不是这样做的方法。我还怀疑也许你应该给出正式的 HTTP 错误或其他东西。但同时我想我希望我的 api 始终返回漂亮的 JSON 格式的字符串。

当用户尚未进行身份验证时,他们将看到以下内容:

{"error":"Please Authenticate."}

我在数据库连接类中创建了一个错误,用户将看到以下内容:

{"error":"There was an error: java.sql.SQLException: Cannot load JDBC driver class 'org.postgresql.Drive'"}

所以,我的问题归结为,使用 RESTful API 将错误消息返回给用户的正确方法是什么。其中一种使用返回 JSON 数据。

谢谢!

最佳答案

RESTful 服务基于两件事:响应代码和实际响应本身。

嗯,基本上可以归结为您要处理的错误。这种特殊情况意味着找不到数据,您会找到处理这种情况的不同方法。任何其他错误情况都会以不同的方式处理

处理此错误的两种方法是

场景 1:

响应代码:200 OK
响应:{}

这意味着指定的请求没有数据(更重要的是请求提供的参数)

场景 2:

响应代码:404 未找到
响应:{“error”:“错误消息”}

但这可能会造成混淆,表明未找到该服务。但这取决于您如何定义 RESTful API。

据我了解,上述场景是两者的混合,它发出 200 OK,但同时也发出错误消息,这不是执行此操作的方法。

最好通读 REST 规则,然后提出您的 API。

此外,通过 SWAGGER 或 RAML 记录您的 API 可能是值得的,这对于使用该服务的人来说很有意义,而无需通过大量代码来理解它。

关于java - 如何正确地从 RESTful API 传递错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38226076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com