Discourse API 認証システムの 2 つが、いつ、どのような目的で機能するのかを明確にしたいと考えています。
(こちら より)。これが私の現在の理解です:
管理 API(JSON API とも呼ばれることがあります)は、Discourse フォーラムと対話するために API 呼び出しを行う際に使用できます。ただし、以下のいずれかの条件を満たす必要があります:
- その呼び出しに認証が不要である、または
- その呼び出しに認証が必要だが、Discourse フォーラム自体も直接制御できるため、フォーラムや別アプリが API 呼び出しを行うために使用できる API キーを手動で生成できる。
一方、ユーザー API は、Discourse フォーラム(または複数のフォーラム)と対話したいが、その対話には認証が必要であり、かつ対話対象のフォーラムを制御していない場合に使用されます。
別の言い方をすれば、管理 API は「対話するフォーラムを制御している」場合向け、ユーザー API は「対話するフォーラムを制御していない」場合向けです。
これは正しいでしょうか?
例えば、@david のこちらの説明では、管理 API は JavaScript クライアントでの使用を想定していないとされています。しかし、JavaScript クライアントを使用するアプリの所有者がフォーラムも制御している限り、管理 API を JavaScript クライアントで使用しても問題ないと考えています。(つまり、別アプリの所有者とフォーラムの所有者が同一である場合です。)合っていますか?
私はそれが仕組みだと考えています。別アプリから Discourse サイトに関する管理 API への呼び出しを行いたい場合、バックエンド(サーバー側)から呼び出すことができます。バックエンドからではなくクライアント側から呼び出す場合、CORS の制限に直面する可能性があります。その場合は、管理画面の admin/site_settings/security/ → “cors origins” で別アプリのドメインをホワイトリストに登録できます。
以下に、これらの API の仕組みに関する詳細をまとめました。まだ疑問に思っている点があります:管理 API の API キーを設定する際、「全ユーザー」をユーザーレベルとして設定するのは、どのような場合に適切なのでしょうか?
詳細情報:
管理 API
基本
これは docs.discourse.org で説明されている API です。JSON API とも呼ばれます。
この API のエンドポイントと対話することで、こちらで説明されている方法を用いて、Discourse サイト上で直接行えることのほぼすべてを実行できます。
特定のエンドポイントには認証が必要です。例えば、特定のグループの詳細を取得するために API を使用したい場合(エンドポイント:[your-forum]/groups/[group-name].json)、そのグループがメンバーにのみ表示される場合、そのメンバーの一人に「代理」して呼び出しを行う必要があります。
適切な認証を用いて API 呼び出しを行うには、[your-forum]/admin/api → New API Key で API キーを生成し、そのキーのユーザーレベルとして「単一ユーザー」を選択し、リソース(例えばグループ情報)を表示する権限を持つユーザーを選択する必要があります。
その後、API 呼び出しを行う際に、ヘッダーとして Api-Key にキーを、Api-Username にそのユーザーのユーザー名を含めます。
API キーを設定する際、「全ユーザー」を選択するオプションもあります。上記の質問に関連して、この設定が、単一のユーザー(例えば管理者)を選択する場合と比べて、どのような場合に適切なのかは確信が持てません。
使用时机
管理 API は、Discourse アプリ「内」から使用できます。つまり、管理 API と対話することは可能です:(i) [your-forum]/admin/customize 下の各テーマの CSS/HTML 編集ダッシュボードから、(ii) Discourse サイトに統合したテーマから、(iii) Discourse サイトに統合したプラグインから。
また、Discourse フォーラムを制御している場合、別アプリが使用する API キーをフォーラムを通じて手動で生成できるため、別アプリから管理 API を使用することも可能です。
上記の質問に関連して、これが確認したい理解です。
ユーザー API
この API の詳細については、こちらで説明されています:User API keys specification
ユーザー API が存在するのは、管理 API が、フォーラムとは別の「あらゆる」サイトやアプリがアクセスできる汎用 API として使用されることを想定していないためだと考えています。
明確にしておくと、別アプリが Discourse フォーラムと対話するシナリオは以下の 2 つがあります:
シナリオ 1:直接的な接続なし:Discourse フォーラムと何のつながりもない開発者が、フォーラムと対話するアプリを作成します。例えば、フォーラムの管理者でも、管理者と何らかのつながりもない開発者が、さまざまな Discourse サイトをポーリングして、それらに関する事実や情報を取得するアプリを作成する場合です。
このシナリオでは、Discourse フォーラムの管理者は、無関係な開発者に API キーを手動で生成して配布することはありません。したがって、管理 API は適切ではありません。
そのため、YouTube のように、第三者の開発者が作成したアプリを通じて YouTube と対話するために使用できる API を多くのサイトが持っているのと同様に、Discourse ユーザー API は、第三者のアプリがフォーラムと対話するための手段です。具体的には、アプリを使用するクライアント(デスクトップ、携帯電話など)が、フォーラムへの限定的なアクセス権を与える API キーを生成します。
シナリオ 2:直接接続されたアプリ:フォーラムの管理者(または管理者とつながりがある開発者)が、フォーラムと対話したい別アプリと接続しています。
例えば、管理者が、Discourse 以外の機能を持つ別アプリを用意し、そのアプリのユーザーとフォーラムのユーザーに重複させたい場合です。この場合、管理者は実際に直接(フォーラムの管理ダッシュボードを通じて手動で)API キーを生成し、それを別アプリに提供して使用させることで、別アプリが管理 API を利用できるようにします。