初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-06-28 00:28:22

しろ92
Member

URLからの挿入による在庫更新

こんばんは。
今あるサイトの在庫更新を”URLからの挿入”でやりたいと思い、いろいろ調べているのですが、cURLの書き方が分かりません。
json、API等を理解していないのにやるなんて無茶だとは分かっているのですが(^^;)
Filemaker Pro16 で下記の内容は実行できますでしょうか?
すみませんが、できましたら設定の仕方を教えていただけないでしょうか。
よろしくお願い致します。

環境
windows 7
Filemaker pro 16 Ad

サイトの在庫更新APIは下記のとおりです。
※アドレス、パスワード等は変更させていただいております。

・リクエスト URL
https://www.abcd.com/aa/bb/ver1.0/p.json
  ※リクエストメソッドは POST のみ対応しています。 

・リクエストヘッダ
ヘッダ名       値       
Content-Type    application/json; charset=UTF-8 [必須] 
Content-Length   数値 [必須] (最大値は 1500000)

入力パラメータ
■在庫更新 API 入力パラメータ一覧
パラメータ名    説明
ninshoCode     認証コード [必須]
shohinCode     品番 [必須]
stock              在庫数 [必須]

・在庫更新APIに載ってる更新例
※品番ABCを更新する場合
{
    "body": {
        "productSets": {
            "productSet": [
                {
                    "shohinCode": "ABC1",
                    "stock": 1
                },
                {
                    "shohinCode": "ABC2",
                    "stock": 2
                },
                {
                    "shohinCode": "ABC3",
                    "stock": 3
                }
            ]
        }
    },
    "header": {
        "ninshoCode": "123456789abcdefghijklmn"
    }
}

Offline

#2 2017-06-28 11:32:03

honda
Member

Re: URLからの挿入による在庫更新

仕様を見る限り、FileMaker 16のcURLやJSON機能で、対応できない要素はありません。
ただ、更新例のJSONがbodyとheaderを持っており、この意図が不明確です。

ここにある"body"とは、HTTPのbodyに指定すべき内容なのか、
それともHTTPのbodyに渡すJSONに"body"というmapで持たせるのか判断できません。
前者ならドキュメントとして奇妙ですし、後者だとすれば随分紛らわしい仕様です。

cURLの用い方自体は以前配布したサンプルと大きな違いは無いので、
下記のサンプルを改変して、上記の2パターンで試せばいけるんじゃないでしょうか。

■ Web API利用のサンプルファイル
https://drive.google.com/open?id=0B-NoW … UpJXzA0RGM

Offline

#3 2017-06-29 23:43:36

しろ92
Member

Re: URLからの挿入による在庫更新

hondaさん、ご返信ありがとうございます。
いただいたサンプルで一度いろいろ試してみたいと思います。
ありがとうございます。

Offline

#4 2017-06-30 13:20:56

honda
Member

Re: URLからの挿入による在庫更新

引っかかるとしたら、headerに持たせるContent-Lengthでしょうか。

Content-Lengthに渡すのはRequest bodyの"バイト数"です。
FileMakerのcURLはutf-8決め打ちなので、JSONに渡す内容がASCIIに収まるなら、
FileMakerの単純なLength()で計算した値がそのまま使えます。
しかしひらがなや漢字などASCII外の文字が混ざる場合、
Length()では駄目ですし、RomanZenkaku()などを使ったいわゆるLengthb()も使えません。

UTF-8の文字列のバイト数は、従来FileMakerのみで計算は完結できませんでしたが、
ver.16からはTextEncode()の追加によって可能になりました。

TextEncode ( body ; "utf-8" ; 1 )

上記のような内容の計算フィールドを、結果を「オブジェクト」として作成します。
さらに、このフィールドをLength()でカウントすれば、
UTF-8でエンコードされた場合のバイト数が取得できます。

-

特にPHPに多いですが、バイト数のカウントを謳うフォームなどで、
UTF-8の計算が誤っているのを見かけるため、あの手のものは鵜呑みにできません。
FileMakerのTextEncode()+Length()の正確性の検証は、
UTF-8ネイティブのGo言語で行い、mb4やサロゲートペアまで一致を確認しました。

https://play.golang.org/p/qXEqxhAahp

Last edited by honda (2017-06-30 13:30:54)

Offline

#5 2017-06-30 14:25:24

qb_dp
Member

Re: URLからの挿入による在庫更新

hondaさん
cURLって、POSTの場合、Content-Length が自動で設定されているようです。
FileMaker Pro 16 の cURL 同様なので、Content-Length は、設定しなくて良さそうです。

Offline

#6 2017-06-30 15:21:32

honda
Member

Re: URLからの挿入による在庫更新

qb_dpさん
ありがとうございます。多分ScriptMaspter経由でのPOST実装と混同してたみたいです。
ということで、FileMakerとcURLではContent-Lengthの計算は不要でした。訂正します。

-

CryptAuthCode()もあるし、バイナリのハッシュ値もいけるし、
FileMaker単体ですんなり使えないAPIはリクエストがXMLのやつと、非UTF-8のものぐらいでしょうか。
gRPCはもちろん無理ですが、GraphQLは特に問題ないし、JWTもトークン作るとこまではすんなりいけました。
公開APIがgRPCのみになるのは当面考えにくいので、
まともなWeb APIなら大抵FileMaker単体で利用できると答えて大丈夫そうな感じです。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 9 queries executed - Memory usage: 516.98 KiB (Peak: 521.88 KiB) ]