Bạn có thể kích hoạt một chức năng thông qua yêu cầu HTTP bằng cách sử dụng functions.https
. Điều này cho phép bạn gọi một hàm đồng bộ thông qua các phương thức HTTP được hỗ trợ sau: GET
, POST
, PUT
, DELETE
và OPTIONS
.
Các ví dụ trong trang này dựa trên hàm mẫu kích hoạt khi bạn gửi yêu cầu HTTP GET
đến điểm cuối của hàm. Hàm mẫu truy xuất thời gian máy chủ hiện tại, định dạng thời gian như được chỉ định trong tham số truy vấn URL và gửi kết quả trong phản hồi HTTP.
Kích hoạt một chức năng với một yêu cầu HTTP
Sử dụng functions.https
để tạo một hàm xử lý các sự kiện HTTP. Trình xử lý sự kiện cho một hàm HTTP lắng nghe sự kiện onRequest()
, sự kiện này hỗ trợ các bộ định tuyến và ứng dụng do khung web Express quản lý.
Sử dụng các đối tượng yêu cầu và phản hồi nhanh
Được sử dụng làm đối số cho onRequest()
, đối tượng Yêu cầu cung cấp cho bạn quyền truy cập vào các thuộc tính của yêu cầu HTTP do ứng dụng khách gửi và đối tượng Phản hồi cung cấp cho bạn cách gửi phản hồi lại cho ứng dụng khách.
exports.date = functions.https.onRequest((req, res) => { // ... });
Sử dụng các ứng dụng Express hiện có
Sử dụng Ứng dụng làm đối số cho onRequest()
, bạn có thể chuyển toàn bộ ứng dụng Express sang hàm HTTP. Mã soạn sẵn có thể được chuyển sang phần mềm trung gian như được hiển thị:
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);
Gọi một hàm HTTP
Sau khi bạn triển khai một chức năng HTTP, bạn có thể gọi nó thông qua URL duy nhất của chính nó. URL bao gồm những thứ sau đây, theo thứ tự:
- Khu vực (hoặc các khu vực) mà bạn đã triển khai chức năng của mình. Một số chức năng sản xuất có thể cần đặt vị trí một cách rõ ràng để giảm thiểu độ trễ của mạng.
- ID dự án Firebase của bạn
-
cloudfunctions.net
- Tên chức năng của bạn
Ví dụ: URL để gọi date()
trông như thế này:
https://us-central1-<project-id>.cloudfunctions.net/date
Nếu bạn gặp lỗi về quyền khi triển khai các chức năng, hãy đảm bảo rằng các vai trò IAM thích hợp được gán cho người dùng đang chạy các lệnh triển khai.
Với định tuyến ứng dụng Express, tên chức năng được thêm dưới dạng tiền tố vào đường dẫn URL trong ứng dụng mà bạn xác định. Ví dụ: URL để gọi trình thu thập trong ví dụ ứng dụng Express ở trên trông giống như sau:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
Nếu gọi các chức năng HTTP phía sau tường lửa hoặc bộ lọc IP, bạn có thể tra cứu các địa chỉ IP mà Google sử dụng để phục vụ các chức năng HTTP.
Sử dụng các mô-đun phần mềm trung gian với Chức năng đám mây
Nếu bạn cần thêm các phụ thuộc phần mềm trung gian cho những thứ như hỗ trợ cookie hoặc CORS, hãy gọi chúng trong hàm. Ví dụ: để bật hỗ trợ CORS, hãy thêm khối sau:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
Đọc các giá trị từ yêu cầu
Bảng sau đây liệt kê một số tình huống phổ biến:Loại nội dung | Nội dung yêu cầu | Hành vi |
---|---|---|
application/json | '{"name":"John"}' | request.body.name bằng 'John' |
application/octet-stream | 'Văn bản của tôi' | request.body bằng '6d792074657874' (các byte thô của yêu cầu; xem tài liệu Bộ đệm Node.js ) |
text/plain | 'Văn bản của tôi' | request.body bằng 'văn bản của tôi' |
application/x-www-form-urlencoded | 'tên=John' | request.body.name bằng 'John' |
Việc phân tích cú pháp này được thực hiện bởi các trình phân tích cú pháp nội dung sau:
- Trình phân tích cú pháp cơ thể JSON
- Trình phân tích cú pháp cơ thể thô
- Trình phân tích nội dung văn bản
- Trình phân tích cú pháp nội dung biểu mẫu được mã hóa URL
Giả sử hàm của bạn được gọi với yêu cầu sau:
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'
sau đó dữ liệu đã gửi sẽ được cụ thể hóa dưới:
Thuộc tính/Phương thức | Giá trị |
---|---|
req.method | "BƯU KIỆN" |
req.get('x-myheader') | "123" |
req.query.foo | "baz" |
req.body.text | "thứ gì đó" |
req.rawBody | Các byte thô (chưa phân tích cú pháp) của yêu cầu |
Trong ví dụ về hàm date()
, hàm kiểm tra cả tham số URL và phần thân để tìm giá trị format
nhằm đặt định dạng ngày/giờ sẽ sử dụng:
let format = req.query.format; format = req.body.format;
Chấm dứt chức năng HTTP
Luôn kết thúc chức năng HTTP bằng send()
, redirect()
hoặc end()
. Nếu không, chức năng của bạn có thể tiếp tục chạy và bị hệ thống buộc chấm dứt. Xem thêm Đồng bộ hóa, Không đồng bộ và Lời hứa .
Sau khi truy xuất và định dạng thời gian của máy chủ bằng mô-đun moment
Node.js, hàm date()
kết thúc bằng cách gửi kết quả trong phản hồi HTTP:
const formattedDate = moment().format(`${format}`); functions.logger.log('Sending Formatted date:', formattedDate); res.status(200).send(formattedDate);
Kết nối các chức năng HTTP với Firebase Hosting
Bạn có thể kết nối chức năng HTTP với Dịch vụ lưu trữ Firebase. Các yêu cầu trên trang Lưu trữ Firebase của bạn có thể được ủy quyền cho các chức năng HTTP cụ thể. Điều này cũng cho phép bạn sử dụng miền tùy chỉnh của riêng mình với chức năng HTTP. Tìm hiểu thêm về cách kết nối Chức năng đám mây với Dịch vụ lưu trữ Firebase .