プラグインから外部 API を実行する

目次

プラグインから外部 API を実行する

プラグインから外部サービスのAPIを実行します。
このAPIを利用すると、クロスドメイン制約を回避して、外部APIにリクエストを送信できます。

認証情報など秘匿する情報を付与して外部APIを実行する場合は、APIを実行する前に、必要な情報をあらかじめプラグインに保存します。
プラグインに情報を保存、取得する方法は、次のページを参照してください。

関数

PC/モバイル

kintone.plugin.app.proxy(pluginId, url, method, headers, data, successCallback, failureCallback)

引数

引数 必須 説明
pluginId 文字列 必須 API を実行するプラグインの プラグイン ID
url 文字列 必須 実行する API の URL
method 文字列 必須 API の実行に使用する HTTP メソッド
次のいずれかの値を指定します。
  • GET
  • POST
  • PUT
  • DELETE
headers オブジェクト 必須 リクエストヘッダー
実際のリクエストヘッダーには、headersに指定したパラメーターに加えて、 外部 API の実行に必要な情報をプラグインへ保存する APIを使用してプラグインに保存したパラメーターも送信されます。
何も指定しない場合は{}を指定します。
data オブジェクトまたは文字列 必須 リクエストボディ
実際のリクエストボディには、dataに指定したパラメーターに加えて、 外部 API の実行に必要な情報をプラグインへ保存する APIを使用してプラグインに保存したデータも送信されます。
指定した値は、methodが「POST」または「PUT」のときだけ利用されます。
「GET」または「DELETE」の場合には、URL のクエリ文字列としてパラメーターを指定してください。
successCallback 関数 省略可 リクエストが完了したあとに実行する関数
関数の引数には、次の3つの情報が渡されます。
  • 第 1 引数:レスポンスボディ(文字列)
  • 第 2 引数:ステータスコード(数値)
  • 第 3 引数:レスポンスヘッダー(オブジェクト)
省略した場合は kintone.Promiseオブジェクトが返り、上記のレスポンスボディ、ステータスコード、レスポンスヘッダーが格納された配列で解決されます。
failureCallback 関数 省略可 リクエストが失敗した場合に実行する関数
関数の引数には、実行した API のレスポンスボディ(文字列)が渡されます。
省略した場合は kintone.Promiseオブジェクトが返り、実行した API のレスポンスボディ(文字列)で棄却されます。

戻り値

successCallbackを指定した場合、戻り値はありません。
引数のsuccessCallbackを省略した場合は、 kintone.Promiseオブジェクトが返ります。

利用できる画面

PC
  • レコード一覧画面
  • レコード詳細画面
  • レコード追加画面
  • レコード編集画面
  • レコード印刷画面
  • グラフの画面
モバイル
  • レコード一覧画面
  • レコード詳細画面
  • レコード追加画面
  • レコード編集画面
  • グラフの画面

サンプルコード

コールバックを使った記述方法
1
2
3
4
5
6
7
kintone.plugin.app.proxy('mjjfipoklghomcgafnajfibfgllhpocm', 'https://api.example.com', 'GET', {}, {}, (body, status, headers) => {
  // success
  console.log(status, JSON.parse(body), headers);
}, (error) => {
  // error
  console.log(error);
});
kintone.Promise オブジェクトを使った記述方法
1
await kintone.plugin.app.proxy('mjjfipoklghomcgafnajfibfgllhpocm', 'https://api.example.com', 'GET', {}, {});

補足

保存した情報がリクエストに加わる条件
  • このAPIを使ったリクエストでは、次の条件をすべて満たすときに、プラグインへ保存した情報がリクエストに追加されます。

    • アプリが同一
    • プラグインが同一
    • HTTPメソッドが同一
    • 実行するAPIのURLが前方一致する *1
      URLの大文字と小文字は区別されます。
  • プラグインに複数の設定を保存した場合は、APIの実行時に指定したURLと、より多くの文字が一致するURLを指定している設定が優先されます。
    たとえば、 外部 API の実行に必要な情報をプラグインへ保存する APIで、次のようなURLやリクエストヘッダーを指定したとします。

    • 設定その1
      • URL:https://api.example.com/
      • ヘッダー:{ "Content-Type": "application/x-www-form-urlencoded" }
    • 設定その2
      • URL:https://api.example.com/foo/
      • ヘッダー:{ "Content-Type": "application/json" }

    次の値を指定して、このAPIを実行します。

    • URL:https://api.example.com/foo/operate.json
    • ヘッダー:{}

    このとき、APIの実行時に送信されるリクエストのヘッダーは、{ "Content-Type": "application/json" }です。

