LoginSignup
0
0

More than 5 years have passed since last update.

RESTfm で Create してみよう

Posted at

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 を便利にするパラメータが用意されています。詳しくは公式ドキュメントを参照してほしいのですが、1点紹介をします。

  • RFMscript
    • このパラメータを指定すると、Update した後に指定のスクリプト(「=」でつないでスクリプト名を指定)を実行します
    • スクリプトに引数を用いる場合はさらにRFMscriptParamパラメータを付与します

bulk も可能

GET や Update の記事で記載した bulk での Update も可能です。詳しくはやはり公式ドキュメントをどうぞ。

エラー処理を含めるとなおよし

GET メソッドは単に情報を取得するだけですので誤った URI を叩いたりしてしまってもエラーが出るくらいです。しかしながら POST メソッドの場合は新たにデータを追加することになり、場合によってはデータの整合性を失わせることになります。たとえば特定の検索結果のカウント数を処理に用いるとして、不用意な POST によりそのカウント数がズレてしまう、などの場合です。したがって、テストデータなどで十分に仕様を把握した上で実戦投入するといいでしょう。

また、エラーチェック(ログ出力)などを組み込むことで何かあった際の対応が楽になると思います。そこらへんも意識してコードを書くようにしてみてください。

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