API REST của dịch vụ lưu trữ Firebase cho phép triển khai theo chương trình và có thể tùy chỉnh cho các trang web được lưu trữ trên Firebase của bạn. Sử dụng API REST này để triển khai cấu hình và nội dung Lưu trữ mới hoặc cập nhật.
Để thay thế cho việc sử dụng Firebase CLI để triển khai, bạn có thể sử dụng API REST của Firebase Hosting để tạo version
tài sản mới cho trang web của mình theo chương trình, tải tệp lên phiên bản, sau đó triển khai phiên bản lên trang web của bạn.
Ví dụ: với API REST của dịch vụ lưu trữ Firebase, bạn có thể:
Lên lịch triển khai. Bằng cách sử dụng API REST kết hợp với công việc định kỳ, bạn có thể thay đổi nội dung được lưu trữ trên Firebase theo lịch trình thường xuyên (ví dụ: để triển khai phiên bản nội dung liên quan đến sự kiện hoặc ngày lễ đặc biệt).
Tích hợp với các công cụ dành cho nhà phát triển. Bạn có thể tạo tùy chọn trong công cụ của mình để triển khai các dự án ứng dụng web lên Firebase Hosting chỉ bằng một cú nhấp chuột (ví dụ: nhấp vào nút triển khai trong IDE).
Tự động triển khai khi nội dung tĩnh được tạo. Khi một quy trình tạo ra nội dung tĩnh theo chương trình (ví dụ: nội dung do người dùng tạo như wiki hoặc một bài báo), bạn có thể triển khai nội dung được tạo dưới dạng tệp tĩnh thay vì phân phát chúng một cách linh hoạt. Điều này giúp bạn tiết kiệm năng lượng tính toán đắt tiền và phục vụ các tệp của bạn theo cách có thể mở rộng hơn.
Hướng dẫn này trước tiên mô tả cách bật, xác thực và ủy quyền API. Sau đó, hướng dẫn này sẽ trình bày một ví dụ để tạo phiên bản Firebase Hosting, tải các tệp cần thiết lên phiên bản, sau đó cuối cùng là triển khai phiên bản.
Bạn cũng có thể tìm hiểu thêm về API REST này trong tài liệu tham khảo đầy đủ về API REST của Hosting .
Trước khi bạn bắt đầu: Kích hoạt API REST
Bạn phải bật API REST của Firebase Hosting trong bảng điều khiển API của Google:
Mở trang API lưu trữ Firebase trong bảng điều khiển API của Google.
Khi được nhắc, hãy chọn dự án Firebase của bạn.
Nhấp vào Bật trên trang API lưu trữ Firebase.
Bước 1: Nhận mã thông báo truy cập để xác thực và ủy quyền các yêu cầu API
Các dự án Firebase hỗ trợ các tài khoản dịch vụ của Google mà bạn có thể sử dụng để gọi API máy chủ Firebase từ máy chủ ứng dụng hoặc môi trường đáng tin cậy của mình. Nếu bạn đang phát triển mã cục bộ hoặc triển khai ứng dụng của mình tại chỗ, bạn có thể sử dụng thông tin xác thực có được thông qua tài khoản dịch vụ này để ủy quyền cho các yêu cầu máy chủ.
Để xác thực tài khoản dịch vụ và ủy quyền cho tài khoản đó truy cập các dịch vụ Firebase, bạn phải tạo tệp khóa riêng ở định dạng JSON.
Để tạo tệp khóa riêng cho tài khoản dịch vụ của bạn:
Trong bảng điều khiển Firebase, hãy mở Cài đặt > Tài khoản dịch vụ .
Nhấp vào Tạo khóa riêng mới , sau đó xác nhận bằng cách nhấp vào Tạo khóa .
Lưu trữ an toàn tệp JSON chứa khóa.
Sử dụng thông tin xác thực Firebase của bạn cùng với Thư viện Google Auth cho ngôn ngữ ưa thích của bạn để truy xuất mã thông báo truy cập OAuth 2.0 tồn tại trong thời gian ngắn:
nút.js
const {google} = require('googleapis'); function getAccessToken() { return new Promise(function(resolve, reject) { var key = require('./service-account.json'); var jwtClient = new google.auth.JWT( key.client_email, null, key.private_key, SCOPES, null ); jwtClient.authorize(function(err, tokens) { if (err) { reject(err); return; } resolve(tokens.access_token); }); }); }
Trong ví dụ này, thư viện ứng dụng khách Google API xác thực yêu cầu bằng mã thông báo web JSON hoặc JWT. Để biết thêm thông tin, hãy xem Mã thông báo web JSON .
Python
def _get_access_token(): """Retrieve a valid access token that can be used to authorize requests. :return: Access token. """ credentials = ServiceAccountCredentials.from_json_keyfile_name( 'service-account.json', SCOPES) access_token_info = credentials.get_access_token() return access_token_info.access_token
Java
private static String getAccessToken() throws IOException { GoogleCredential googleCredential = GoogleCredential .fromStream(new FileInputStream("service-account.json")) .createScoped(Arrays.asList(SCOPES)); googleCredential.refreshToken(); return googleCredential.getAccessToken(); }
Sau khi mã thông báo truy cập của bạn hết hạn, phương thức làm mới mã thông báo sẽ được gọi tự động để truy xuất mã thông báo truy cập đã cập nhật.
Bước 2: Đảm bảo rằng dự án của bạn có trang web Lưu trữ mặc định
Trước khi triển khai lần đầu tiên lên Dịch vụ lưu trữ Firebase, dự án Firebase của bạn phải có SITE
Lưu trữ mặc định .
Kiểm tra xem dự án của bạn đã có trang web Lưu trữ mặc định hay chưa bằng cách gọi điểm cuối
sites.list
.Ví dụ:
lệnh cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
Yêu cầu HTTPS thô
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Nếu một trong các trang web có
"type": "DEFAULT_SITE"
thì dự án của bạn đã có trang web Lưu trữ mặc định. Bỏ qua phần còn lại của bước này và chuyển sang bước tiếp theo: Tạo phiên bản mới cho trang web của bạn .Nếu bạn nhận được một mảng trống thì bạn không có trang web Lưu trữ mặc định. Hoàn thành phần còn lại của bước này.
Quyết định
SITE_ID
cho trang web Lưu trữ mặc định của bạn. Hãy ghi nhớ những điều sau khi quyết địnhSITE_ID
này :SITE_ID
này được sử dụng để tạo tên miền phụ Firebase mặc định của bạn:SITE_ID .web.app
vàSITE_ID .firebaseapp.com
.SITE_ID
có các yêu cầu sau:- Phải là nhãn tên máy chủ hợp lệ, nghĩa là nó không thể chứa
.
,_
, vân vân. - Phải có 30 ký tự trở xuống
- Phải là duy nhất trên toàn cầu trong Firebase
- Phải là nhãn tên máy chủ hợp lệ, nghĩa là nó không thể chứa
Lưu ý rằng chúng tôi thường khuyên bạn nên sử dụng ID dự án làm
SITE_ID
cho trang web Lưu trữ mặc định của mình. Tìm hiểu cách tìm ID này trong Tìm hiểu dự án Firebase .Tạo trang web Lưu trữ mặc định của bạn bằng cách gọi điểm cuối
sites.create
bằng cách sử dụngSITE_ID
mà bạn mong muốn làm tham sốsiteId
.Ví dụ:
lệnh cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
Yêu cầu HTTPS thô
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Lệnh gọi API tới
sites.create
này trả về JSON sau:{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
Bước 3: Tạo phiên bản mới cho trang web của bạn
Cuộc gọi API đầu tiên của bạn là tạo Version
mới cho trang web của bạn. Ở phần sau của hướng dẫn này, bạn sẽ tải tệp lên phiên bản này, sau đó triển khai nó lên trang web của mình.
Xác định SITE_ID cho trang web mà bạn muốn triển khai.
Gọi điểm cuốiversions.create bằng cách sử dụng SITE_ID của bạn trong cuộc gọi.
(Tùy chọn) Bạn cũng có thể chuyển đối tượng cấu hình Firebase Hosting trong cuộc gọi, bao gồm cả việc đặt tiêu đề lưu trữ tất cả các tệp trong một khoảng thời gian được chỉ định.
Ví dụ:
lệnh cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions
Yêu cầu HTTPS thô
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 134 { "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
Lệnh gọi API tới versions.create
này trả về JSON sau:
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "CREATED", "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
Phản hồi này chứa mã định danh duy nhất cho phiên bản mới, ở định dạng: sites/ SITE_ID /versions/ VERSION_ID
. Bạn sẽ cần mã định danh duy nhất này trong suốt hướng dẫn này để tham khảo phiên bản cụ thể này.
Bước 4: Chỉ định danh sách file muốn triển khai
Bây giờ bạn đã có mã định danh phiên bản mới, bạn cần cho Firebase Hosting biết những tệp nào bạn muốn triển khai trong phiên bản mới này.
Lưu ý rằng Hosting có giới hạn kích thước tối đa là 2 GB cho từng file riêng lẻ.
API này yêu cầu bạn xác định tệp bằng hàm băm SHA256. Vì vậy, trước khi có thể thực hiện lệnh gọi API, trước tiên bạn cần tính toán hàm băm cho từng tệp tĩnh bằng cách Gzipping các tệp, sau đó lấy hàm băm SHA256 của mỗi tệp mới được nén.
Tiếp tục ví dụ của chúng tôi, giả sử bạn muốn triển khai ba tệp trong phiên bản mới: file1
, file2
và file3
.
Gzip các tập tin:
gzip file1 && gzip file2 && gzip file3
Bây giờ bạn có ba tệp nén
file1.gz
,file2.gz
vàfile3.gz
.Lấy hàm băm SHA256 của mỗi tệp nén:
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
Bây giờ bạn có ba hàm băm SHA256 của ba tệp nén.
Gửi ba giá trị băm này trong một yêu cầu API tới điểm
versions.populateFiles
. Liệt kê từng hàm băm theo đường dẫn mong muốn cho tệp được tải lên (trong ví dụ này là/file1
,/file2
và/file3
).Ví dụ:
lệnh cURL
$ curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles
Yêu cầu HTTPS thô
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 181 { "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }
Lệnh gọi API versions.populateFiles
này trả về JSON sau:
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
Phản hồi này bao gồm:
Hàm băm của mỗi tệp cần được tải lên. Ví dụ: trong ví dụ này,
file1
đã được tải lên ở phiên bản trước, do đó hàm băm của nó không được đưa vào danh sáchuploadRequiredHashes
.uploadUrl
dành riêng cho phiên bản mới.
Trong bước tiếp theo để tải hai tệp mới lên, bạn sẽ cần giá trị băm và uploadURL
từ phản versions.populateFiles
.
Bước 5: Tải lên các tập tin cần thiết
Bạn cần tải lên riêng từng tệp được yêu cầu (những tệp được liệt kê trong uploadRequiredHashes
từ phản versions.populateFiles
ở bước trước). Để tải lên tệp này, bạn sẽ cần băm tệp và uploadUrl
từ bước trước.
Nối dấu gạch chéo lên và hàm băm của tệp vào
uploadUrl
để tạo URL dành riêng cho tệp theo định dạng:https://upload-firebasehosting.googleapis.com/upload/sites/ SITE_ID /versions/ VERSION_ID /files/ FILE_HASH
.Tải từng tệp được yêu cầu lên (trong ví dụ này chỉ
file2.gz
vàfile3.gz
) lên URL dành riêng cho tệp bằng cách sử dụng một loạt yêu cầu.Ví dụ: để tải lên
file2.gz
đã nén:lệnh cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @./file2.gz \ https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
Yêu cầu HTTPS thô
Host: upload-firebasehosting.googleapis.com POST /upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/octet-stream Content-Length: 500 content-of-file2.gz
Tải lên thành công sẽ trả về phản hồi HTTPS 200 OK
.
Bước 6: Cập nhật trạng thái phiên bản thành FINALIZED
Sau khi tải lên tất cả các tệp được liệt kê trong phản versions.populateFiles
, bạn có thể cập nhật trạng thái phiên bản của mình thành FINALIZED
.
Gọi điểm versions.patch
với trường status
trong yêu cầu API của bạn được đặt thành FINALIZED
.
Ví dụ:
lệnh cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"status": "FINALIZED"}' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status
Yêu cầu HTTPS thô
Host: firebasehosting.googleapis.com PATCH /v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 23 {"status": "FINALIZED"}
Lệnh gọi API tới versions.patch
này trả về JSON sau. Kiểm tra xem status
đã được cập nhật thành FINALIZED
.
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] }, "createTime": "2018-12-02T13:41:56.905743Z", "createUser": { "email": "SERVICE_ACCOUNT_EMAIL@SITE_ID.iam.gserviceaccount.com" }, "finalizeTime": "2018-12-02T14:56:13.047423Z", "finalizeUser": { "email": "USER_EMAIL@DOMAIN.tld" }, "fileCount": "5", "versionBytes": "114951" }
Bước 7: Phát hành phiên bản để triển khai
Bây giờ bạn đã có phiên bản hoàn thiện, hãy phát hành nó để triển khai. Đối với bước này, bạn cần tạo Release
phiên bản chứa cấu hình lưu trữ và tất cả các tệp nội dung cho phiên bản mới của bạn.
Gọi điểm cuối releases.create
để tạo bản phát hành của bạn.
Ví dụ:
lệnh cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID
Yêu cầu HTTPS thô
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1 Authorization: Bearer ACCESS_TOKEN
Lệnh gọi API tới releases.create
này trả về JSON sau:
{ "name": "sites/SITE_ID/releases/RELEASE_ID", "version": { "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] } }, "type": "DEPLOY", "releaseTime": "2018-12-02T15:14:37Z" }
Cấu hình lưu trữ và tất cả các tệp cho phiên bản mới bây giờ sẽ được triển khai vào trang web của bạn và bạn có thể truy cập các tệp của mình bằng URL:
-
https:// SITE_ID .web.app/file1
-
https:// SITE_ID .web.app/file2
-
https:// SITE_ID .web.app/file3
Những tệp này cũng có thể truy cập được trên các URL được liên kết với miền SITE_ID .firebaseapp.com
của bạn.
Bạn cũng có thể xem bản phát hành mới của mình được liệt kê trong trang tổng quan Lưu trữ của bảng điều khiển Firebase.