@@ -2,7 +2,10 @@ import nodeFetch from 'node-fetch';
2
2
import * as querystring from 'querystring' ;
3
3
4
4
import { QiitaError } from '../errors/QiitaError' ;
5
+ import { QiitaForbiddenError } from '../errors/QiitaForbiddenError' ;
6
+ import { QiitaInternalServerError } from '../errors/QiitaInternalServerError' ;
5
7
import { QiitaNotFoundError } from '../errors/QiitaNotFoundError' ;
8
+ import { QiitaRateLimitError } from '../errors/QiitaRateLimitError' ;
6
9
import { QiitaUnauthorizedError } from '../errors/QiitaUnauthorizedError' ;
7
10
import { QiitaURLResolveError } from '../errors/QiitaURLResolveError' ;
8
11
@@ -96,13 +99,22 @@ export abstract class Gateway {
96
99
if ( response . ok ) {
97
100
return data as T ;
98
101
} else {
102
+ // Qiitaがエラーの際に返すレスポンスコードが明記されていなかったので
103
+ // ありそうなものをハンドルしています。
104
+ // ref: https://qiita.com/api/v2/docs#%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89
99
105
switch ( response . status ) {
100
106
case 401 :
101
- throw new QiitaUnauthorizedError ( data . error ) ;
107
+ throw new QiitaUnauthorizedError ( data . message || 'リクエストに必要な権限が不足しています。' ) ;
108
+ case 403 :
109
+ throw new QiitaForbiddenError ( data . message || 'このリクエストは禁止されています。' ) ;
102
110
case 404 :
103
- throw new QiitaNotFoundError ( data . error ) ;
111
+ throw new QiitaNotFoundError ( data . message || '指定したエンドポイントが見つかりませんでした' ) ;
112
+ case 429 :
113
+ throw new QiitaRateLimitError ( data . message || 'APIのレートリミットに到達しました。時間をおいてもう一度お試しください。' ) ;
114
+ case 500 :
115
+ throw new QiitaInternalServerError ( data . message || 'Qiitaのサーバーが internal server error を返しました。ホストが混雑している可能性がありますので、時間をおいてもう一度お試しください。' ) ;
104
116
default :
105
- throw new QiitaError ( 'QiitaError' , data . error || 'Qiita APIのリクエスト中に予期せぬエラーが発生しました' ) ;
117
+ throw new QiitaError ( 'QiitaError' , data . message || 'Qiita APIのリクエスト中に予期せぬエラーが発生しました' ) ;
106
118
}
107
119
}
108
120
}
0 commit comments