##はじめに##
いえらぶAdventCalendar の23日目です。
初めてこういう記事を書くので温かい目で見ていただけると嬉しいです。
今回の記事は、私が開発していたkintoneへのAPI連携のところでつまづいたところをまとめていきます。
今までkintoneは一切触ったことありませんし、社内でも使ったことがないツールです。
手探り状態で開発を進めていましたが、開発すればするほど、よく分からないエラーがでてきてたくさんつまづきました。
今振り返るとなんでこんなところに引っかかったのか、と思うのですが、私のつまづいたところが、これから開発する方の参考に少しでもなればいいなあと思います。
ちなみにですが、kintoneの画面上の操作は一切できませんし、設定とか権限とか操作の方法は分からないので、その辺のことはkintone ヘルプをご覧ください。
では早速いきます。
##kintoneとは##
こちらを見たら早いと思います。
簡単に説明すると、自社の業務に合わせてカスタマイズできる業務支援ツールです。
##何をやったか##
自社サービスに入ったデータをバッチ処理で、クライアントのkintoneへ登録・更新するための開発を行っていました。
###kintone API##
これに関してもAPIについてまとまった記事がありますので、こちらを見ていただければと思います。
今回はkintone REST APIを使って開発しました。
言語はphpです。
##つまづいたこと##
###その1 どうやって連携するの###
kintoneはじめてかつAPI連携はじめて開発するので、正直びびってました。
が、方法は簡単に見つかりました。
####連携の方法####
kitnoneへ登録・更新をするには、「APIトークン認証」もしくは「パスワード認証」で行います。
自社ではkintone使っていないので両方を作成してもらいました。
違いを簡単に説明すると、
- APIトークン認証
・・・アプリごとに生成でき、そのアプリだけに処理できる。 - パスワード認証
・・・ルックアップフィールドの登録(ルックアップキーというのがあって、それを指定するだけで他のアプリからデータ取得してきて登録とか更新とかしてくれる)のような、他のアプリが関係してくるときに処理できる。
こんな感じでとらえてます。
私は、1つのアプリだけに書き込むときはAPIトークン認証、ルックアップフィールドへの登録・更新が関わってくるときはパスワード認証のようにしてました。他のアプリに影響しないよう念のためです。
基本はパスワード認証でもよかったのかなあとは思っています。
###その2 アプリへ登録ができない###
アプリへあるデータを参照したり登録したりしようとしていたのですが、
権限がありません。
というエラーが出ました。が、すぐ解決しました(-_-;)
####原因####
使っていたAPIトークンに権限がありませんでした。
####解決方法####
作成していただいたAPIトークンに、
- レコード閲覧
- レコード追加
- レコード編集
の3つの権限を追加していただきました。
この後の開発中にも、権限によってエラーになっているのもあったので、まずは権限がきちんと付与されているか確認したほうがいいかもしれません。
###その3 ルックアップの参照先から値をコピーできません。###
仕様の相談も必要だっため、これが一番解決に時間が掛かった部分です。
ルックアップキーを指定して、ルックアップフィールドの値を登録しようとすると、以下のようなエラーが出てきてしまいました。
ルックアップの参照先から値をコピーできません。「コピー元のフィールド」に指定したフィールドの設定で「値の重複を禁止する」を選択しておく必要があります。
####原因####
ソースコードを追ってみても、明らかに登録のところでエラーが出ていました。
やはり原因はエラー文にもある通り、ルックアップ先のフィールドの設定で「値の重複を禁止する」を設定する必要がありました。
そもそもルックアップをするためには、
- ルックアップキーに指定した値がルックアップ先のフィールド内で重複しないこと
- ルックアップキーに指定したフィールドの設定で「値の重複を禁止する」を選択している。
この2つの条件を満たしていることが必須です。
ルックアップキーに指定されているフィールドがアプリ内で重複しており、また値の重複を禁止するの設定もされていなかったので、エラーが起こっていました。
####解決策####
- ルックアップキーが重複しないようにルックアップキーを変更
- フィールドの設定を、「値の重複を禁止する」に設定
以上2点を相談し、設定を行っていただきました。
他にも方法はあったかもしれませんが、今回は重複しないフィールドを作っていただくことで解決できました。
もともと重複しない値がルックアップキーに設定されていればフィールドの設定だけでよかったですが、そうではない場合もあるかと思いますので一応参考にしていただければと思います。
##まとめ##
ソースコードを1つ1つ追って解決していくのも大事ですが、それによって何が原因なのかわからないループにはまったこともありました、、、。
アプリやフィールド、APIトークンなどあらゆるところに権限や設定ができるようなので、どうしても解決できないときは確認してみることをオススメします。
間違っている内容があれば、ご指摘いただければ幸いです、、、。
※また思い出したら追記するかもしれないです。