Open motoyama-yusuke opened 3 years ago
こちら再現できるコードなどあるでしょうか? https://api.github.com/repos/NIFCLOUD-mbaas/UserCommunity/issues?per_page=19
を取得しようとするとエラーになるでしょうか?
システム要件上ではそのようなことがなく、原因が不明な状況のようです。
@goofmint さん
以下スクリプトで、Queryパラメタper_page
を指定して実行しています。
先程試したところ、per_page
=17を超えるとエラーとなります。
const request = require('superagent');
module.exports = async (req, res) => {
const response = await request
.get('https://api.github.com/repos/NIFCLOUD-mbaas/UserCommunity/issues?per_page='+req.query.per_page)
.send();
res.send({
status: response.status,
body: response.text
});
}
質問に上げた後、こちらでもいろいろ試し、 res.sendのbodyサイズに制限があるようなところまでは追いかけました。
JSON.parse(response.text);
をして、issueのurlのみ配列をbodyに設定 → OK
上記より、httpをget時は問題なし。内部の文字列処理もおそらく問題なし。ああ、per_page
ですね。つまり数を大きくするとデータ量が増えているということですね。
以下のようなコードにすると、per_page = 18 までいけます。
const request = require('superagent');
module.exports = async (req, res) => {
try {
const response = await request
.get('https://api.github.com/repos/NIFCLOUD-mbaas/UserCommunity/issues?per_page='+req.query.per_page)
.send();
res.send(response.text);
} catch (e) {
res.send(e);
}
}
他のコードでも試してみた限り、以下の部分は通過しています。なのでGitHubからのレスポンスの問題ではなさそうです。
const response = await request
.get('https://api.github.com/repos/NIFCLOUD-mbaas/UserCommunity/issues?per_page='+req.query.per_page)
.send();
となると per_page = 17 にした時に 64KBを超えているようなので、そのあたりにシステム制限がありそうな気がします。
こちら、64KBまでというのが仕様だそうです。後日ドキュメントにも反映されます。
@goofmint さん
情報ありがとうございます!
前回のコメントで、64KBというありがちな数字だったので、どこかに制限あるものと判断して、 調査は中断し、回避する方向にしていましたが、コメントなど書き込みできていませんでした。 すみません。
仕様ということが明確になり、スッキリしました。
外部APIを呼び出すスクリプトを作っていたところ、Scriptエラーとなりました。 いろいろ試した結果、何かのサイズ制限にあるように見えています。 ご存じの方いましたら教えて下さい。
実施内容
↓の記事を参考に、スクリプトを試していたとき、サイトによってはエラーとなっていた。 https://blog.mbaas.nifcloud.com/entry/2019/06/10/170113
データサイズに起因してそうな雰囲気があり、同じAPI(githubのissue api)を用いて、レスポンスサイズを変更して、エラーを検証した結果 ※記事のスクリプトを修正(urlは固定で埋め込み、
per_page
をパラメタ指定)して検証https://api.github.com/repos/NIFCLOUD-mbaas/UserCommunity/issues
を指定でエラーhttps://api.github.com/repos/NIFCLOUD-mbaas/UserCommunity/issues?per_page=1
とするとOK質問
superagent
で httpをgetする時?