programing

AWS API 게이트웨이 메서드 응답에 대한 유형 스크립트에서 AWS 람다 응답과 함께 반환되는 유형은 무엇입니까?

muds 2023. 6. 10. 09:51
반응형

AWS API 게이트웨이 메서드 응답에 대한 유형 스크립트에서 AWS 람다 응답과 함께 반환되는 유형은 무엇입니까?

저는 AWS 람다에서 적절한 타이프스크립트 프로젝트를 구축하고 싶습니다.

현재 저는 다음과 같은 정의를 가지고 있습니다.

export type HttpResponse = {
  statusCode: number;
  headers: {};
  body: string;
}

export async function readCollection (event, context, callback): Promise<HttpResponse>{

  console.log(event); // Contains incoming request data (e.g., query params, headers and more)

  const data =  [
    {
      id: "a7b5bf50-0b5b-11e9-bc65-6bfc39f23288",
      name: "some thing",
      uri: `/notifications/a7b5bf50-0b5b-11e9-bc65-6bfc39f23288`
    }
  ]

  const response = {
    statusCode: 200,
    headers: {
    },
    body: JSON.stringify({
      status: "ok",
      data: data
     })
  };

  return response;
};

그렇지만

내 관습 대신에HttpResponse형식, 공식 정의를 사용합니다.

그런데 어떤 공식적인 유형을 수입해서 반품해야 합니까?

@types/aws-lambda 패키지는 AWS Lambda 함수 내에서 TypeScript를 사용하기 위한 유형을 제공합니다.API Gateway의 Lambda Proxy 통합 유형을 사용하여 호출된 AWS Lambda 함수의 경우 다음 단계를 수행합니다.

패키지 설치

$ yarn add --dev @types/aws-lambda

또는 npm을 선호하는 경우:

$ npm i --save-dev @types/aws-lambda

그런 다음 핸들러 파일에서:

import { APIGatewayProxyEvent, Context, APIGatewayProxyResult } from "aws-lambda"

export async function hello (event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Hello world',
      input: event,
    })
  }
}

며칠간의 연구 끝에 저는 답이 매우 가깝다는 것을 발견했습니다 ;)

당신은 돌아옵니다.Promise<APIGateway.MethodResponse>

import { APIGateway } from "aws-sdk";

export async function readCollection (event, context, callback): Promise<APIGateway.MethodResponse> {

  console.log(event); // Contains incoming request data (e.g., query params, headers and more)

  const data =  [
    {
      id: "a7b5bf50-0b5b-11e9-bc65-6bfc39f23288",
      name: "some thing",
      uri: `/notifications/a7b5bf50-0b5b-11e9-bc65-6bfc39f23288`
    }
  ]

  const response = {
    statusCode: "200",
    headers: {
    },
    body: JSON.stringify({
      status: "ok",
      data: data
     })
  };

  return response;
};

AWS Lambda 유형은 핸들러를 다음과 같이 정의합니다.

export type Handler<TEvent = any, TResult = any> = (
    event: TEvent,
    context: Context,
    callback: Callback<TResult>,
) => void | Promise<TResult>;

제네릭 덕분에 기본적으로 반품 유형을 결정할 수 있습니다.

람다(예: API Gateway)와 함께 다른 AWS 서비스를 사용하는 경우 입력 내용과 반응이 다를 수 있습니다.


처리기 유형에 대한 링크: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/aws-lambda/index.d.ts#L1076-L1089

람다가 s3 put에 의해 트리거된 경우 콜백을 반환해야 합니다. 그렇지 않으면 람다가 실행되지 않은 것으로 간주되며 중복된 콜을 생성하는 기능을 계속 실행합니다.또한 사용자에게 적절한 응답을 보낼 수 있도록 API 게이트웨이 요청에서 콜백을 반환해야 합니다.

성공 상담의 경우:

callback(null, response);

오류 호출의 경우:

callback(error, null);

언급URL : https://stackoverflow.com/questions/53976371/which-type-do-i-return-with-aws-lambda-responses-in-typescript-to-suite-aws-apig

반응형