Backlogに新規で課題を追加する際にハマった話

こんにちは。hacknoteのr.katoです。

クラメソさんが

結論としては、リクエストに生成されるURIが長すぎるとBacklogAPIが実行できないことがわかりました。 サンプルスクリプトではBacklog APIを利用してpython requestsモジュールでPOSTリクエストを行っています。
…略…
APIをリクエストする際、descrptionに入るチケット説明文が長文であったりパラメータを付与しすぎるとエラーとなってしまいます。

引用: https://dev.classmethod.jp/cloud/aws/httpdev-classmethod-jpcloudawsamazon-api-gateway-zendesk-backlog-2/

と行った感じでハマっており、とりあえずエラーしたら課題内容なしでタイトルのみで課題作成という風にしていたので、文字数の限界を伸ばす方法を紹介していきます。

方法

結論としては…

paramsでapi key認証して、dataでpostしたい内容を送る!!

です!

クラメソさんのもともとの方法だと、

import requests

PARAMS={
    'apiKey':API_KEY,
    'projectId':projectId,
    'summary':summary,
    'description':description,
    'issueTypeId':issueTypeId,
    'priorityId':3,
    'assigneeId':userId
}
requests.post(api_url,params=PARAMS)

でした。
しかし、この方法だと、 {'errors': [{'message': 'Invalid Request. An HTTP line is larger than 4096 bytes.', 'code': 7, 'moreInfo': ''}]} と言ったエラーが文字数次第では返ってきてしまうことがあります。

そこで、次のようにします。

import requests

DATA={
    'projectId':projectId,
    'summary':summary,
    'description':description,
    'issueTypeId':issueTypeId,
    'priorityId':3,
    'assigneeId':userId
}
requests.post(api_url,params={'apiKey':API_KEY},data=DATA)

こうすることで、送れる文字数を増やすことができます。

詳しい、apiの情報は公式のドキュメントに書いてあるので参考にしてください。
( https://developer.nulab.com/ja/docs/backlog/api/2/add-issue/ )