java - 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);
}
解决方案
看来您在这里缺少很多基础知识。一个 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
推荐阅读
- powershell - Powershell remove a range of lines from a text file
- c# - LINQ 语句以获取单个客户的最新订单
- swift - FCM iOS Push Notification 收不到任何通知
- mysql - 如何 db:setup mysql2 数据库?
- c# - 如何验证 SQL Server 存储过程中的 WHERE 表达式(识别 SQL 注入)
- android - EditText.toString() 不包含 onTextChanged 事件中的所有文本
- android - Android Studio - Room Persistence Library - 确保用户输入的主键在插入数据库之前是唯一的
- flutter - 如何设置红色星号 (*) 作为 Flutter 中的必填字段
- javascript - 尝试在javascript的帮助下使用键盘将焦点从一个锚标记移动到另一个
- rpy2 - rpy2-python 3.6.3 导入问题