0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FileMaker Admin API

Last updated at Posted at 2022-04-06

一応ドキュメントがあるが、FMS にアクセスしないとみれない。

認証

流れとしては、

  1. アクセストークンを取得し、
  2. そのアクセストークンを使って実際の API コールを行う

ような使い方。

専用 API を使ってアクセストークンを取得する

Request Access Token API /user/auth に対して管理者のアカウント名とパスワードを使ってアクセストークンを取得し、それを使って API コールするというマニュアル通りの方法。

例えば、curl でトークン取得用の API コールを行う場合は下記の様な感じ。

% curl -k -XPOST -H 'Authorization: Basic <Base64 エンコード文字列>' https://fms.host.name/fmi/admin/api/v2/user/auth

返却された JSON 内に token として入ってくる。

{
  "response": {
    "token": "<アクセストークン>"
  },
  "messages": [
    {
      "code": "0",
      "text": "OK"
    }
  ]
}

アクセストークンを使う場合は Authorization: Bearer <アクセストークン> をリクエストヘッダーとして送る。

例えばデータベースの一覧を取得する API をアクセストークンを使って呼び出す場合はこんな感じ。

% curl -k -H 'Authorization: Bearer <アクセストークン>' https://fms.host.name/fmi/admin/api/v2/databases

という感じ。

ちなみに、 <Base64 エンコード文字列> には管理者の ユーザー名:パスワード を base64 でエンコードしたものを入れる。

例えば、管理者のユーザー名が adminuser で パスワードが adminpassword の場合、mac なら下記のような感じで取得した値 YWRtaW51c2VyOmFkbWlucGFzc3dvcmQ= を使う。

% echo -n 'adminuser:adminpassword' | base64
YWRtaW51c2VyOmFkbWlucGFzc3dvcmQ=

いきなり API コールを行いつつアクセストークンを取得する方法

API コールをするときに認証を行い、その流れでアクセストークンを取得することも可能。

例えばデータベースの一覧を curl を使って取得する場合はこんな感じ。(レスポンスヘッダーに返ってくるので -i をつける)

% curl -i -k -H 'Authorization: Basic <Base64 エンコード文字列>' https://fms.host.name/fmi/admin/api/v2/databases

レスポンスヘッダー x-fm-access-token にアクセストークンが返ってくるので、次回以降はそのトークンを使って実行すれば良い。

HTTP/2 200 
date: Tue, 05 Apr 2022 07:29:08 GMT
server: Apache
x-frame-options: SAMEORIGIN
x-powered-by: Express
x-fm-access-token: <アクセストークン>

・・・

API コールすると 401 エラーになる場合

こうして見ると、普通にユーザー名とパスワードで API コールできるように見えるので、アクセストークン取得せず都度認証して APIコールしようと思ってしまうが、そんな感じで使ってると下記の様に 401 エラーになる。

{
  "response": {},
  "messages": [
    {
      "code": "956",
      "text": "Maximum number of Admin API sessions exceeded"
    }
  ]
}

Maximum number of Admin API sessions exceeded

なので、Admin API のセッション数の上限を超えたということだと思うが、この状態になると発行済のアクセストークンを使っての API コールしか受け付けなくなる。

既存の Admin API セッションを無効にするには Invalidate Access Token API コールを使うしかないと思うが、下記の様な URI なので、そもそもアクセストークンを控えてないとどうしようもない。

/fmi/admin/api/v2/user/auth/<アクセストークン>

そのため、アクセストークンを控えていない状況下でこのエラーに遭遇したら、15分間待って既存のアクセストークンが無効になったら再度トークンの取得を行う。

FileMaker Admin API では、アクセストークンを使用してホストへの接続を定義します。トークンは Invalidate Access Token (アクセストークンの無効化) 呼び出しを使用して無効にされるか、またはそのトークンを指定した最後の呼び出しから 15 分経過するまで有効です。(トークンが有効な間は、そのトークンを指定して呼び出しを行うたびにセッションタイムアウトカウンタがゼロにリセットされます。)
https://help.claris.com/ja/admin-api-guide/content/authentication-server.html

というわけで、大人しくアクセストークンを取得して Admin API をコールするような運用をした方がよさそう。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?