API連携のテストには “テキストを挿入” がおすすめ

こんにちは。
株式会社フルーデンスの小巻です。

FileMaker 16 より URL から挿入 が大きく改良されました。
cURLオプション を使えるようになった点がすごく大きいですね。

知らない方も多いようですが、バージョン15でも httpspost などは使えてたんですよね。

https://www.filemaker.com/help/15/fmp/ja/#page/FMP_Help%2Finsert-from-url.html

[URL から挿入] は、http、https、httppost、httpspost、ftp、ftps、および file プロトコルをサポートします。FileMaker Pro は、URL によってターゲットフィールドに指定されたリソースをダウンロードします。

ただ、外部サービスとの連携をする際には、デフォルトの機能ではできないことが多く、私は BaseElementsプラグイン を利用して、cURLコマンドを実行していました。

https://baseelementsplugin.zendesk.com/hc/en-us/articles/203843738-BE-HTTP-POST

BE_HTTP_POST ( url ; parameters { ; username ; password } )

Does a http POST function and returns the results. This uses the curl library so output will be similar to that. This is used in conjunction with the BE_HTTP_Set_Custom_Header function to set custom headers in advance and the BE_HTTP_Response_Code and BE_HTTP_Response_Headers functions to get the result values after the POST is complete.

話を戻しまして。

API連携をする際に、cURLオプションに色々と記述するわけですが、FileMakerの計算式で書くには、少ししんどいケースがあります。

Dropboxのuploadなど

たとえば、DropBoxのAPIで upload を使う場合に、以下のように path を指定するのですが、 path を計算式で書くのがしんどいですよね。

https://www.dropbox.com/developers/documentation/http/documentation#files-upload

curl -X POST https://content.dropboxapi.com/2/files/upload \
    --header "Authorization: Bearer token" \
    --header "Dropbox-API-Arg: {\"path\": \"/Homework/math/Matrices.txt\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}" \
    --header "Content-Type: application/octet-stream" \
    --data-binary @local_file.txt

uploadのオプションを計算式で記述する場合

Let ( [
	~a = "curl -X POST" ;
	~b = "--header \"Authorization: Bearer __TOKEN__\"" ;
	~c = "--header \"Dropbox-API-Arg: {\\\"path\\\": \\\"__PATH__\\\",\\\"mode\\\": \\\"add\\\",\\\"autorename\\\": true,\\\"mute\\\": false}\"" ;
	~d = "--header \"Content-Type: application/octet-stream\"" ;
	~e = "--data-binary @$data" ;
	~list = List ( ~a ; ~b ; ~c ; ~d ; ~e ) ;
	~value = Substitute ( ~list ; [ "¶" ; " " ] ; [ "__TOKEN__" ; z_dropboxToken ] ; [ "__PATH__" ; path ] )
] ;
	~value
) /*let*/

とか

Let ( [
	~list =
		List (
			"curl -X POST" ;
			"--header \"Authorization: Bearer __TOKEN__\"" ;
			"--header \"Dropbox-API-Arg: {\\\"path\\\": \\\"__PATH__\\\",\\\"mode\\\": \\\"add\\\",\\\"autorename\\\": true,\\\"mute\\\": false}\"" ;
			"--header \"Content-Type: application/octet-stream\"" ;
			"--data-binary @$data"
		) ;
	~value = Substitute ( ~list ; [ "¶" ; " " ] ; [ "__TOKEN__" ; z_dropboxToken ] ; [ "__PATH__" ; path ] )
] ;
	~value
) /*let*/

などのように記述する必要があります。

uploadのpathをピックアップ

前述のpathのみピックアップすると、以下のようになります。

"--header \"Dropbox-API-Arg: {\\\"path\\\": \\\"__PATH__\\\",\\\"mode\\\": \\\"add\\\",\\\"autorename\\\": true,\\\"mute\\\": false}\""

この式は、以下のような結果になります。

--header "Dropbox-API-Arg: {\"path\": \"__PATH__\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}"

けっこうしんどいですよね。

もちろん、テスト後にはカスタム関数を作成すればよいと思うのですが、テストする際にAPIの記述ミスがあると、効率が悪く思います。

APIをテストする際に “テキストを挿入” を使う

そのため、APIをテストする際に、いきなり計算式でかくのではなく テキストを挿入 をつかって、書くのがよいと思います。

filemaker-api-test-insert-text2-fs8

テキストを挿入 の場合は、そのままのテキストを変数に設定できるため、すごく便利です。

APIのテストがうまくいけば、その後は、カスタム関数などで定義して頂くのがよいと思います。

フィールドの値を使うのはどうか

フィールドの値を使うことでも同じことができますが、コンテキストを意識しないといけないので、個人的には テキストを挿入 がよいと思います。

複雑な計算式を書く場合にはエディターがおすすめ

複雑な計算式を書く場合には、エディターがおすすめです。
ただのエディターだと見づらいので、私はFileMakerのコードをハイライトするように設定しています。

filemaker-api-test-insert-text3-fs8

色の見やすさはおいといて、識別しやすいですよね。
エディターを使うと、記述ミスも見つかりやすいですよね。

こちらのURLよりダウンロードできます。

https://github.com/frudens/filemaker-syntax

あとがき

せっかく FileMakerカンファレンスAPI連携 のお話をさせて頂いたので、API連携の記事や関連する記事を書いていきますので、楽しみにしていてください。API連携のテストには テキストを挿入 がおすすめ

2014年からフリーランスとして活動し、2016年に株式会社フルーデンスを設立する。 最近は、GolangでCLIツールを開発したり、GAE/GoでWebアプリケーションを開発しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください