プラグインから外部 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 です。上限を超えるとエラーになります。
    • レスポンスボディは文字列のみ対応しています。画像などのバイナリデータは取得できません。
  • 自己証明書を使ったサーバーとの通信はできません。