이것이 오늘 https://{defaultHost}/invites/link.json API가 작동하지 않게 된 사실과 관련이 있나요?
확실하지 않아요. 그럴 수도 있겠네요. 이 엔드포인트에 대해 잘 모르거든요.
음, 이제 자동화 시스템에서 수백 통의 이메일이 실패하고 있습니다. https://{defaultHost}/invites/link 엔드포인트를 사용했는데, 갑자기 404 오류가 발생하기 시작했습니다. 문서를 확인해보니 엔드포인트가 https://{defaultHost}/invites/link.json으로 변경되었다고 나와 있습니다(.json이 추가된 형태). 하지만 이 변경 사항에도 불구하고 여전히 404 오류가 나고 있습니다.
어떻게 수정해야 할지 모르겠습니다. 우리 시스템으로 초대 링크를 전송하기 위해 링크를 생성해야 하는데, 오늘까지는 완벽하게 잘 작동하고 있었습니다.
또한, 해당 주소로 PUT 요청을 보내면 BAD REQUEST가 반환되지만, 존재하지 않는 주소로 PUT 요청을 보내면 NOT FOUND가 반환됩니다. 이것이 엔드포인트는 존재하지만 단순히 작동하지 않는다는 힌트인지 확신이 서지 않습니다.
제가 여러분이 호스팅해 주신 Discourse 인스턴스를 https://d.strumenta.community/ 에 가지고 있다는 점을 명확히 언급해야 할 것 같습니다.
이메일 초대와 링크 초대를 통합하면서 해당 API 엔드포인트가 https://{defaultHost}/invites.json으로 이동되었습니다.
알겠습니다. 그러면 문서가 최신이 아닌 것 같습니다.
이 엔드포인트는 초대 링크를 생성하지만 이메일을 보내지 않는 건가요?
문서에 따르면 /invites.json과 /invites/link.json의 차이는 이메일 전송 여부라고 되어 있거든요.
또한, /invites.json에 대한 요청이 BAD REQUEST로 반환되고 있습니다 → 내 실수였습니다. ’ 대신 "을 사용해야 합니다.
수정 후, 사용자에게 이메일이 발송되었다는 응답을 받게 되는데, 이를 방지하고 싶습니다:
API가 변경될 때 알림을 받고 현재 문서를 접근할 수 있으면 유용할 것입니다. 그렇지 않으면 갑자기 모든 것이 깨져 버리고 수정할 수 없게 됩니다…
가시성을 위해 여기에 추가합니다:
$ curl 'http://localhost:3000/invites.json' -X 'POST' \
-H "Api-Key: d5fc02c5f4efaafacc82e4ff3410ae283d1c5da68ac43430d5133aaf4785593f" \
-H "Api-Username: dan" \
-H "Content-Type: application/json" \
-d "{\"max_redemptions_allowed\":5}"
{"id":18,"link":"http://localhost:3000/invites/6f524dba4ced35ecae709a8614db3b05","redemption_count":0,"max_redemptions_allowed":5,"custom_message":null,"updated_at":"2021-03-10T15:44:44.259Z","expires_at":"2021-04-09T15:44:44.258Z","expired":false,"topics":[],"groups":[]}%
API 문서를 업데이트할 예정입니다. 해당 사항을 알려주셔서 감사하며, 불편을 드려 죄송합니다.
create가 같은 사용자의 요청인 경우 에러를 던지는 대신 기존 초대 링크를 반환하면 좋겠습니다. 422 에러 응답은 꽤 일반적인 메시지라 테스트가 왜 실패하는지 파악하는 데 오래 걸렸습니다.
이메일 주소로 기존 초대장을 가져오는 PR을 추가했습니다: FEATURE: Retrieve an existing link only invite - Pull Request #12575 - discourse/discourse - GitHub
이메일이 전송되지 않도록 방지하는 미문서화 플래그 skip_email을 발견했습니다. 이 플래그를 사용하면 링크만 가져올 수 있습니다. 요청 본문에 이메일 주소와 함께 전달하면 됩니다!
{
"email": "someone@test.com",
"skip_email": "true"
}
간단한 테스트를 해본 결과, 이 플래그를 사용해 이메일 링크를 생성한 후에는 다시 자동으로 이메일을 보내는 용도로 사용할 수 없다는 점에 유의해야 합니다. skip_email을 사용한 후에는 emailed가 항상 false를 반환합니다.
Discourse API Docs 문서에 invites/retrieve.json이 없는 이유가 있을까요? 아니면 제가 뭘 놓치고 있는 건가요.
외부 데이터베이스에 존재하는 이메일 주소를 초대하고 싶은데, 조건은 a) 이미 계정이 없는 경우, b) 이미 초대된 적이 없는 경우입니다. 이 과정은 주기적으로 실행될 예정인데, 초대를 받은 지 오래되었음에도 아직 응답하지 않은 사람들을 스팸으로 괴롭히고 싶지 않기 때문입니다. 커밋 내용을 보면 invites/retrieve.json이 (b)를 파악하는 데 적합한 방법인 것 같습니다.
API 문서에 빠져 있는 건 단순한 실수일 가능성이 높아요. 추가되도록 노력하겠습니다.
현재 discourse core에 의해 생성되거나, 적어도 그에 대해 테스트된다면 좋겠습니다.
(아마도 1시간이 아니라 2일 정도 걸릴 것 같은, 꽤 단순한 방법이 있을 것 같습니다!) 스펙을 실행하여 이를 테스트하는 방법이 있겠죠. 아, 아니면 https://redocly.com/ 이 바로 그런 일을 하는 도구일까요?
제 사용 사례에 정말 유용할 기능은 모든 사용자가 초대한 모든 초대장을 가져오는 방법입니다. “모든 사용자”가 문제라면, 제 사용 사례에서는 상태와 관계없이 모든 초대장을 가져오는 것만으로도 충분합니다.
현재 이 메서드를 사용하려면 각 가능성을 하나씩 폴링해야 하는데, 테이블에 실제로는 몇 개뿐인 경우가 많은데도 이메일 주소가 1,000개까지 될 수 있습니다.
How to get a password from database? - #3 by pfaffman 링크에 따르면 기본적으로 데이터베이스가 노출되지 않으므로, 외부 프로세스에서 코드를 통해 데이터베이스에 직접 접근하는 것은 불가능합니다. 적어도 제 현재 구현 방식으로는 그렇습니다 – 그리고 어떤 경우든 데이터베이스 포트 자체를 노출하는 것은 좋은 생각이 아닐 수도 있습니다.
외부 데이터베이스에 있는 이메일 주소에 대한 초대와 그룹 가입을 자동화하려고 합니다.
그리고 두 번 모두 데이터 탐색기 플러그인을 언급했는데, 이것이 바로 여기의 답이 될 수 있습니다. 다만, Run Data Explorer queries with the Discourse API 를 통해 이 작업을 수행할 수 있다는 점을 알아두는 것이 좋습니다.
아 네, 그게 제가 놓치고 있던 핵심이었네요 – 알려주셔서 감사합니다


