新規投稿
フォローする

動作不具合?:アプリによって同じコマンドで挙動が変わります。

お疲れ様です。

Proxy経由でのHTTP GET/POST動作の確認で深みにはまっているものです。
プログラムがうまく動かないため、切り分けのため、curlで二つのアプリに下記の1レコード取得のGETコマンドを投げましたが、返信結果が異なります。
アプリ側の設定条件が原因と推定されますが、どのような場合、このような現象がおきうるのか、教えていただけますでしょうか?

Case1)  curl -X GET -x "proxy" -H "Token" "url1/k/v1/app=18&id=1
テスト結果:該当レコード番号のレコードが存在するが、アプリに登録されている全レコードが返信された。 

なお、送信時のHaderは以下のとおりで、下記の成功時と同様です。
> GET /k/v1/records.json?app=18&id=1 HTTP/1.1
> Host: xxx.cybozu.com
> User-Agent: curl/7.49.1
> Accept: */*
> X-Cybozu-API-Token:xxxx

Case2)  curl -X GET -x "proxy" -H "Token" "url1/k/v1/app=16&id=1
テスト結果:指定番号のレコードのみが返信された

 

 

0

5件のコメント

Avatar
rex0220

h.yamada さん

たぶん、Case1とCase2 で、URI が異なっていると思われます。

/k/v1/records.json?app=18&id=1 は、records なので、クエリ条件を指定になります。

id=1 は、無視されていると思います。

Case2 は、record 指定だと思います。

0
Avatar
h.yamada

rex0220 さん、

回答ありがとうございました。 おかげさまで、質問の件は解決しました。
records.jsonでは全レコード取得、record.jsonでquery対象レコードの取得になる仕様だったとは、気がつきませんでした。

残る問題として以下のcURLコマンドで無反応(400 Bad Request)となります。※ query指定は仕様が難しいです。
多分、-dのパラメータ指定がおかしいと思いますが、具体的にどう指定すれば動くようになるか教えていただけますでしょうか?

// curlでレコード番号3以上のレコードを取得するqueryを実行したつもりです
curl -X GET -x "proxy" -H "X-Cybozu-API-Token:xx" -H "Content-type: application/json" \
-d "{"app": 16,"query": "RECORD_NUMBER > 3"}" \
"https://url/k/v1/record.json" 

-dの部分は、以下のように色々と変えても結果は同じです。 またrecords.jsonにしても結果は変わりません。

-d "{"app": 16,"query": "RECORD_NUMBER > 3"}" \

お手数ですが、よろしくお願いします

0
Avatar
rex0220

レコード番号のフィールドコードは、日本語環境でアプリを作成すると「レコード番号」になります。

英語環境で、アプリを作成すると「Record_number」になります。

レコード番号のフィールドコードは、変更可能ですので、設定値を確認してください。

また、「$id」も使えますが、変更できないため、どちらも同じです。

下記を試してみてください。

-d "{"app": 16,"query": "レコード番号 > 3"}" \

-d "{"app": 16,"query": "$id > 3"}" \

0
Avatar
rex0220

あと、クエリ条件を指定する場合は、records です。

"https://url/k/v1/records.json"

0
Avatar
h.yamada

rex0220さん、

Tipsありがとうございます。 助言を参考に、思いつくパターンを少し試した結果、おかげさまで動作成功パターンが見つかりました。
この指定でなぜ動くのか理由が正確にわからず、頭の中が少しもやもやしてますが、以下に成功・失敗パターンを記載します。
成功パターンは、普通あまり使わない記載パターンですが、なぜかこれでqueryがうまく認識されました。

なお、わずらわしい日本語のエンコード問題を排除するため、アプリ側で「レコード番号」フィールド名は、「Record_number」に変えてます。

成功パターン

d '{"app": 16,"query": "RECORD_NUMBER > 3"}' \
-d '{"app": 16,"query": "$id > 3"}' \
→ 成功:対象レコードが返信された

失敗パターン

-d "{"app": 16,"query": "RECORD_NUMBER > 3"}" \
-d "{"app": 16,"query": "$id > 3"}" \
→ 無反応: (Bad Requestでレスポンスが返信)

 

h.yamadaにより編集されました
0
サインインしてコメントを残してください。