REST 経由で Object Body を利用

この例では、REST API を使って外部サーバーを呼び出す処理と、Server Code 上で Object Body を扱う処理を示します。

Server Code では、jQuery を使って、外部のサーバーを呼び出すことができます。今回の例は、Kii Cloud 自身ですが、アクセスできるドメインに制限はないため、外部のサーバーに接続して、その結果から処理を行うこともできます。

また、現状の Server Code では、Object Body を利用する際に必要な Blob や FileReader をサポートしていないため、Server Code から Object Body を利用したい場合は REST API を使う必要があります。

この例では、bucketName パラメータと、objectId パラメータで指定された、アプリケーションスコープの Object にある Object Body を参照しています。取得した Object Body そのものは特に処理していません。

function parse_body(params, context, done) {
  // Compose the URL of the published object body and get the administrator's token.
  var appId = context.getAppID();
  var appKey = context.getAppKey();
  var adminToken = context.getAppAdminContext()._getToken();
  var targetUrl = Kii.getBaseURL() + "/apps/" + appId + "/buckets/" + params.bucketName + "/objects/" + params.objectId + "/body";

  $.ajax({
    // Get the object body.
    url: targetUrl,
    type: "GET",
    headers: {
      "Accept": "*/*",
      "Authorization": "Bearer " + adminToken
    },
    success: function(body) {
      // Process the object body.
      done("OK");
    },
    error: function(msg) {
      done("NG:" + JSON.stringify(msg));
    }
  });
}

拡張のヒント

  • 今回の例は HTTP GET を利用していますが、$.ajaxtype を他のメソッドに変更することもできます。変更する際は、メソッド名の大文字小文字にご注意ください。たとえば、"Post" では正しく動作しません。

  • REST のリクエストで JSON オブジェクトを渡したい場合、$.ajaxdata(HTTP BODY 指定)では、JSON.stringify({"param" : "value"}) のように stringfy() メソッドを使用します。

  • この例ではダウンロードの例をあげていますが、この例を参考にしてクライアントから渡されたデータをアップロードする処理を記述する場合は、Server Code に渡すパラメータのサイズに注意してください。パラメータ本体と Server Code を呼び出すためのメタ情報(50 バイト程度)を、合計 100KB 以内に収める必要があります。

Server Code を手動実行して別の Server Code を呼び出すことはできません。実行すると、HTTP ステータス 409 で "OPERATION_NOT_ALLOWED" エラーになります。

  • 外部サーバーとの通信などで BASIC 認証が必要な場合、Authorization ヘッダーの出力部分を以下のように書き換えます。BASIC 認証のユーザー名とパスワードは Server Code の呼び出し元で Base64 エンコードして、base64token パラメーターで渡す想定です。

    "Authorization": "Basic " + params.base64token