基本的な事ですみませんが、わからないでの教えてください。
records.jsonで返ってくるデータサイズを減らしたくて、fieldsを指定したのですが、情報が不足しており理解できません。
APIの仕様ではfieldsの指定方法が書いておらず、URLエンコードしたサンプル
fields%5b0%5d=%24id&fields%5b1%5d=created_time&fields%5b2%5d=dropdown
をデコードして
fields[0]=$id&fields[1]=created_time&fields[2]=dropdown
だとわかり、curl コマンドで確認したのですが、シンタックスエラーで進みません。
どなたか、指定方法をご存じの方は教えて下さい。
のらさん
> APIの仕様ではfieldsの指定方法が書いておらず
ドキュメントの冒頭に、
> リクエスト時にクエリで指定できる fields の添字は、0~99の範囲になります。
> リクエスト時にボディで指定できる fields数は 1000個までです。
といった記載があり、リクエストパラメータの部分で指定する値として文字列の配列にするよう書いてあります。
書いてないことはないですが、ちょっとわかりにくい感はあります。まとめると、
ボディ指定するなら、fields: [“$id”, “作成者”]
クエリ指定するなら、fields[0]=$id&fields[1]=作成者
※記法が違うだけで同じ配列です
とするようにということですね。ここでクセがあるのが後者です。リクエスト時にはクエリ部分はURLエンコードするという条件も付く点です。
URLエンコードについては、パーツとして「[」、「]」だけしておくと良いようです。なお、レコードIDの$idの「$」も必要のようです。
例えば、
fields[0]=$id -> fields%5b0%5d=%24id
fields[1]=作成者 -> fields%5b1%5d=作成者
とそれぞれ、主に「[」「]」だけ置き換えてこれらを「&」で結べばOKです。
cURLコマンドとしては、
curl -H "X-Cybozu-API-Token: API_TOKEN" "https://subdomain.cybozu.com/k/v1/records.json?app=187&fields%5B0%5D=$id&fields%5B1%5D=作成者"
のようになります。
私も転送量を減らしたく考察したことがありますので、よければこちらも御覧ください。
ちなみに、コーディング時はクエリしては面倒なので、基本的にボディで渡せるライブラリを選択するようにしています。