LoginSignup
0
0

More than 1 year has passed since last update.

APIを使ってエラーになった時の原因記録

Last updated at Posted at 2022-02-16

基本的な原因は、「無知」。でも記録しないと忘れるのでメモしていきます。

Qiita

事象 : CURLで&(アンパサンド)を使って複数の引数を送ったら、引数の条件に合わないレスポンスが返ってきた

  • 環境
    • Windows 10 Pro バージョン32H1
    • curl 7.81.0 (x86_64-w64-mingw32)

直近の自分の記事を1件取得・・・するはずが・・・自分以外の記事が返ってきた。

$ curl -H 'Authorization: Bearer {トークン}' https://qiita.com/api/v2/items?page=1&per_page=1&query=user:ponsuke0531
[1] 1405
[2] 1406
[2]+  Done                    per_page=1

$ [{"rendered_body":...省略..., id":"syutorum001","items_count":4,"linkedin_id":"",...省略...

原因 : &はシェルの制御に使うわれるので、引数に&がある場所で引数の解釈が終わっているから

  1. 参考
    1. curlでGETリクエスト送る時の注意点 - Smoky God Express
    2. cURLコマンドで「クエリ文字列が在るURL」を扱うときはURLを囲もう、という話 | DevelopersIO
# 以下を送ったのと同じことになっている
$ curl -H 'Authorization: Bearer {トークン}' https://qiita.com/api/v2/items?page=1
# 以下の出力が「バックグラウンドで実行したよ」ということなんだろうな・・・・
[2]+  Done                    per_page=1

対応 : ダブルクォーテーションで囲むか、&をエスケープする

「ダブルクォーテーションで囲む」の対応にしておくとMacなどでzsh: no matches found:になるのを防止する効果もあります。

# ダブルクォーテーションで囲む
$ curl -H 'Authorization: Bearer {トークン}' "https://qiita.com/api/v2/items?page=1&per_page=1&query=user:ponsuke0531"
[{"rendered_body":...省略...,"id":"ponsuke0531","items_count":475,"linkedin_id":"",...省略...

# &をエスケープする
$ curl -H 'Authorization: Bearer {トークン}' https://qiita.com/api/v2/items?page=1\&per_page=1\&query=user:ponsuke0531
[{"rendered_body":...省略...,"id":"ponsuke0531","items_count":475,"linkedin_id":"",...省略...

Backlog

事象 : "message":"","code":1,"moreInfo":""

Exception: Request failed for https://xx.backlog.com returned code 400. Truncated server response: {"errors":[{"message":"","code":1,"moreInfo":""}]} (use muteHttpExceptions option to examine full response)
for (let i = 0; i < attachments.length; i++) {
  // Backlogに添付ファイルを送信して発行されたIDをペーロードに追加する.
  payload['attachmentId[' + i + ']'] = post_attachment(attachments[i]);
}
/** @type {string} 課題コメントの追加のAPIのエンドポイント. */
let endpoint = backlog_url + '/api/v2/issues/' + issueKey + '/comments?apiKey=' + backlog_apikey;
let params = {
  method : 'POST',
  payload : payload
};
// 課題コメントの追加で添付ファイルを課題に添付する.
UrlFetchApp.fetch(endpoint, params);

原因 : フリープランでは課題に添付ファイルは1つしかできないから

送信先のBacklogはフリープランだった・・・。
そして、対象の課題には既に添付ファイルがあった。
ブラウザで課題にファイルを添付しようとするとちゃんとメッセージが表示された。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0