FileMakerとREST入門

JSONへの対応と共にFileMakerの開発者の間でもよく聞かれるようになったREST API、RESTful Webサービスとは何でしょうか。それは20年近くも前のこと、その当時企業システムの通信プロトコルの”業界標準”とされていたSOAPに対して、HTTPプロトコルの当初の思想に沿ったより軽量な現実解として登場した、Web2.0の基盤となった技術です。今後はFileMakerアプリケーションを他のシステムと連携・統合するときに必ず必要なキー機能となるでしょう。今回はSoliant ConsultingのMike DuncanさんによるRESTの入門記事をご紹介します。


Getting Started with FileMaker and REST

(元記事はこちら)

Mike Duncan
2018/4/19

Representational State Transfer (REST)とは、Webおよびアプリケーションの開発者にアプリケーションプログラミングインターフェイス(API)を提供するために、一般的に使用される一連の標準とルールのことを差します。HTTP (HyperText Transfer Protocol)の上に構築されたRESTは、一般的にWebページを表示するために使用されます。あなたも今、HTTPを使用してこのブログ記事を読んでいます。

FileMakerとREST

すべてのHTTPリクエストには、指定されたメソッドがあります。URLを入力してEnterキーを押す場合、使用されるメソッドはGETになります。 Web上でフォームを送信する場合は、POSTメソッドを使用することが最も多いです。二つの違いは、POSTリクエストにはURLとは別のデータ本体が含まれることがあるという点です。

GETリクエストでは、データを含む場合、URLとパスの最後にクエスチョンマークがつきます。通常はその後ろに、キーと値のペアからなるデータが続きます。RESTfulなサービスでは、キーと値のペアを使用するかどうかに関わらず、必要なデータはすべてURLパスに含まれます。通常の場合、データはHTTPリクエストのPOSTメソッドの本体データとしてXMLまたはJSON形式で転送されます。

一般にREST方式に従うと、データを読む場合はGETリクエストを、リソースを生成する場合はPOSTリクエストを使用します。これらは、データベースとのやり取りであるCRUD (Create, Read, Update, Delete)と関連づけられます。最新版のHTTPでは、加えてPUTおよびDELETEメソッドもサポートされています。これらのRESTのメソッドはそれぞれデータベース操作のUpdateとDeleteに変換されます。PUTとDELETEは機能的にはPOSTリクエストと同じですが、指定されるメソッドが異なることになります。

ここには、SSLを使用してURLに「https」を指定している場合の、暗号化された転送データも含まれます。

FilerMakerの[URLから挿入]スクリプトステップ

ここまでのところは理解できましたか? では、FileMakerはRESTful APIとWebサービスとどのように連携するのでしょうか? FileMaker 16では、[URLから挿入]スクリプトステップに多くの変更が加えられ、cURL機能を使用できるようになりました。これはFileMakerプラットフォーム全体で機能します。WebDirectとFM Goと共にサーバーサイドスクリプトも含まれます。

スクリプトステップの詳細を見ていきます。

図1: スクリプトステップの設定
図2: ターゲットを指定

スクリプトステップはいくつかのオプションを設定可能です。まず対象を指定します。対象はフィールドまたは変数です(図2)。変数を指定するには、オプションを選択しその変数に後ほど参照するための名前をつけます。グローバル変数を使用するかどうかは、どこで使用するかによって異なります。

次にURLを指定します。これはベースURLで通常は対象とするリソースへの完全なパスです。

cURLオプションを指定する

次がcURLオプションで、Webリクエストを処理するための 全機能のライブラリを利用できます。FileMakerでは、cURL機能を(すべてではないですが)かなりサポートしています。これについてはドキュメントを参照することをお勧めします。

FileMakerでcURLオプションを使用するときに、特に気にすべき点がいくつかあります。変数を指定する場合の構文には注意が必要です。通常は$または$$をつけて変数を作成します。しかし、cURLオプションとして計算式を設定する場合、変数名はクォーテーションの中に入ります。

"--data @$myVariable"

ターミナルウィンドウでコマンドラインを使用してcurlアプリケーションを使用することに慣れている方であれば、理解できるでしょう。たとえば、コマンドラインでファイルをアップロードする場合、@に続けてファイルへのパスを使用します。同様に、FileMakerではcURLオプションで挿入する変数の場所に@をつけます。この方法で変数を参照すると、必要なクォーテーションの処理がされるため、データが転送中に破損することがありません。

“–data”または“-d”を使用してHTTPボディでデータ本体を送信する場合、デフォルトでPOSTがメソッドとして使用されます。別のメソッドが必要な場合は、cURLオプションに“–request”または“-X”フラグを付けて指定することができます。

もう1つの注意点: “-D”または“–dump-header”オプションを使用すると、返されたHTTPヘッダを取得して変数に格納できます。多くのRESTfulサービスは応答のHTTPヘッダの一部としてエラーコードを返すため、これは特に重要です。

ところでほとんどのcURLオプションは、上記の “-D”のようなフラグをつけて指定されていますが、その大部分は“–dump-header”のようにより読みやすいように冗長な表記法を使用することができます。どちらも動きは同じです。

もう1つ…ほとんどのRESTfulサービスはデータ本体がJSON形式であることを想定しているので、それをHTTPヘッダとして指定することもできます。

" --header \"Content-Type: application/json\""

データ本体がXML形式の場合、送信する内容に合わせてcontent-typeをtext/xmlと変更します。これは連携するWebサービスによって異なります。

[URLから挿入]スクリプトのトラブルシューティング

[URLから挿入]の結果を使用してデバッグやトラブルシューティングを行うと、問題が発生する場合があります。これは手探りで作業をするようなもので、リクエストが相手側でどのように受信されるかわからないままリクエストを作成しそれを送信することになります。リクエストを記録して表示するためのエンドポイントを作成できるWebサイトがいくつかありますが、私の経験ではそれらは信頼できなかったりレスポンスが遅いことがあります。

そのため、私はFileMakerで送信されたリクエストに関する情報を返すための独自のデバッグ用ツールを作成しました。自由に使用可能で、PHPに対応する任意のWebサーバーに置くことができます。

すでにFileMaker Serverをお持ちの場合は、WebサーバでPHPを有効にするだけで使用することができます。

サーバに置いたら、ただ[URLから挿入]スクリプトでPHPスクリプトのURLを指定し、必要なcURLオプションをテストできます。結果はHTMLではなくプレーンテキストで返されます。これは、FileMakerのフィールドまたは変数でその出力を見ることが多いであろうと考えたからです。

FileMakerとRESTに関するその他のこと

APIやWebサービスを使って作業をする場合、他にもさまざまな要素が絡んできます。その中にはたとえばOAuthやHTTPヘッダ情報(署名付きリクエストやサイズ情報など)が含まれますが、これは統合するサービスが何であるかにすべて依存します。このガイドがまずその基礎として役立つことを願っています。

リソース情報

Leave a Reply