通过 API PUT 请求更新帖子

为了确认理解,Discourse API 文档提到了这种结构…

{
"post[raw]": "string",
"post[raw_old]": "string",
"post[edit_reason]": "string",
"post[cooked]": "string"
}

在我尝试之前,这是否意味着,或者说,这具体是什么意思?

是指 {post: {raw: ..., raw_old: ... }} 吗?

还是仅仅指 {raw: "", raw_old: ""...}

另外,raw_old 是什么?文档仅说明每个元素都是我要 PUT 到 JSON 主体中的“字符串”。

我只是想在帖子顶部添加一行(该帖子最初是由一个机器人创建的),我们需要在其中添加一个指向另一个网站的链接。注意,我们的目标是将第一段显示在分类标题下方,或者在 cooked

元素中显示(该元素定义在分类标题正下方)。

希望这能说明清楚。如果不清楚,请让我澄清。

我目前不太确定 raw_old 的用途,但你只需使用 raw 字段,它将会替换整个帖子。因此,在你的代码中,你可以先获取想要编辑的帖子,在顶部添加你的内容,然后使用 raw 字段更新帖子。

通过在你的网站上实时编辑帖子并检查浏览器调用,了解 Discourse 是如何实现的,可能会有所帮助:

discourse_api gem 也是通过这种方式实现的:

我有个问题想确认一下:您指的是与 Discourse API Docs 中定义的文档不同的内容吗?这倒挺有意思……不过我目前只是依据 API 文档来操作的。

我的目标很简单:只需在分类名称下方添加一条评论和一个链接。我认为 Discourse 会从“关于……

根据上述内容以及我的尝试,无法使用 API 文档中提到的 “cooked” 字段来更新帖子。不过,使用 “raw” 字段是可以实现的。我所有使用 “cooked” 的尝试都返回了错误,提示帖子无效,原因是内容少于 20 个字符,或者不是清晰的句子……

然而,使用 “raw” 字段还存在其他问题,我会在另一篇帖子中详细说明,因为这与当前问题没有直接关联。

感谢大家的支持。

API 文档 中存在一点出入:

文档中说明:使用 PUT /posts/{id}.json 并附带以下负载:

Content type: application/json

{
  "post[raw]": "string",
  "post[raw_old]": "string",
  "post[edit_reason]": "string",
  "post[cooked]": "string"
}

但实际上,该格式仅在 PUT /posts/{id}Content-Type: application/x-www-form-urlencoded 时有效。

PUT /posts/{id}.json 的正确负载应为:

Content type: application/json

{
  "post": {
      "raw": "string",
      "raw_old": "string",
      "edit_reason": "string",
      "cooked": "string"
    }
}

只需提供 raw 参数即可替换整个帖子。

是的,谢谢。我在尝试了几次 Postman 请求并自行测试后意识到了这一点……此外,在我的尝试中,“cooked” 似乎没有任何作用……而且我仍然不确定 “raw_old” 是什么。

今天有人给我分配了这个任务。也许可以取消分配 :slight_smile:

无论如何,文档现在是正确的:https://docs.discourse.org/#tag/Posts/operation/updatePost