FileMaker Data API を使う 2025 年版 vol.2 から続きます。
利用環境
以下の環境を前提に説明しています。
- Claris FileMaker Pro 21.1.1.41 macOS
- Claris FileMaker Server 21.1.1.40 Ubuntu 22(AMD)
- サーバ: Ubuntu 22.04.5 LTS
- SSL 証明書
- リクエストする側のサーバ(任意)
開発段階では、以下を使用した方が楽でしょう。
- Postman Version 11.30.0
Login
auth - Login を説明します。
FileMaker Data API のログインは、Basic 認証を使用します。username と password を : で繋ぎ、それを Base64 でエンコードしたものを使用します。
例えば、以下の場合、
- username ... mlb_admin ... ユーザ名
- password ... qwerty@2 ... パスワード
mlb_admin:qwerty@2
をBase64 エンコードしたものを次の形式で渡します。
Authorization: Basic cmVtaXh3b3Jrc18xMjI4OnRvbWlrZjE5
事前にエンコードする場合は、どんな方法でも構いませんが、FileMaker Pro を使う場合は、
ツール > データビューア で「監視」タブから、「+」ボタンで、「式:」欄に以下のように記述します。
Base64Encode ( "username:password" )
すると、「結果:」欄にエンコード結果が表示されます。
ここでは、PHP のコード内でエンコードしてしまいます。
ログインに成功すると、レスポンスに、セッションごとに発行される Bearer Session Token が得られます。以降、ログアウトまで、この Bearer Session Token を使ってリクエストを実行していくことになります。
login.php
<?php
// auth - Login
$host = 'domain.com';
$version = 'vLatest';
$database = 'statcast';
$username = 'mlb_admin';
$password = 'qwerty@2';
$basicAuth = base64_encode($username . ':' . $password);
$endpoint = 'sessions';
$request_url = 'https://' . $host . '/fmi/data/' . $version . '/databases/' . $database . '/' . $endpoint;
$request_method = 'POST';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $request_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Authorization: Basic ' . $basicAuth,
'Content-Type: application/json'
),
CURLOPT_POSTFIELDS => "{}",
));
$response = curl_exec($curl);
curl_close($curl);
$result = mb_convert_encoding($response, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$result = json_decode($result, true);
$bearer_session_token = $result['response']['token'];
$messages = $result['messages'][0];
if ($messages['code'] === '0') {
echo 'response.token: ' , $bearer_session_token, PHP_EOL;
}
Bearer Session Token は、レスポンスの response.token に入っていますので、これを取得しておいて、以降のリクエストで使用します。
Log out
auth - Log out です。
FileMaker Data API でログインし、処理が終わったら、ログアウトしましょう。
そのままにして、ログインを繰り返せば、FileMaker Server 上に、一定時間、ユーザが残っていることになります。これはリソースの無駄遣いなので、処理が終わったらログアウトするようにします。
ログアウトはセッションを閉じるという意味になるので、ログアウト対象の Bearer Session Token を使用して、ログアウトします。
これはログアウトだけ実行してもエラーになるので、ログイン〜 Bearer Session Token 取得〜ログアウトという流れで書いてみます。
log_out.php
<?php
// auth - Login
$host = 'domain.com';
$version = 'vLatest';
$database = 'statcast';
$username = 'mlb_admin';
$password = 'qwerty@2';
$basicAuth = base64_encode($username . ':' . $password);
$endpoint = 'sessions';
$request_url = 'https://' . $host . '/fmi/data/' . $version . '/databases/' . $database . '/' . $endpoint;
$request_method = 'POST';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $request_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Authorization: Basic ' . $basicAuth,
'Content-Type: application/json'
),
CURLOPT_POSTFIELDS => "{}",
));
$response = curl_exec($curl);
curl_close($curl);
$result = mb_convert_encoding($response, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$result = json_decode($result, true);
$bearer_session_token = $result['response']['token'];
$messages = $result['messages'][0];
if ($messages['code'] === '0') {
echo 'response.token: ' , $bearer_session_token, PHP_EOL;
}
// auth - Log out
$endpoint = 'sessions';
$request_url = 'https://' . $host . '/fmi/data/' . $version . '/databases/' . $database . '/' . $endpoint . '/' . $bearer_session_token;
$request_method = 'DELETE';
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $request_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => $request_method,
));
$response = curl_exec($curl);
curl_close($curl);
$result = mb_convert_encoding($response, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$result = json_decode($result, true);
$response = $result['response'];
$messages = $result['messages'][0];
if ($messages['code'] === '0') {
print_r($result['response']);
}
ログアウトの response は、空の配列になります。