JSONでいってみよう!では、JSONデータの基本的な取り扱い、FileMakerのデータとして使うために、レコードに登録する方法を紹介しました。
しかし、実際APIと連携して、JSONデータを扱うには、もう少し複雑な順序で行う必要があります。ここでは、一般的なAPIからデータを受け取る方法について紹介していきます。
APIには認証が必要
基本的にビジネスで使用するようなAPIには誰にでも使われては困るので、認証が必要になっています。パスワードやユーザー名などのアカウント情報を送って、登録されているものであれば、データを返す。というような流れになります。
この認証も方法がいくつかありますが、外部のデータベースから、データをFileMaker(ファイルメーカー)で受けて、使用することを前提に、ある例から紹介していきます。
認証とデータの流れ
流れを簡単に説明すると次のようになります。
- アカウント情報(ユーザー名、パスワードなど)を送信します。
- 登録されたものとあっていると、セッションIDが送られてきます。
- セッションIDとクエリを送信して、データを受け取ります。
このような流れになってきます。少々難しい言葉が出てきたと思われるかもしれないので、説明していきます。
セッションIDとは認証されたことを証明するキーでランダムに見える文字列のことです。(例:WJZuf96gqUYFCeYEpYwE ※実際のものではありません)セッションIDには期限があり、この期限内であれば、毎回パスワードを送信しなくてもこのキーを送信することで、認証された人であると証明することができるものです。
ホテルのフロントで部屋のカギを渡される、そんなイメージでしょうか。
次に「クエリ」です。例えば、日経平均株価の終値を返すAPIがあるとします。ある日付を送信すると、その日の終値を返してきます。この「ある日付」がクエリだと思えばいいでしょう。
APIのファイルメーカー(FileMaker Pro)での実際の処理
ここからはより実際の例に近い形で例を見ながらAPIをファイルメーカーで処理する場合の方法を紹介します。
まずは、テスト環境を紹介します。実際にこのフローを体験できる疑似的なAPIを用意しました。疑似的なものなので、クエリを送信しませんし、セッションIDはいつも同じです。
内容 | URL |
---|---|
ログインを行い、セッションIDを取得するため | https://filemaker.raquel.jp/contents/api/login.php |
セッションIDを送信し、情報を取得する | https://filemaker.raquel.jp/contents/api/getcontents.php |
※この疑似APIは都合により削除される場合もありますので、注意してください。
APIに接続してデータをもらうスクリプト
※テーブルなど情報はJSONでいってみよう!と同じようになっています。
スクリプトは上記のようになります。
まず1行目のURLから挿入ですが、URLが「”httpspost://filemaker.raquel.jp/contents/api/login.php?USERID=apiuser&PASSWORD=n2HLGU”」となっています。
これはPOSTというサーバーなんかにデータを送信するための方法の一つで、今回の場合は「USERID」という名前で「apiuser」というデータと、「PASSWORD」という名前で「n2HLGU」というデータを送信しています。
ここにユーザーIDとパスワードを送信するとセッションIDを返してきますが、もしユーザーIDとパスワードの送信が間違っていると、JSONでデータを返してきます。
{ “SESSION_ID”: “wE7aLQ5HfHe4”, “error_code”: “100” }
こんなデータが返ってきます。これは成功した例です。この疑似APIでは「error_code」(エラーコード)として「100」が返ってきた場合は問題ないよという通知になり、一緒にセッションIDを送信してきます。
{“error_code”:”101″,”mg”:”Account information is wrong”}
逆にこれが、アカウント情報が間違って行場合の例です。まず、ファイルメーカー側のスクリプトで、うまくいったかどうかを調べる必要があります。そうでないとスクリプトがどんな動きをするかわからないからです。この例では、「error_code」を調べます。それが、2行目から6行目です。
成功していた場合、セッションIDを取り出します。それが7行目です。
セッションIDを送ります。8行目のURLから挿入のスクリプトステップで行います。「”https://filemaker.raquel.jp/contents/api/getcontents.php?SESSIONID=” & $session_id」というURLの内容になっています。
{ “error_code”: “100”, “0”:{ “id”: “100003”, “item_name”: “レタス” }, “1”:{ “id”: “100004”, “item_name”: “キャベツ” }, “2”:{ “id”: “100005”, “item_name”: “トマト” } }
成功するとこのような形で、データが返ってきます。セッションIDが違っていたりして失敗すると下記のようになります。
{“error_code”:”101″,”mg”:”Account information is wrong”}
9~13行目でエラーがあるかどうかを調べています。
14行目からは、JSONでいってみよう!と同じで、データをファイルメーカーのレコードとして登録します。ミソは、データの個数を調べる、14行目の部分で「-1」という部分です。エラーコードが入っているデータがあるので、関数が返す個数がこれに含まれるようです。