Bạn có thể sử dụng HttpService để gửi các yêu cầu HTTP tổng quát đến các dịch vụ web bên thứ ba cho các trường hợp như phân tích, lưu trữ dữ liệu hoặc ghi lại lỗi. HttpService cũng hỗ trợ một số điểm cuối của Open Cloud.
Bật yêu cầu HTTP
Các phương thức HttpService:GetAsync(), HttpService:PostAsync(), và HttpService:RequestAsync() không được bật theo mặc định. Để gửi yêu cầu, bạn phải Cho phép yêu cầu HTTP trong Cài đặt Trải nghiệm cho trò chơi của bạn.
Sử dụng trong plugin
Bạn có thể sử dụng HttpService trong các plugin Studio để kiểm tra cập nhật, tải nội dung hoặc các logic kinh doanh khác. Lần đầu tiên một plugin cố gắng sử dụng dịch vụ, người dùng có thể được nhắc cho plugin quyền giao tiếp với địa chỉ web cụ thể. Người dùng có thể chấp nhận, từ chối và thu hồi các quyền này bất cứ lúc nào thông qua cửa sổ Quản lý Plugin.
Các plugin cũng có thể giao tiếp với phần mềm khác chạy trên cùng một máy tính thông qua các máy chủ localhost và 127.0.0.1. Bằng cách chạy các chương trình tương thích với các plugin như vậy, bạn có thể mở rộng chức năng của plugin của bạn vượt ra ngoài khả năng bình thường của Studio, chẳng hạn như tương tác với hệ thống tệp của máy tính của bạn. Hãy cẩn thận rằng phần mềm như vậy phải được phân phối riêng biệt với chính plugin và có thể gây ra rủi ro về an ninh.
Sử dụng với Open Cloud
HttpService hiện có thể gọi một tập con của các điểm cuối Open Cloud. Bạn có thể gọi các điểm cuối này theo cùng một cách mà bạn gọi bất kỳ điểm cuối nào khác qua HttpService. Sự khác biệt duy nhất là bạn phải bao gồm một khóa API Open Cloud trong yêu cầu:
- Thực hiện yêu cầu.
Mẫu mã sau đây minh họa cách cập nhật tư cách thành viên nhóm của một người dùng từ trong một trò chơi:
local HttpService = game:GetService("HttpService")
local groupId = "your_group_id"
local membershipId = "your_membership_id"
local roleId = "your_role_id"
local function request()
local response = HttpService:RequestAsync({
Url = `https://apis.roblox.com/cloud/v2/groups/{groupId}/memberships/{membershipId}`,
Method = "PATCH",
Headers = {
["Content-Type"] = "application/json", -- Khi gửi JSON, hãy đặt điều này!
["x-api-key"] = HttpService:GetSecret("APIKey"), -- Đặt trong Creator Hub
},
Body = HttpService:JSONEncode({ role = `groups/{groupId}/roles/{roleId}` }),
})
if response.Success then
print("Phản hồi đã thành công:", response.StatusCode, response.StatusMessage)
else
print("Phản hồi đã trả về lỗi:", response.StatusCode, response.StatusMessage)
end
print("Nội dung phản hồi:\n", response.Body)
print("Tiêu đề phản hồi:\n", HttpService:JSONEncode(response.Headers))
end
-- Bọc hàm trong pcall() để an toàn
local success, errorMessage = pcall(request)
if not success then
print("Yêu cầu HTTP đã không gửi thành công:", errorMessage)
end
Các điểm cuối Open Cloud được hỗ trợ
Các điểm cuối sau đây được hỗ trợ. Do các hạn chế hiện tại trên HttpService, chuỗi .. không được phép trong các tham số đường dẫn URL đến các miền Roblox. Điều này có nghĩa là, chẳng hạn, các kho dữ liệu và mục chứa chuỗi này hiện không thể truy cập từ HttpService.
Tài sản
Cấm và chặn
Cấu hình
Cửa hàng người sáng tạo
Sản phẩm phát triển
Thẻ trò chơi
Cửa hàng dữ liệu và bộ nhớ
Cửa hàng dữ liệu:
Bộ nhớ:
Cửa hàng dữ liệu có thứ tự:
Nhóm
Kho
Thực thi Luau
Thông báo
Địa điểm
Vũ trụ
Người dùng
Hạn chế
- Chỉ có các tiêu đề x-api-key và content-type được phép.
- Chuỗi ".." không được phép trong các tham số đường dẫn URL.
- Chỉ hỗ trợ giao thức HTTPS.
- Bạn không thể sử dụng cổng 1194 hoặc bất kỳ cổng nào dưới 1024, ngoại trừ 80 và 443. Nếu bạn cố gắng sử dụng một cổng bị chặn, bạn sẽ nhận được lỗi 403 Forbidden hoặc ERR_ACCESS_DENIED.
Giới hạn tỷ lệ
Đối với mỗi máy chủ trò chơi Roblox, có giới hạn 2500 yêu cầu Open Cloud mỗi phút. Vi phạm điều này có thể khiến các phương thức gửi yêu cầu bị treo khoảng 30 giây. pcall() của bạn cũng có thể thất bại với thông báo Số lượng yêu cầu Open Cloud vượt quá giới hạn.
- Yêu cầu Open Cloud không tiêu thụ cùng một giới hạn tổng thể là 500 yêu cầu HTTP mỗi phút được áp dụng cho tất cả các yêu cầu khác.
- Mỗi điểm cuối có giới hạn riêng cho từng chủ sở hữu khóa API (có thể là người dùng hoặc nhóm) được áp dụng không quan trọng việc các cuộc gọi đến từ đâu (HttpService, web, v.v.).
Để biết thông tin chi tiết về giới hạn tỷ lệ Open Cloud, việc giới hạn theo xác thực và các phương pháp tốt nhất, hãy xem Giới hạn Tỷ lệ.
Các phương pháp tốt nhất
Để tối ưu hóa việc sử dụng HttpService của bạn và tránh vượt quá các giới hạn, hãy áp dụng các phương pháp tốt nhất sau đây:
Xử lý lỗi một cách nhẹ nhàng. Các yêu cầu web có thể thất bại vì nhiều lý do. Sử dụng pcall() và có kế hoạch cho khi các yêu cầu thất bại. Hơn nữa, hãy xác thực và làm sạch tất cả dữ liệu nhận được từ các API bên ngoài, đảm bảo dữ liệu chính xác khi bạn có thể.
Sử dụng quy tắc lùi thời gian theo cấp số nhân để giữ dưới giới hạn.
Nếu một yêu cầu trả về lỗi có thể phục hồi, không nên ngay lập tức thử lại, hãy chờ hai giây, sau đó là bốn, tám, v.v. giữa các lần thử. Điều này giúp giảm tắc nghẽn và cải thiện khả năng yêu cầu thành công bằng cách cho điểm cuối thời gian để "nguội".
Tập hợp và gửi dữ liệu theo lô.
Khi có thể, nên để máy chủ của bạn thu thập tất cả dữ liệu cần thiết để gửi một yêu cầu HTTP, thay vì nhiều yêu cầu nhỏ. Ví dụ, nếu bạn đang gửi một yêu cầu HTTP cho mỗi người chơi trong máy chủ của bạn, hãy kiểm tra xem API có điểm cuối theo lô/có tập hay không và, nếu có, hãy thu thập thông tin từ tất cả người chơi và gửi tất cả trong một yêu cầu.
Trong một số trường hợp bạn có thể phải sử dụng HttpService:RequestAsync() để bao gồm dữ liệu trong phần thân của yêu cầu.
Sử dụng các điểm cuối HTTP/2. HTTP/2 cung cấp lợi ích hiệu suất đáng kể thông qua các tính năng như nén tiêu đề và phân chia đa yêu cầu/đáp ứng qua một kết nối đơn. HttpService tự động sử dụng HTTP/2 khi có sẵn. Lưu ý rằng tiêu chuẩn HTTP/2 yêu cầu tất cả tên tiêu đề phải được gửi bằng chữ thường.
Quan sát
Bảng điều khiển Quan sát cung cấp thông tin và phân tích để giám sát và khắc phục sự cố việc sử dụng HttpService của bạn. Bảng điều khiển có hai biểu đồ chính: Số lượng Yêu cầu, theo dõi khối lượng yêu cầu HttpService từ trò chơi của bạn, và Thời gian Phản hồi, đo độ trễ cho các điểm cuối đáp ứng.
Các chiều có sẵn để lọc và phân tích được định nghĩa như sau:
Loại yêu cầu
- GET
- POST
- PUT
- PATCH
- DELETE
- Khác (đối với các loại yêu cầu không xác định)
Trạng thái
- Thành công (mã trạng thái HTTP 1xx và 2xx)
- Chuyển tiếp (mã trạng thái HTTP 3xx)
- 400 (Yêu cầu không hợp lệ)
- 401 (Không được ủy quyền)
- 403 (Bị cấm)
- 404 (Không tìm thấy)
- 429 (Quá nhiều yêu cầu)
- 500 (Lỗi máy chủ nội bộ)
- 503 (Dịch vụ không khả dụng)
- ExternalError (các mã lỗi không xác định khác được trả về từ dịch vụ bên ngoài)
- InternalError (vấn đề được trả về từ HttpService trong Roblox)
Biểu đồ Thời gian Phản hồi không có mối tương quan với dữ liệu trạng thái. Nếu bạn chọn "Trạng thái" làm phân tích hoặc bộ lọc, biểu đồ này sẽ không hiển thị dữ liệu.
Các cân nhắc thêm
- Các yêu cầu nên cung cấp một hình thức xác thực an toàn, chẳng hạn như một khóa bí mật chia sẻ trước, để các tác nhân xấu không thể giả mạo một trong các máy chủ Roblox của bạn.
- Hãy lưu ý đến khả năng tổng thể và chính sách giới hạn tỷ lệ của các máy chủ web mà yêu cầu đang được gửi tới.