*1

たとえば、それぞれの関数で次のURLを指定した場合には、URLが前方一致するため、プラグインへ保存した情報がリクエストに加わります。

^

外部 API を実行するときに送信されるリクエストヘッダー

外部APIを実行するときに指定されるリクエストヘッダーは、このAPIで指定されたリクエストヘッダーに、 保存した情報がリクエストに加わる条件を満たした設定情報のリクエストヘッダーを付加したものです。

たとえば、それぞれのAPIのリクエストヘッダーを次のように指定したとします。

この場合、次のリクエストヘッダーが実際に送信されます。

1
2
3
4
{
  "k1": "v1",
  "k2": "v2"
}
外部 API を実行するときに送信されるリクエストボディ
HTTP メソッドが POST/PUT の場合

このAPIで指定したリクエストボディに、 保存した情報がリクエストに加わる条件を満たした設定情報のデータを付加したものとなります。
これは、リクエストヘッダーと同じです。
ただし、このAPIで指定されたリクエストボディの型がオブジェクトの場合のみ、設定情報のデータを付加し、文字列の場合は付加しません。

HTTP メソッドが GET/DELETE の場合

このAPIで指定した外部APIのURLのクエリ文字列の末尾に、 保存した情報がリクエストに加わる条件を満たした設定情報のデータをクエリ文字列として付加します。
クエリ文字列の開始を表す?が含まれていない場合は、自動で付加されます。

たとえば、それぞれのAPIのリクエストボディやリクエストパラメーターを次のように指定したとします。

この場合、次のURLにリクエストが送信されます。
https://api.example.com?k=v&k1=v1&k2=v2

複数の設定情報でキーが重複する場合

複数の設定情報が次の条件をどちらも満たす場合、外部APIのURLの一致した長さの長いものを優先します。

HTTPメソッドがPOST/PUTの場合は、リクエストヘッダーに指定した値の型がオブジェクトの場合で、GET/DELETEの場合はクエリ文字列に適用されます。

たとえば、それぞれのAPIのリクエストヘッダーを次のように指定したとします。

この場合、次のリクエストヘッダーが実際に送信されます。

1
2
3
4
5
{
  "k1": "v1",
  "k2": "v2-1",
  "k3": "v3"
}
設定情報とこの API で指定したリクエストヘッダーやリクエストボディのキーが重複する場合

設定されたリクエスト情報から採用したリクエストヘッダーのキーがこのAPIで指定するリクエストヘッダーにも含まれる場合、前者の値を優先します。
HTTPメソッドがPOST/PUTの場合のリクエストボディ(型がオブジェクトの場合のみ)も同様です。
GET/DELETEの場合は、キーの重複をチェックしません。

たとえば、それぞれのAPIのリクエストヘッダーを次のように指定したとします。

この場合、次のリクエストヘッダーが実際に送信されます。

1
2
3
4
5
{
  "k1": "v1",
  "k2": "v2",
  "k3": "v3"
}

注意事項

  • 存在しないサーバーをurlに指定した場合、ステータスコード「503」(DNS Cache Missing)のエラーが返ります。
  • IPアドレス制限を設定している場合、このJavaScript APIを使って同一ドメインの別アプリに対しkintone REST APIを実行するには、kintoneのIPアドレスを許可してください。
    IPアドレスの詳細は、 cybozu.com が使用するドメインと IP アドレス (External link) を参照してください。
    ただし、外部APIを実行するAPIを通じてすべてのkintone環境から自由にアクセスできるようになるため、セキュリティの観点から推奨していません。 同一ドメインに対するリクエストは、 kintone REST API リクエストを送信する APIを使用してください。
  • このAPIを使って外部のAPIを実行しても、実行したAPI先で発行されるべきCookieは、自動で発行されません。
  • HTTPメソッドにPOSTまたはPUTを指定した場合、「Content-Length」と「Transfer-Encoding」ヘッダーは自動で付加されます。
    リクエストするときに明示的に指定すると、エラーが発生します。

制限事項

  • 実行する外部APIのレスポンスに関する制限は、次のとおりです。
    • レスポンスヘッダーの上限は、100行で、1行あたりの最大長は8,180bytesです。
    • レスポンスボディの上限は10MBです。上限を超えるとエラーになります。
    • レスポンスボディは文字列のみ対応しています。画像などのバイナリデータは取得できません。
  • 自己証明書を使ったサーバーとの通信はできません。