@@ -2,7 +2,10 @@ import nodeFetch from 'node-fetch';
22import * as querystring from 'querystring' ;
33
44import { QiitaError } from '../errors/QiitaError' ;
5+ import { QiitaForbiddenError } from '../errors/QiitaForbiddenError' ;
6+ import { QiitaInternalServerError } from '../errors/QiitaInternalServerError' ;
57import { QiitaNotFoundError } from '../errors/QiitaNotFoundError' ;
8+ import { QiitaRateLimitError } from '../errors/QiitaRateLimitError' ;
69import { QiitaUnauthorizedError } from '../errors/QiitaUnauthorizedError' ;
710import { QiitaURLResolveError } from '../errors/QiitaURLResolveError' ;
811
@@ -96,13 +99,22 @@ export abstract class Gateway {
9699 if ( response . ok ) {
97100 return data as T ;
98101 } 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
99105 switch ( response . status ) {
100106 case 401 :
101- throw new QiitaUnauthorizedError ( data . error ) ;
107+ throw new QiitaUnauthorizedError ( data . message || 'リクエストに必要な権限が不足しています。' ) ;
108+ case 403 :
109+ throw new QiitaForbiddenError ( data . message || 'このリクエストは禁止されています。' ) ;
102110 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 を返しました。ホストが混雑している可能性がありますので、時間をおいてもう一度お試しください。' ) ;
104116 default :
105- throw new QiitaError ( 'QiitaError' , data . error || 'Qiita APIのリクエスト中に予期せぬエラーが発生しました' ) ;
117+ throw new QiitaError ( 'QiitaError' , data . message || 'Qiita APIのリクエスト中に予期せぬエラーが発生しました' ) ;
106118 }
107119 }
108120 }
0 commit comments