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는 무엇인가요? JSON 바디에 PUT해야 하는 각 요소가 "string"이라는 것만 나와 있을 뿐입니다.

저는 단순히 게시글 상단에 한 줄을 추가하려는 것입니다(해당 게시글은 처음에 봇에 의해 생성되었습니다). 다른 사이트로의 링크를 추가해야 하는 부분이 있습니다. 또한, 첫 번째 단락이 카테고리 제목 아래에 표시되도록 하거나, 카테고리 제목 바로 아래에 정의된 cooked

요소에 표시되도록 하는 것이 목표입니다.

이해가 되셨으면 좋겠습니다. 만약 그렇지 않다면 설명을 요청해 주세요.

현재 raw_old 필드의 용도가 정확히 무엇인지 확실하지 않지만, raw 필드를 사용하면 게시글 전체가 대체됩니다. 따라서 코드에서는 수정하려는 게시글을 가져온 뒤, 맨 위에 원하는 줄을 추가하고, raw 필드를 사용하여 게시글을 업데이트하면 됩니다.

Discourse가 어떻게 처리하는지 확인하는 데 도움이 될 수 있습니다. 사이트에서 게시글을 실시간으로 편집한 후 브라우저 호출을 검사해 보세요:

discourse_api 지엄도 동일한 방식으로 작동합니다:

이 부분에 대해 질문이 있는데, Discourse API Docs 에 정의된 것과 다른 문서를 말씀하시는 건가요? 그렇다면 흥미롭네요… 하지만 저는 API 문서에만 의존하고 있습니다.

제 단순한 목표는 카테고리 이름 아래에 댓글 + 링크를 추가하는 것입니다. Discourse가 "About … " 토픽의 첫 번째 게시물에서 가져온다고 생각하는데,

… 요소에 무엇이 삽입되는지 또는 제 게시물이 그곳에 나타나게 하려면 무엇을 해야 하는지 찾고 있습니다. 제 설명이 이해되시나요?

위 내용과 직접 시도해 본 결과, 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.