# Discourse API 시스템 2개의 목적

**URL:** <https://meta.discourse.org/t/the-purpose-of-the-2-discourse-api-systems/155253>\
**Category:** Product Support\
**Created:** [6월 18, 2020, 5:40오후 UTC](https://meta.discourse.org/t/the-purpose-of-the-2-discourse-api-systems/155253 "2020-06-18T17:40:09Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![JQ331](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@JQ331](https://meta.discourse.org/u/JQ331)\
**Post date:** [6월 18, 2020, 5:40오후 UTC](https://meta.discourse.org/t/the-purpose-of-the-2-discourse-api-systems/155253/1 "2020-06-18T17:40:09Z")

</div>

Discourse API 인증 시스템 두 가지가 언제, 어떤 목적으로 작동하는지 명확히 하고 싶습니다.

> [@david](#):
>
> 혼란을 줄 수 있는 두 가지 다른 API 인증 시스템이 있습니다.

([여기](https://meta.discourse.org/t/api-cors-headers-incorrect/135155/3)에서 가져옴). 제 현재 이해를 바탕으로 정리하면 다음과 같습니다:

* * *

\*\*[관리자 API](https://docs.discourse.org/)\*\*는 때로는 JSON API라고도 불리며, Discourse 포럼과 상호작용하기 위해 API 호출을 수행할 때 다음 두 가지 경우에 사용할 수 있습니다:

1. 해당 호출에 인증이 필요하지 않은 경우, 또는
2. 인증이 필요하지만, Discourse 포럼에 대한 직접적인 제어 권한이 있어 포럼 및/또는 별도 앱에서 API 호출을 수행하기 위해 API 키를 수동으로 생성할 수 있는 경우.

반면, \*\*[사용자 API](https://meta.discourse.org/t/user-api-keys-specification/48536)\*\*는 Discourse 포럼(또는 포럼들)과 상호작용하되, 해당 상호작용에 인증이 필요하고, 상호작용하려는 포럼(또는 포럼들)을 **제어하지 않는** 경우에 사용하도록 설계되었습니다.

다른 표현을 하자면, 관리자 API는 _포럼을 제어하는_ 경우를 위해, 사용자 API는 _포럼을 제어하지 않는_ 경우를 위한 것입니다.

**이것이 올바른 이해인가요?**

예를 들어, @david의 [여기](https://meta.discourse.org/t/api-cors-headers-incorrect/135155/3) 설명에 따르면, 관리자 API는 JavaScript 클라이언트와 함께 사용하도록 의도되지 않았습니다. 하지만 제 생각에는 JavaScript 클라이언트를 사용하는 앱의 소유자가 포럼도 제어하는 한(즉, 별도 앱의 소유자와 포럼의 소유자가 동일한 경우), JavaScript 클라이언트와 함께 관리자 API를 사용하는 데 문제가 없을 것입니다. 맞나요?

그렇게 작동한다고 생각합니다. 별도 앱에서 Discourse 사이트의 관리자 API에 대한 호출을 수행하려면, 백엔드(서버 사이드)에서 그 호출을 수행할 수 있다고 믿습니다. 백엔드에서 수행하지 않고 클라이언트 사이드에서 수행하면 CORS 제한에 부딪힐 수 있습니다. 그런 경우, admin/site\_settings/security/ → "cors origins"에서 별도 앱의 도메인을 화이트리스트에 추가할 수 있습니다.

아래에는 이러한 API가 어떻게 작동하는지에 대한 추가 세부 정보도 포함했습니다. 여전히 가지고 있는 다른 질문이 하나 있습니다: 관리자 API의 API 키를 설정할 때, **사용자 수준으로 "All Users"를 사용하는 것이 적절한 경우는 언제인가요?**

상세 정보:

> **관리자 API**
>
> _기본 사항_
> 
> 이것은 docs.discourse.org에 설명된 API입니다. 때로는 JSON API라고도 불립니다.
> 
> 이 API의 엔드포인트와 상호작용함으로써, [여기](https://meta.discourse.org/t/how-to-reverse-engineer-the-discourse-api/20576)에 설명된 방법을 사용하여 Discourse 사이트에서 직접 수행할 수 있는 거의 모든 작업을 수행할 수 있습니다.
> 
> 일부 엔드포인트는 인증을 요구합니다. 예를 들어, 특정 그룹의 세부 정보를 가져오기 위해 API를 사용하려는 경우(엔드포인트: `[your-forum]/groups/[group-name].json`), 그 그룹이 멤버에게만 표시되는 경우, 해당 엔드포인트에 대한 호출을 멤버 중 한 명의 "대리"로 수행해야 합니다.
> 
> 적절한 인증을 사용하여 API 호출을 하려면, `[your-forum]/admin/api` → New API Key에서 API 키를 생성해야 합니다. 이때 해당 키의 사용자 수준으로 "Single User"를 선택하고, 리소스(예: 그룹 정보)를 볼 권한이 있는 사용자를 선택합니다.
> 
> 그 후 API 호출을 수행할 때, 헤더에 키를 `Api-Key`로, 사용자의 사용자명을 `Api-Username`으로 포함해야 합니다.
> 
> API 키를 설정할 때 "All Users"를 선택하는 옵션도 있습니다. 위의 제 질문에 따라, 이것이 언제 적절한지, 예를 들어 단일 사용자를 선택하고 그 사용자가 관리자(A)인 경우와 어떻게 다른지 확실하지 않습니다.
> 
> _사용 시점_
> 
> Discourse 앱 "내부"에서 관리자 API를 사용할 수 있습니다. 즉, 다음 곳에서 관리자 API와 상호작용할 수 있습니다: **(i)** _[your-forum]/admin/customize_의 각 테마에 대한 CSS/HTML 편집 대시보드에서, **(ii)** Discourse 사이트에 통합하는 테마에서, 그리고 **(iii)** Discourse 사이트에 통합하는 플러그인에서.
> 
> Discourse 포럼을 제어하여 별도 앱이 사용할 API 키를 포럼을 통해 수동으로 생성할 수 있다면, 별도 앱에서도 관리자 API를 사용할 수 있습니다.
> 
> **위의 제 질문에 따라, 확인받고 싶은 이해 내용입니다.**

> **사용자 API**
>
> 이 API의 세부 사항은 여기에서 설명됩니다: [User API keys specification](https://meta.discourse.org/t/user-api-keys-specification/48536)
> 
> 사용자 API가 존재하는 이유는, 관리자 API가 포럼과 별개의 _어떤_ 사이트나 앱에서도 접근할 수 있는 일반 API로 사용하도록 의도되지 않았기 때문이라고 생각합니다.
> 
> 이를 명확히 하기 위해, 별도 앱이 Discourse 포럼과 상호작용할 수 있는 두 가지 다른 시나리오가 있습니다:
> 
> **시나리오 1: 직접 연결 없음** : Discourse 포럼과 연결되지 않은 개발자가 포럼과 상호작용하는 앱을 생성합니다. 예를 들어, 포럼의 관리자가 아니거나 포럼 관리자와 다른 방식으로 연결되지 않은 개발자가 여러 Discourse 사이트에서 몇 가지 사실이나 정보를 가져오기 위해 앱을 만들고자 하는 경우입니다.
> 
> 이 시나리오에서, Discourse 포럼 관리자는 연결되지 않은 개발자에게 API 키를 수동으로 생성하여 제공할 것입니다. 따라서 관리자 API는 적절하지 않습니다.
> 
> 따라서, YouTube와 같은 많은 사이트가 제3자 개발자가 만든 앱에서 YouTube와 상호작용할 수 있도록 [API](https://developers.google.com/youtube/v3)를 제공하는 것처럼, Discourse 사용자 API는 제3자 앱이 포럼과 상호작용할 수 있는 방법입니다. 이때 앱(데스크톱, 모바일 폰)을 사용하는 클라이언트가 포럼에 대한 제한된 접근 권한을 부여하는 API 키를 생성합니다.
> 
> **시나리오 2: 직접 연결된 앱** : 포럼의 관리자(또는 관리자와 연결된 개발자)가 포럼과 상호작용하기를 원하는 별도 앱과 연결되어 있습니다.
> 
> 예를 들어, 관리자가 Discourse 기능이 아닌 별도 기능이 있는 별도 앱이 있기를 원하고, 그 별도 앱의 사용자와 포럼 사용자 사이에 중복이 있기를 원할 수 있습니다. 이 경우, 관리자는 실제로 직접(포럼 관리자 대시보드를 통해 수동으로) API 키를 생성하여 별도 앱에 제공할 수 있으며, 이렇게 하면 별도 앱이 관리자 API를 활용할 수 있습니다.

---

_[View the full topic](https://meta.discourse.org/t/the-purpose-of-the-2-discourse-api-systems/155253)._
