Community

コミュニティをご利用の際は 【ガイドライン】を確認・同意いただいた上でご利用ください。

  • 投稿

    アバターj.nakamura

    X-Api-Version: 2020-06-15 を指定した deals の POST がエラー

    X-Api-Version: 2020-06-15 を指定した deals の POST がエラーになってしまいます。
    X-Api-Version 指定なしの場合は普通に登録されます。

    * POST Data

    {“issue_date”:”2020-09-30″,”due_date”:”2020-10-31″,”type”:”income”,”ref_number”:”202009-22860-TEST1″,”partner_id”:21140257,”details”:[{“account_item_id”:226685101,”tax_code”:129,”amount”:50000,”vat”:0,”tag_ids”:[],”item_id”:162098513,”section_id”:641283},{“account_item_id”:226685082,”tax_code”:129,”amount”:5000,”vat”:0}],”company_id”:1422371}

    * Response

    {“status_code”:400,”errors”:[{“type”:”validation”,”messages”:[“company_id, details, issue_date, type が指定されていません。”]}]}

    原因をお教え願えますでしょうか。

    回答

    アバターyakumo

    ちょっと原因まではわかりませんが。
    エラーメッセージをみる限り json のフォーマットが適切でないのかなと思われます。

    リファレンスページでのリクエストや curl を使って同じリクエストしたときに正しく登録される場合は実装の問題でしょうか?

    * content-type が正しいかどうか
    * request で送っている json 形式が正しいかどうか

    パラメータに関しては最低限のパラメータに company_id などのみ指定して、レスポンスの変化をみていくことで原因を追求できるかと思います。

    アバターj.nakamura

    「X-Api-Version 指定なしの場合は普通に登録されます」と書いている通り、旧APIだと通るのでJSON等の問題じゃないのかなと思っています。company_id, details, issue_date, type もそれぞれ入れているので、何をすればよいのかわからず困っている状態です。

    アバターyakumo

    まずこちらでわかる情報を列挙します。

    * 新バージョン: POST 時にエラーが起きる
    * 旧バージョンではエラーが起きない
    * 起きているエラーは指定していると思われる company_id 等も指定されていない旨でてしまう

    かと思います。
    私が手元で試した状況として、新・旧ともに問題なく POST リクエストが通っています。
    なのでfreee側の不具合の可能性は現状低いかなと思っています。

    なのでこちらで現状想定できることは

    * header の content-type が適切に指定されていない
    * 上記の結果かリクエストパラメータが json として適切に認識されていない

    が考えられました。

    最初の投稿に貼っていただいたリクエストはそのままだと json として認識できませんが、
    そちらはおそらく投稿時のサニタイズの影響かと思っています。

    で、原因を追求する上でのアクションですが。

    1. リクエストヘッダーが適切か確認する。特に content-type が application/json になっているか?
    2. 何を利用してリクエストを投げているかわからないのですが curl 等を使ってリクエストを投げてみる

    になると思います。

    1. に関しては指定がない or 異なった指定であれば header を修正ください。
    ※ content-Type指定なしで新バージョンを実行すると別のエラーになるようなのでこちらの可能性は薄いかもしれません。

    2. に関しましては結果により異なりますが、普段の方法で生成している json パラメータを curl など原始的なツールでリクエストして差分を比較します。

    * curl や REST API ツールでリクエストがうまくいく場合 => request header に差分がないかを確認して対応する
    * curl や REST API ツールでもエラーになる場合 => エラー次第なので現状回答できない

    といったイメージです。

    アバターj.nakamura

    ヘッダーの指定が悪くエラーになっていたようです。

    エラーメッセージからすっかりデータに起因するものだと思い込みヘッダー周りを全く疑っておりませんでした。

    助かりました。ありがとうございます。