RESTfm で Create する
Update、Delete と続き、いよいよ最後の動作である Create(POST メソッド)です。
……とは言えですね、これまた Update および Delete とほぼ変わりません。公式ドキュメントを見るとわかるように、「2.7.3 Create - POST」と「2.11.1 Create - POST」にのみ Create が存在します。これは Delete と同じです。
仕方ないんのでコピペ的を承知の上で Create の方法を記していきましょう。
Create できるのはレコードだけ
Create という言葉は要は新たに生成できる(する)ということですから、レコードはもちろんのこと、レイアウトやデータベースを生成することを考える向きもあるでしょう。
しかし、レコード以外を API で生成したところで中身の本質的な生成は FileMaker 側で行う必要があることは自明です。したがって、API ではレコードの生成のみができることになります。
基礎となる URI と使用するデータベースおよびレイアウト
説明を分かりやすくするために、RESTfm を以下の場所に配置したと仮定します。
http://hogehoge/RESTfm/
また、説明に使うデータベース名はMember
とし、同じくレイアウト名はcategories
とします。
レコードを Create する(URI を構成する)
レコードを Create しましょう。Update や Delete と違い、対象とするレコードというものはありませんから、レイアウトを指定するだけで API として叩く URI は確定します。すわなち、以下の URI を叩きます。
http://hogehoge/RESTfm/Member/layout/categories
レコードを Create する(レコード内の各フィールドのデータを入力する)
ただ単にレコードを Create しただけでは、レコード内のフィールドは空っぽになります。それはそれでいい場合もありますが、Create の際に特定のフィールドには特定の値を入れたい場合も多いでしょう。
その場合は POST を投げる時に以下のようなフォーマットでデータを投げてあげます。foo
というフィールドをbar
と設定し、hoge
というフィールドにfuga
と設定する場合です。
{
"data": [
{
"foo": "bar",
"hoge": "fuga"
}
]
}
PHP で上記 JSON を作る場合は以下のようにすればいいでしょう。
$data = array("data" => [
array("foo" => "bar"),
array("hoge" => "fuga")
]);
$post_json = json_encode($data);
レコードを Create する(PHP の curl を用いる)
URI も定まり、送るべき JSON も作れました。あとは実際に POST するだけです。PHP でのコード例を以下に示します。
$uri = "http\://hogehoge/RESTfm/Member/layout/categories";
$request = "POST";
$headers = array("Content-Type: application/json");
$data = array("data" => [
array("foo" => "bar"),
array("hoge" => "fuga")
]);
$post_json = json_encode($data);
$options = array(
CURLOPT_URL => $uri,
CURLOPT_CUSTOMREQUEST => $request,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $post_json,
CURLOPT_RETURNTRANSFER => true
);
$curl = curl_init();
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
$post_json = json_encode($data);
# オプションパラメータ
ここまでで Create は完了しました。ただ、さらに Update を便利にするパラメータが用意されています。詳しくは[公式ドキュメント](http://restfm.com/restfm-manual/web-api-reference-documentation/uri-restfmdatabaselayoutlayout/create-post)を参照してほしいのですが、1点紹介をします。
- **RFMscript**
- このパラメータを指定すると、Update した後に指定のスクリプト(「=」でつないでスクリプト名を指定)を実行します
- スクリプトに引数を用いる場合はさらに`RFMscriptParam`パラメータを付与します
# bulk も可能
GET や Update の記事で記載した bulk での Update も可能です。詳しくはやはり[公式ドキュメント](http://restfm.com/restfm-manual/web-api-reference-documentation/uri-restfmdatabasebulklayout-bulk-operations/create)をどうぞ。
# エラー処理を含めるとなおよし
GET メソッドは単に情報を取得するだけですので誤った URI を叩いたりしてしまってもエラーが出るくらいです。しかしながら POST メソッドの場合は新たにデータを追加することになり、場合によってはデータの整合性を失わせることになります。たとえば特定の検索結果のカウント数を処理に用いるとして、不用意な POST によりそのカウント数がズレてしまう、などの場合です。したがって、テストデータなどで十分に仕様を把握した上で実戦投入するといいでしょう。
また、エラーチェック(ログ出力)などを組み込むことで何かあった際の対応が楽になると思います。そこらへんも意識してコードを書くようにしてみてください。