首页 > 解决方案 > Java Spark,无法使用 PUT 或 PATCH 更新数据

问题描述

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

    }

上面代码的结果

标签: javaresthttp

解决方案


看来您在这里缺少很多基础知识。一个 RESTful API 有不同种类的 HTTP 方法。POST, PUT, GET, DELETE, PATCH, TRACE,OPTIONS等等。

您正在使用get("/api/playerlist", (req, res) -> players),所以您说请/api/playerlist使用 HTTP 方法创建一个 REST 资源路径GET。这就是为什么它为所有其他方法返回 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)

这将允许您/api/playerlist使用这 4 个 HTTP 方法进行调用。当然,在哪种情况下使用哪种 HTTP 方法实际上是主观的(大多数情况下)。如果您更改get()为,post()则 post 方法将不再返回 404。

我建议您阅读最佳实践:https ://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api


推荐阅读