我正在尝试编写一个REST API,该API将返回所连接播放器的完整列表。我将Java Spark用于API,但是,仅使用GET API会返回实际连接的播放器的列表。我想偶尔更新一次API响应,但似乎无法绕过我应该如何更新访问API时返回的数据,因为事实并非如此。我试过了:-使用get("/api/playerlist", (req, res) -> players);
->它会正确返回玩家列表,但不会更新(这是预期的,我知道不是为修改数据而使用的GET方法)-使用post("/api/playerlist", (req, res) -> players);
->访问URL会出于任何原因返回404。-使用put("/api/playerlist", (req, res) -> players);
->仍然404-使用patch("/api/playerlist", (req, res) -> players);
->不变。
我以前从未使用过REST,我非常感谢我做错了什么或应该阅读的内容。
这里是代码示例
@Override
public void execute(CommandSender sender, String[] args) {
Map<String,String> arguments = new HashMap<>();
ArrayList<String> players = new ArrayList<String>();
if (args.length == 0) {
for (ProxiedPlayer p : main.getProxy().getPlayers()) {
players.add(p.getDisplayName());
}
get("/api/playerlist", (req, res) -> players);
}
似乎您在这里缺少了很多基础知识。 RESTful API具有不同种类的HTTP方法。 POST
,PUT
,GET
,DELETE
,PATCH
,TRACE
,OPTIONS
等。
您正在使用get("/api/playerlist", (req, res) -> players)
,所以您说请使用HTTP方法/api/playerlist
创建一个GET
的REST资源路径。这就是为什么它为其他所有方法都返回404的原因。
可以共享不同HTTP方法的资源路径,例如,
post("/api/playerlist", (req, res) -> players)
put("/api/playerlist", (req, res) -> players)
get("/api/playerlist", (req, res) -> players)
delete("/api/playerlist", (req, res) -> players)
然后,您将使用这4种HTTP方法来调用/api/playerlist
。当然,在哪种情况下使用哪种HTTP方法实际上是主观的(主要是)。如果将get()
更改为post()
,则post方法将不再返回404。
我建议您阅读最佳做法:https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api