Rest HTTP补丁在请求期间更新的字段是否比显式提供的字段多

Rest HTTP补丁在请求期间更新的字段是否比显式提供的字段多,rest,http,Rest,Http,我想知道是否可以设计一个RESTful API来玩tic-tac-toe。我想为用户提供创建新游戏、移动以及请求AI在游戏中玩的能力 目前,我有 POST /users/{id}/games With Response { "id": 1, "board": "_________", "nextPlayer": "X", "movesLeft": [0, 1, 2, 3, 4, 5, 6, 7, 8], ... } 提供如下“放置移动”选项是否有意义:

我想知道是否可以设计一个RESTful API来玩tic-tac-toe。我想为用户提供创建新游戏、移动以及请求AI在游戏中玩的能力

目前,我有

POST /users/{id}/games

With Response
{
    "id": 1,
    "board": "_________",
    "nextPlayer": "X",
    "movesLeft": [0, 1, 2, 3, 4, 5, 6, 7, 8],
    ...
}
提供如下“放置移动”选项是否有意义:

PATCH /users/{id}/games/1
{
    "board": "____X____"
}
如果我发出一个补丁请求,只提供新的线路板,服务器是否可以保留该请求,从movesLeft属性中删除一个值,更改nextPlayer是谁,等等

补丁请求不包含所有需要更改的内容,但服务器根据业务逻辑进行更改,这是RESTful吗?

另外,公开端点是否是RESTful的:

POST /users/{id}/games/1/ai/moves
它基本上会在棋盘上移动,相应地更改所有内容,返回303 See Other,并使响应标头中的
位置
标头指向更改的游戏资源-/甚至可能会立即返回更改的游戏/

如果有任何参考资料、资料来源、博客帖子、示例,我将不胜感激

补丁请求不包含所有需要更改的内容,但是服务器根据业务逻辑更改它,这是RESTful吗

大体上,是的。HTTP是关于消息语义的协议(请参阅),意思是“让你的副本看起来像我的副本”

您希望对响应稍微小心一点,不要暗示请求的更改“按原样”被接受,如果事实上服务器也对文档进行了未请求的更改。换句话说,客户机将拥有其在内存中的资源表示,我们希望在响应中明确该表示是否仍然准确

公开一个端点
POST/users/{id}/games/1/ai/moves
是否是RESTful的,它基本上在板上移动,相应地更改所有内容,返回303请参见其他

有点弱。问题是。如果我是一个通用客户机,当我成功地发布到
/users/{id}/games/1
时,我怎么知道我的缓存表示的
/users/{id}/games/1/ai/moves
——没有什么可以告诉我这两个资源是相互关联的


我们通常会在
/users/{id}/games/1
上发布一条“让ai移动”消息。现在,通用客户机以及任何中间组件都会知道游戏资源本身的表示已经更改,应该更新。

这句话不是说如果我返回303和位置头,缓存必须使游戏状态无效吗。“当收到响应不安全请求方法的非错误状态代码时,缓存必须使有效请求URI(RFC7230)以及位置和内容位置响应标头字段(如果存在)中的URI无效。”你完全正确--等我有时间的时候,我会修改或删除这个答案。