2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

API Endpointのエントリポイント・コードの書き方

Posted at

API Gatewayとかから飛んできたリクエストをLambdaでいい感じに処理する、よくあるバックエンドコード
この辺のいい感じの記述を模索してて最近こんな感じになっています。

最近の自分の書き方

/**
 * フォーマットに関してはこいつに任せる。
 */
const run = async(event, hoehoe) => {
  // どでかいtry-catchで例外をアプリ内に封じ込める
  try {
    // 悩むけどこの辺の情報はこっちでいいかな
    const name = event.pathParameters.name;

    // 処理は極力別クラスに任せる
    const service = new Service(hoehoe);
    const pet =service.getPet(name);

    // 仕様と対応するので正常系の出口は一箇所
    return getSuccessResponse({
      color: pet.color.value,
      size: pet.size || 99999,
    });
  } catch(error) {
    console.error(error);

    // 最低限の整形をしてエラーを通知する。ここはアプリの最終防衛ラインなので重点的にテスト
    return getErrorResponse(error);
  }
} 

/**
 * エントリポイント
 * 外部プラットフォーム依存するコードを集約する
 * ここは結合テストのスコープ(LamndaやAPI Gatewayのテスト機構を使う)
 */
exports.handler = async(event) => {
  return await run(
    event,
    process.env.HOGEHOGE // 環境変数はスコープがでかいので入り口で捕まえて引き回す
  );
};
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?