Rodin 的 API 使用 API 密钥来验证请求。要以编程方式访问 Rodin 服务,您需要生成一个 API 密钥。以下是如何安全地进行身份验证和使用 API 密钥的步骤。
生成 API 密钥
导航到 API 密钥管理页面
登录到您的 Rodin 账户,进入 API 密钥管理部分。
点击“+创建新 API 密钥”按钮以生成新密钥。
安全存储您的 API 密钥
一旦创建,API 密钥将仅显示一次。确保您复制并安全存储。如果您丢失了密钥,您需要生成一个新密钥。
在必要时撤销密钥
您可以直接在 API 密钥管理页面管理现有的 API 密钥,并撤销不再需要的密钥。
使用 API 密钥进行身份验证
对于每个 API 请求,请在 Authorization HTTP 头中包含 API 密钥。以下是如何构建请求的示例:
Authorization:Bearer YOUR_RODIN_API_KEY
将 YOUR_RODIN_API_KEY 替换为您实际生成的 API 密钥。
发起请求
一旦您生成了 API 密钥,就可以使用以下示例代码触发您的第一个请求,以生成高质量的 3D 资产。
export RODIN_API_KEY="your api key"curlhttps://hyperhuman.deemos.com/api/v2/rodin \-H"Authorization: Bearer ${RODIN_API_KEY}" \-F"images=@/path/to/your/image.jpg"unsetRODIN_API_KEY
import osimport requests# ConstantsENDPOINT ="https://hyperhuman.deemos.com/api/v2/rodin"API_KEY ="your api key"# Replace with your actual API keyIMAGE_PATH ="/path/to/your/image.jpg"# Replace with the path to your image# Read the image filewithopen(IMAGE_PATH, 'rb')as image_file: image_data = image_file.read()# Prepare the multipart form datafiles ={'images': (os.path.basename(IMAGE_PATH), image_data,'image/jpeg')}# Prepare the headersheaders ={'Authorization':f'Bearer {API_KEY}',}# Make the POST requestresponse = requests.post(ENDPOINT, files=files, headers=headers)# Parse and return the JSON responseprint(response.json())
packagemainimport ("bytes""encoding/json""fmt""mime/multipart""net/http""os""path/filepath")const BaseURI ="https://hyperhuman.deemos.com/api"typeCommonErrorstruct { Error *string`json:"error,omitempty"` Message *string`json:"message,omitempty"`}typeJobSubmissionResponsestruct { Uuids []string`json:"uuids"` SubscriptionKey string`json:"subscription_key"`}typeRodinAllInOneResponsestruct {CommonError Uuid *string`json:"uuid,omitempty"` Jobs JobSubmissionResponse`json:"jobs,omitempty"`}funcRunRodin(token string, filePath string) (*RodinAllInOneResponse, error) {var err errorvar buffer bytes.Buffer// Create the form data for Rodin API writer := multipart.NewWriter(&buffer)// Read the image image, err := os.ReadFile(filePath)if err !=nil {returnnil, err }// Add the image as a form entry fieldWriter, err := writer.CreateFormFile("images", filepath.Base(filePath))if err !=nil {returnnil, err }if _, err = fieldWriter.Write(image); err !=nil {returnnil, err } err = writer.Close()if err !=nil {returnnil, err }// Create the request req, err := http.NewRequest("POST", fmt.Sprintf("%s/v2/rodin", BaseURI), &buffer)if err !=nil {returnnil, err }// Set headers req.Header.Set("Authorization", "Bearer "+token) req.Header.Set("Content-Type", writer.FormDataContentType()) resp, err := http.DefaultClient.Do(req)if err !=nil {returnnil, err }defer resp.Body.Close()var responseData RodinAllInOneResponse err = json.NewDecoder(resp.Body).Decode(&responseData)if err !=nil {returnnil, err }if responseData.Error !=nil {returnnil, fmt.Errorf("%s: %s", *responseData.Error, *responseData.Message) }return&responseData, nil}funcmain() {// Replace with your actual API key token :="your api key"// Replace with the path to your image resp, _ :=RunRodin(token, "/path/to/your/image.jpg") fmt.Println(resp)}
响应
当您向 Rodin API 发送 POST 请求时,服务器会返回一个 JSON 响应。以下是响应的结构及其组成部分的解释。
生成 API 是耗时且资源密集型的,因此我们将其设计为异步。这意味着您提交一个任务后不会立即获得结果。
通过状态检查 和 下载 API 节点, 您可以检查已提交作业的状态并下载任务的结果。 建议您使用状态检查 API 以确保任务准备好下载,如我们在最小示例 中演示的,以避免意外结果。
作为一个快速示例,我们将展示如何获取下载结果的 URL 列表,假设您的任务已经准备好下载。
export RODIN_API_KEY="your api key"curl-X'POST' \'https://hyperhuman.deemos.com/api/v2/download' \-H'accept: application/json' \-H'Content-Type: application/json' \-d'{ "task_uuid": "{REPLACE TASK UUID YOU GOT FROM LAST STEP}"}'unsetRODIN_API_KEY
import requests# ConstantsENDPOINT ="https://hyperhuman.deemos.com/api/v2/download"API_KEY ="your api key"# Replace with your actual API keyTASK_UUID ="your-task-uuid"# Replace with your actual task UUID# Prepare the headersheaders ={'accept':'application/json','Content-Type':'application/json','Authorization':f'Bearer {API_KEY}',}# Prepare the JSON payloaddata ={"task_uuid": TASK_UUID}# Make the POST requestresponse = requests.post(ENDPOINT, headers=headers, json=data)# Parse and return the JSON responseprint(response.json())