LoginSignup
9
9

More than 5 years have passed since last update.

APIGatewayのHTTP ProxyでKintoneのREST APIを呼ぶ(1)

Last updated at Posted at 2016-04-06

Amazon APIGatewayのHTTP Proxyを使ってKintoneのREST APIを呼び出してみます。
Kintoneを呼び出すための環境依存情報は外部から注入できるようにします。

こちらの記事を参考にしました。
外部サイトから直接kintone APIを実行したい

注意
kintone REST APIは同時アクセス数がドメインごとに10と制限されています。

ドメインへの同時アクセス
 ・APIによる同時アクセス数はドメインごとに10が上限です。

REST APIの共通仕様

実システムで利用する場合は、API Gatewayのスロットリング設定やエラーのリトライなどを考慮する必要が有ります。

注意ここまで

必要なもの

  • Kintoneのアカウント(Developerでも大丈夫です。Developerではない場合、APIを使用するのでスタンダードコースが必要です)
  • AWSのアカウント

実現すること

  • クライアント(Webブラウザ)から以下のBodyを持つPOSTリクエストを送信するとKintoneにデータが入る
{
    "item1":"fuga","日本語項目":"ほげ"
}
  • クライアントにはKintoneに関する情報(APITokenなど)は開示しない
  • Kintoneから返されたエラーをクライアントで判定する

Kintoneのアプリの準備

以下の項目を持つアプリを作成します。

  • フィールドコード:item1
    • フィールド名:項目1
    • 必須入力にする
  • フィールドコード:日本語項目
    • フィールド名:日本語項目

このアプリでAPIトークンを生成します。
image
今回は登録のみなのでPOSTの権限だけあればOKです。

Kintoneから必要な情報は、以下のとおりです。
* サブドメイン(Kintoneを利用するときのURL xxxxxx.cybozu.com のxxxxxxです)
* アプリのID
* APIトークン

先に言っておきますと、Kintoneのフィールドコードが日本語の場合、ちょっぴり問題がある可能性があるので、英数字で定義しておいたほうが良いです。

APIGateway

APIを定義

今日からConsoleが結構変わったのよね、、、

image

POSTメソッドを追加し、以下のように設定します。
image

Endpoint URL:https://${stageVariables.subdomain}.cybozu.com/k/v1/record.json${stageVariables.subdomain}が後ほど定義するStageVariablesへの参照です。

KintoneへのリクエストヘッダにAPIトークンを渡す

Integration RequestでHttpヘッダの設定をします。

image

クライアントのリクエストをKintoneのリクエストにマッピングする

KintoneのPOSTリクエストのBodyは以下の仕様になっています。

{
    "app": "(アプリのID)",
    "record": {
        "(フィールドコード)": {
            "value": "(フィールド値)"
        }
    }
}

引用:cybozu.com developer network/kintone API/REST API (レコード)/レコードの登録(POST)

この「アプリのID」と「フィールド値」をMappingTemplateを使って設定します。

image

Content-Type:application/jsonのリクエストに対するBodyを以下のように入力します。

{
    "app":"${stageVariables.app}",
    "record":{
        "item1":{"value":$input.json('$.item1')},
        "日本語項目":{"value":$input.json('$.日本語項目')}
    }
}

これを入力したら右下のSaveボタンをクリックすると反映されるのですが、入力した日本語は"?"に化けてしまいます。
image
しかしながら、CLIで取得すると、日本語のまま定義されていますし、このまま進んでも正常に動作しています。

とはいえ、気持ち悪いのでKintoneでの日本語フィールドコードは使用しないほうが無難かと思います。

動作テスト

ここまでで簡単に動作確認してみます。Method Testのページ(稲妻マーク)を開きます。

image

このようにStageVariablesが入力可能になっているはずです。もし出てきていなければページをリロードしてみてください。

StageVariablesにKintoneで定義した時の値を入力して、まずはRequestBodyを空のままで送信してみましょう。

image

このようにメッセージが文字化けしています(orz)。が、Kintoneにリクエストが送信されていることは間違いなさそうです。

リクエストヘッダに何かを設定することで英語のメッセージをKintoneが返してくれたような気がするのですが、ManagementConsole上の問題だけなので、とりあえず良しとします。
ちなみに化けていなければ、このような内容です。

{
  "message": "入力内容が正しくありません。",
  "id": "1505999166-328617945",
  "errors": {
    "record.item1.value": {
      "messages": [
        "必須です。"
      ]
    }
  },
  "code": "CB_VA01"
}

では、正しいRequestBodyを設定してみます。

{"item1":"data","日本語項目":"日本語入力"}

image

無事にKintoneに入りました!

後はDeployして、、、と行きたいところなのですが、このままでは不都合があります。
先ほど、RequestBodyを空で送信した際に、Kintoneからはエラーが返ってきているにもかかわらず、APIGatewayはHTTP ステータスコード200を返してしまっています。

なので、次回はエラーハンドリングを入れて、以下のことを行います。

  • Kintoneからのエラーをエラーとして返す
  • DeployしてStageVariablesを定義する
  • 呼ぶ
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9