[aws-api-responsebuilder] API Gatewayのレスポンスを作るライブラリを公開しました

Serverless FrameworkやSAMでAPI Gateway + LambdaのAPIを作るとき、だいたいレスポンスをこんな感じで作ります。 このオブジェクトを毎回作るのがめんどくさくなってきたので、ビルダー […]

広告ここから
広告ここまで

目次

    Serverless FrameworkやSAMでAPI Gateway + LambdaのAPIを作るとき、だいたいレスポンスをこんな感じで作ります。

    module.exports.hello = async (event, context) => {
      return {
        statusCode: 200,
        body: JSON.stringify({
          message: 'Go Serverless v1.0! Your function executed successfully!',
          input: event,
        }),
      };
    };

    このオブジェクトを毎回作るのがめんどくさくなってきたので、ビルダーライブラリ作りました。

    使い方

    npm i -S aws-api-responsebuilderでインストールできます。

    あとはステータスコードとかbodyを入れていけばOKです。メソッドチェーン対応してます。

    import AWSAPIs from 'aws-api-responsebuilder'
    
    const { ResponseBuilder } = AWSAPIs
    ResponseBuilder.setStatusCode(400).setBody({
        message: `Invalid Request`,
        code: 'invalid_request'
    })
    console.log(ResponseBuilder.getResponse())
    
    { statusCode: 400,
      headers:
       { 'Access-Control-Allow-Origin': '*',
         'Access-Control-Allow-Credentials': true },
      body: '{"message":"Invalid Request","code":"invalid_request"}' }

    デフォルトだとCORS系のheaderもつけてますが、もちろんカスタマイズ可能です。API Document: https://hideokamoto.github.io/aws-api-responsebuilder/

    その他

    デフォルトのままgetResponse()すると500エラー返ってきます。なのでtry catchしてfinallyでこいつを返してやれば、事故ってもHTTP 500 / Inernal Errorを返してやるような実装ができます。

    import AWSAPIs from 'aws-api-responsebuilder'
    const { ResponseBuilder } = AWSAPIs
    
    export const hello = async (event, context) => {
      try {
        ResponseBuilder.setStatusCode(200).setBody({
          message: `hello world`
        })
      } catch (e) {
        if (e.code === 'UnAuthorized') {
          ResponseBuilder.setStatusCode(400).setBody({
            message: `Invalid Request`,
            code: 'invalid_request'
          })
        }
      } finally {
        return ResponseBuilder.getResponse()
      }
    };

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark