Skip to content

Commit 8cb2705

Browse files
committed
➕ 403, 429, 500用のエラークラスを追加
1 parent dac0384 commit 8cb2705

File tree

4 files changed

+36
-3
lines changed

4 files changed

+36
-3
lines changed

src/client/Gateway.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import nodeFetch from 'node-fetch';
22
import * as querystring from 'querystring';
33

44
import { QiitaError } from '../errors/QiitaError';
5+
import { QiitaForbiddenError } from '../errors/QiitaForbiddenError';
6+
import { QiitaInternalServerError } from '../errors/QiitaInternalServerError';
57
import { QiitaNotFoundError } from '../errors/QiitaNotFoundError';
8+
import { QiitaRateLimitError } from '../errors/QiitaRateLimitError';
69
import { QiitaUnauthorizedError } from '../errors/QiitaUnauthorizedError';
710
import { 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
}

src/errors/QiitaForbiddenError.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { QiitaError } from './QiitaError';
2+
3+
export class QiitaForbiddenError extends QiitaError {
4+
constructor (message: string) {
5+
super('QiitaForbiddenError', message);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { QiitaError } from './QiitaError';
2+
3+
export class QiitaInternalServerError extends QiitaError {
4+
constructor (message: string) {
5+
super('QiitaInternalServerError', message);
6+
}
7+
}

src/errors/QiitaRateLimitError.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { QiitaError } from './QiitaError';
2+
3+
export class QiitaRateLimitError extends QiitaError {
4+
constructor (message: string) {
5+
super('QiitaRateLimitError', message);
6+
}
7+
}

0 commit comments

Comments
 (0)