質問
アカウントにインストールされているカスタムアプリから別のアカウントのAPIにAPIリクエストを実行し、「error is not a proxyable URI」というメッセージを受け取らないようにするにはどうすればよいですか?
回答
client.requestのデフォルトの動作では、リクエストはZendeskのプロキシレイヤー(あるアカウントから別のアカウントへのHTTPリクエストをブロックするゲートウェイ)を通じて送信されます。その結果、403はプロキシ可能なURI応答ではありません。
アカウントのカスタムアプリから別のZendeskインスタンスのAPIにclient.requestを実行するには、request optionsオブジェクトにcors: trueを渡します。これにより、リクエストはZendeskのプロキシレイヤーをバイパスできます。
// make a request from a custom app in one Zendesk to the API of another Zendesk
function newRequest(){
var options = {
url: 'https://subdomain.zendesk.com/api/v2/....',
headers: { "Authorization": "Bearer OAUTH_TOKEN"},
type: 'POST',
data: JSON.stringify({my:"json", values:"go here"}),
contentType: "application/json",
cors: true
}
client.request(options).then(
function(response) {
console.log(response);
});
}
クライアント側とサーバー側の要求に関する注意
各Zendesk APIエンドポイントは、Cross-Origin Resource Sharing(CORS)を実装しています。アプリからの要求がクライアント側から送信された場合、CORS応答はOAuthを使用しない限り失敗します。GETメソッドのみが必要な場合は、特定のリソースへの読み取り専用アクセス用にOAuthのスコープを設定し、クライアント側で実装します。
アプリの他のZendesk APIへのリクエストがPUTメソッドまたはPOSTメソッドを使用してデータを書き込むものである場合、どちらのオプションもネットワークトラフィックにトークンを公開するため安全ではありません。ほとんどのワークフローでは、安全な設定を使用してトークンのセキュリティ上の問題を防止できます。
セキュア設定は、リクエストがZendeskのプロキシレイヤーを通過する必要があるため、このワークフローでは機能しません。データの書き込みにアプリが必要な場合は、他のZendeskのAPIへのリクエストがアプリに戻され、サーバー側で処理されるサーバー側のソリューションを検討してください。
翻訳に関する免責事項:この記事は、お客様の利便性のために自動翻訳ソフ トウェアによって翻訳されたものです。Zendeskでは、翻訳の正確さを期すために相応の努力を払っておりますが、翻訳の正確性につ いては保証いたしません。
翻訳された記事の内容の正確性に関して疑問が生じた場合は、正式版である英語の記事 を参照してください。