functions.https 를 사용하여 HTTP 요청을 통해 functions.https
를 트리거할 수 있습니다. 이를 통해 GET
, POST
, PUT
, DELETE
및 OPTIONS
와 같은 지원되는 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 앱 사용
App 을 onRequest()
의 인수로 사용하면 전체 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 호스팅에 연결하는 방법에 대해 자세히 알아보세요.