Java Spark,无法使用PUT或PATCH更新数据

问题描述 投票:0回答:1

我正在尝试编写一个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);

    }

Result of the code above

java rest http
1个回答
0
投票

似乎您在这里缺少了很多基础知识。 RESTful API具有不同种类的HTTP方法。 POSTPUTGETDELETEPATCHTRACEOPTIONS等。

您正在使用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

© www.soinside.com 2019 - 2024. All rights reserved.