Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

HTTP 요청을 통해 함수 호출

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

functions.https 를 사용하여 HTTP 요청을 통해 functions.https 를 트리거할 수 있습니다. 이를 통해 GET , POST , PUT , DELETEOPTIONS 와 같은 지원되는 HTTP 메서드를 통해 동기 함수를 호출할 수 있습니다.

이 페이지의 예는 함수 끝점에 HTTP GET 요청을 보낼 때 트리거되는 샘플 함수 를 기반으로 합니다. 샘플 함수는 현재 서버 시간을 검색하고, URL 쿼리 매개변수에 지정된 시간 형식을 지정하고, 결과를 HTTP 응답으로 보냅니다.

HTTP 요청으로 함수 트리거

functions.https 를 사용하여 HTTP 이벤트를 처리하는 함수를 만듭니다. HTTP 함수에 대한 이벤트 핸들러는 Express 웹 프레임워크에서 관리하는 라우터 및 앱을 지원하는 onRequest() 이벤트를 수신합니다.

Express 요청 및 응답 객체 사용

onRequest() 의 인수로 사용되는 Request 객체는 클라이언트가 보낸 HTTP 요청 속성에 대한 액세스를 제공하고 Response 객체는 응답을 클라이언트에 다시 보낼 수 있는 방법을 제공합니다.

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

기존 Express 앱 사용

ApponRequest() 의 인수로 사용하면 전체 Express 앱을 HTTP 함수에 전달할 수 있습니다. 상용구 코드는 다음과 같이 미들웨어로 이동할 수 있습니다.

const express = require('express');
const cors = require('cors');

const app = express();

// Automatically allow cross-origin requests
app.use(cors({ origin: true }));

// Add middleware to authenticate requests
app.use(myMiddleware);

// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));

// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);

HTTP 함수 호출

HTTP 함수를 배포한 후 고유한 URL을 통해 호출할 수 있습니다. URL에는 다음이 순서대로 포함됩니다.

  • 함수를 배포한 지역입니다. 일부 프로덕션 기능은 네트워크 대기 시간을 최소화하기 위해 위치 를 명시적으로 설정해야 할 수 있습니다.
  • Firebase 프로젝트 ID
  • cloudfunctions.net
  • 함수 이름

예를 들어 date() 를 호출하는 URL은 다음과 같습니다.

https://us-central1-<project-id>.cloudfunctions.net/date

함수를 배포할 때 권한 오류가 발생하면 배포 명령을 실행하는 사용자에게 적절한 IAM 역할 이 할당되었는지 확인하십시오.

Express 앱 라우팅을 사용하면 정의한 앱의 URL 경로에 함수 이름이 접두사로 추가됩니다. 예를 들어 위의 Express 앱 예제에서 getter를 호출하는 URL은 다음과 같습니다.

https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>

방화벽이나 IP 필터 뒤에서 HTTP 기능을 호출하는 경우 Google에서 HTTP 기능을 제공하는 데 사용하는 IP 주소를 조회 할 수 있습니다.

Cloud Functions에서 미들웨어 모듈 사용

쿠키 지원 또는 CORS와 같은 것에 대한 미들웨어 종속성을 주입해야 하는 경우 함수 내에서 이를 호출하십시오. 예를 들어 CORS 지원을 활성화하려면 다음 블록을 추가합니다.

// Enable CORS using the `cors` express middleware.
cors(req, res, () => {
  // ...
});

요청에서 값 읽기

다음 표에는 몇 가지 일반적인 시나리오가 나열되어 있습니다.

컨텐츠 타입 요청 본문 행동
application/json '{"name":"John"}' request.body.name 은 'John'과 같습니다.
application/octet-stream '내 문자' request.body 는 '6d792074657874'와 같습니다(요청의 원시 바이트, Node.js 버퍼 설명서 참조).
text/plain '내 문자' request.body 는 '내 텍스트'와 같습니다.
application/x-www-form-urlencoded '이름=존' request.body.name 은 'John'과 같습니다.

이 구문 분석은 다음 본문 구문 분석기에 의해 수행됩니다.

함수가 다음 요청으로 호출된다고 가정합니다.

curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'

전송된 데이터는 다음과 같이 구체화됩니다.

속성/방법
req.method "우편"
req.get('x-myheader') "123"
req.query.foo "바즈"
req.body.text "무엇"
req.rawBody 요청의 원시(파싱되지 않은) 바이트

date() 함수 예제에서 함수는 사용할 날짜/시간 형식을 설정하기 위해 format 값에 대한 URL 매개 변수와 본문을 모두 테스트합니다.

let format = req.query.format;
format = req.body.format;

HTTP 기능 종료

항상 send() , redirect() 또는 end() 로 HTTP 함수를 종료합니다. 그렇지 않으면 함수가 계속 실행되고 시스템에 의해 강제로 종료될 수 있습니다. 동기화, 비동기 및 약속 도 참조하십시오.

Node.js moment 모듈을 사용하여 서버 시간을 검색하고 형식화한 후 date() 함수는 결과를 HTTP 응답으로 전송하여 끝납니다.

const formattedDate = moment().format(`${format}`);
functions.logger.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

Firebase 호스팅에 HTTP 기능 연결

HTTP 함수를 Firebase 호스팅에 연결할 수 있습니다. Firebase 호스팅 사이트의 요청은 특정 HTTP 함수로 프록시될 수 있습니다. 이를 통해 HTTP 기능과 함께 고유한 사용자 지정 도메인을 사용할 수도 있습니다. Cloud Functions를 Firebase 호스팅에 연결하는 방법에 대해 자세히 알아보세요.