[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()
}
};