外部の API を実行する

目次

外部の API を実行する

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

関数

garoon.base.proxy.send(proxyCode, url, method, headers, data, successCallback, failureCallback)

利用できるバージョン

  • クラウド版Garoon
  • パッケージ版Garoonバージョン4.6以降

引数

パラメーター名 必須 説明
proxyCode 文字列 必須 プロキシ API の設定画面で設定したプロキシコード
プロキシ API の設定方法は、プロキシ API の設定( クラウド版 (External link) パッケージ版 (External link) )を参照してください。
url 文字列 必須 実行する API の URL
実行する API の URL には、urlに指定した URL に加えて、プロキシ API の設定画面で設定した「パラメーター」も付与されます。
詳細は、 外部 の API を実行したときに送信されるデータ - リクエスト URLを参照してください。
method 文字列 必須 API の実行に使用する HTTP メソッド
  • GET
  • POST
  • PUT
  • PATCH *1
  • DELETE
headers オブジェクト 必須 リクエストヘッダー
何も指定しない場合は、{}を指定します。
実際のリクエストヘッダーには、headersに指定したパラメーターに加えて、プロキシ API の設定画面の「ヘッダー」で設定した値も送信されます。
詳細は、 外部 の API を実行したときに送信されるデータ - ヘッダーを参照してください。
data オブジェクト、または文字列 必須 リクエストボディ
何も指定しない場合は、{}を指定します。
値を文字列で指定すると、クエリ文字列として送信されます。
HTTP メソッドに POST/PUT/PATCH *1 を指定したときだけ送信されます。
HTTP メソッドが GET や DELETE のリクエストで、リクエストボディを指定したい場合には、urlのクエリ文字列として指定してください
実際のリクエストボディには、headersに指定したパラメーターに加えて、プロキシ API の設定画面の「リクエストボディ」で設定した値も送信されます。
詳細は、 外部 の API を実行したときに送信されるデータ - リクエストボディを参照してください。
successCallback 関数 省略可 リクエストが完了したあとに実行するコールバック関数
コールバック関数の引数には、次の情報が渡されます。
  • 第 1 引数:レスポンスボディ(文字列)
  • 第 2 引数:ステータスコード(数値)
  • 第 3 引数:レスポンスヘッダー(オブジェクト)
省略すると、 garoon.Promiseオブジェクトが返り、レスポンスボディ、ステータスコード、レスポンスヘッダーが格納された配列で解決されます。
failureCallback 関数 省略可 リクエストが失敗した場合に実行するコールバック関数
コールバック関数の引数には、プロキシ API のレスポンスボディ(文字列)が渡されます。
省略すると、 garoon.Promiseオブジェクトが返り、プロキシ API のレスポンスボディ(文字列)で棄却されます。

*1 クラウド版のみ ^

戻り値

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

利用できる画面

  • ポップアップ画面を除くすべての画面

サンプルコード

コールバックを使った記述方法
1
2
3
4
5
6
7
garoon.base.proxy.send('SampleAPI', 'https://api.example.com', 'GET', {}, {}, (body, status, headers) => {
  // success
  console.log(status, JSON.parse(body), headers);
}, (error) => {
  // error
  console.log(error); // proxy APIのレスポンスボディ(文字列)を表示
});
garoon.Promise オブジェクトを使った記述方法
1
await garoon.base.proxy.send('SampleAPI', 'https://api.example.com', 'GET', {}, {});

補足

外部 の API にリクエストが送られる条件

外部APIを実行に対し、実際にリクエストが送られるときの条件は、次のとおりです。

  • proxyCodeの値が、プロキシAPIの設定画面の「プロキシコード」と一致している。
  • methodの値がプロキシAPIの設定画面の「メソッド」と一致している。
  • urlの値がプロキシAPIの設定画面の「URL」と前方一致している。
    たとえば、次のような場合には、URLが前方一致していると判断されます。
    • プロキシAPIの設定画面の「URL」:https://api.example.com/
    • このAPIに指定したurlの値:https://api.example.com/operate.json
外部 の API を実行したときに送信されるデータ
リクエスト URL

プロキシAPIの設定画面で設定した「パラメーター」は、このAPIで指定したurlに付与されます。

たとえば、プロキシAPIの設定画面と、このAPIで、それぞれ次のように設定したとします。

  • プロキシAPIの設定画面の「パラメーター」の値
    • キー: k1、値: v1
    • キー: k2、値: v2
    • キー: k3、値: v3
  • このAPIに指定したurlの値:https://api.example.com?k2=v2

このとき、リクエストは「https://api.example.com?k2=v2&k1=v&k1=v1&k2=v2&k3=v3」に送信されます。

リクエストヘッダー

プロキシAPIの設定画面で設定した「ヘッダー」は、このAPIで指定したリクエストヘッダーに付与されます。

たとえば、プロキシAPIの設定画面と、このAPIで、それぞれ次のように設定したとします。

  • プロキシAPIの設定画面の「ヘッダー」

    • キー: k1、値: v1
    • キー: k2、値: v2
  • このAPIに指定したリクエストヘッダー

    1
    2
    3
    
    {
      "k3": "v3"
    }

このとき、次のリクエストヘッダーが送信されます。

1
2
3
4
5
{
  "k1": "v1",
  "k2": "v2",
  "k3": "v3"
}
リクエストボディ

リクエストで送信されるボディは、「Content-Type」ヘッダーとメソッドによって異なります。

GET/DELETE

Content-Type body に指定した値 リクエストデータのフォーマット 送信されるボディの値
application/x-www-form-urlencoded オブジェクト なし ボディは送信されません なし
application/x-www-form-urlencoded 文字列 なし ボディは送信されません なし
x-www-form-urlencoded 以外 オブジェクト なし ボディは送信されません なし
x-www-form-urlencoded 以外 文字列 なし ボディは送信されません なし

POST/PUT/PATCH

Content-Type body に指定した値 リクエストデータのフォーマット 送信されるボディの値
application/x-www-form-urlencoded オブジェクト x-www-form-urlencoded この API に指定したbodyの値に、プロキシ API の設定画面で設定した「ボディ」の値を付加したもの それぞれ次のように設定したとします。
  • プロキシ API の設定画面の「ボディ」
    • キー: a_val、値: あいう
  • この API に指定したbody
    • { "b_val": "えおか" }
次の値が、リクエストボディとして送信されます。
b_val=%e3%81%88%e3%81%8a%e3%81%8b&a_val=%e3%81%82%e3%81%84%e3%81%86
これは、b_val=えおか&a_val=あいうがデコードされた値です。
application/x-www-form-urlencoded 文字列 なし この API に指定したbodyの値 それぞれ次のように設定したとします。
  • プロキシ API の設定画面の「ボディ」
    • キー: a_val、値: あいう
  • この API に指定したbody
    • { "b_val": "えおか" }
次の値が、リクエストボディとして送信されます。
b_val=%e3%81%88%e3%81%8a%e3%81%8b
これは、b_val=えおかがデコードされた値です。
x-www-form-urlencoded 以外 JSON オブジェクト なし この API に指定したbodyの値に、プロキシ API の設定画面で設定した「ボディ」の値を付加したもの それぞれ次のように設定したとします。
  • プロキシ API の設定画面の「ボディ」
    • キー: a_val、値: あいう
  • この API に指定したbody
    • { "b_val": "えおか" }
次の値が、リクエストボディとして送信されます。
b_val=%e3%81%88%e3%81%8a%e3%81%8b&a_val=%e3%81%82%e3%81%84%e3%81%86
これは、b_val=えおか&a_val=あいうがデコードされた値です。
x-www-form-urlencoded 以外 文字列 なし この API に指定した body の値 それぞれ次のように設定したとします。
  • プロキシ API の設定画面の「ボディ」
    • キー: a_val、値: あいう
  • この API に指定したbody
    • <?xml version="1.0" encoding="UTF-8"?><soap></soap>
次の値が、リクエストボディとして送信されます。
<?xml version="1.0" encoding="UTF-8"?><soap></soap>
リクエストヘッダーやリクエストボディにおける重複キーの処理

プロキシAPIの設定画面で設定したヘッダーやボディに、同一のキーがある場合は、後に設定した値が優先されます。

たとえば、プロキシAPIの設定画面で、ヘッダーを次のように設定したとします。

  • キー: k1、値: v1
  • キー: k1、値: v1-priority

このとき、次のヘッダーが送信されます。

1
2
3
{
  "k1": "v1-priority"
}

プロキシAPIの設定画面で設定した値と、このAPIで指定した値に同一のキーがある場合は、プロキシAPIの設定画面で設定したヘッダーやボディの値が優先されます。

たとえば、プロキシAPIの設定画面とこのAPIで、それぞれ次のように設定したとします。

  • プロキシAPIの設定画面の「ヘッダー」

    • キー: k1、値: v1
    • キー: k2、値: v2-settings
  • このAPIに指定したリクエストヘッダー

    1
    2
    3
    
    {
      "k2": "v2"
    }

このとき、次のヘッダーが送信されます。

1
2
3
4
{
  "k1": "v1",
  "k2": "v2-settings"
}

制限事項

クラウド版では、外部にAPIリクエストを送信したときの実行時間は最大で30秒です。30秒を過ぎるとタイムアウトとなり、エラーが返ります。