UiPath API 调用文档
文章目录
- 1. GetToken
- 2. GetFolders
- 3. GetReleases
- 4. StartJobs
注意: 本文内容皆为Python环境演示
your_domain
:你的UiPath Orchestrator 地址【不懂得去登录Orchestrator来回登录各个界面,始终不变的那一段就是 -_- 】
1. GetToken
此接口用于获取
access_token
请求类型 (Request Method):
POST
请求地址 (Request Url):
{your_domain}/identity/connect/token
请求正文 (Request Body):
参数名称 | 类型 | 默认值 | 不为空 | 描述 |
---|---|---|---|---|
grant_type | str | client_credentials | True | 填写默认就行 |
client_id | str | True | API ID | |
client_secret | str | True | API SECRET | |
scope | str | True | 作用域,根据后续调用API需要的权限进行配置,多个值之间空格进行分割,文章皆为会进行简单介绍 |
示例如下:
def get_access_token():url = f"{your_domain}/identity/connect/token"req_data = {"grant_type": "client_credentials","client_id": client_id,"client_secret": client_secret,"scope": "OR.Jobs OR.Settings",}result = requests.post(url, data=req_data)print(f"access_token 获取状态: {result.status_code}")print(f"access_token: {json.loads(result.text)['access_token']}")
响应正文:
- code 200: 成功
{"access_token": "", // token内容"expires_in": 3600,"token_type": "Bearer", // token头"scope": "" // 你刚开始授权的作用域
}
2. GetFolders
未通过此接口获取文件夹key时, 执行其他api操作通常会产生错误:
此操作需要一个组织单位
请求类型 (Request Method):
GET
请求地址 (Request Url):
{your_domain}/odata/Folders
请求头 (Request Headers):
参数名称 | 类型 | 默认值 | 不为空 | 描述 |
---|---|---|---|---|
Authorization | str | Bearer {access_token} | True | access_token 来自/identity/connect/token |
Accept | str | application/json | True |
示例如下:
def get_folders(access_token):url = f"{your_domain}/odata/Folders"headers = {"Authorization": f"Bearer {access_token}","Accept": "application/json",}result = requests.get(url, headers=headers)print(f"响应状态:{result.status_code}")print(f"响应内容:{result.text}")
响应正文:
- code 200: 成功
响应内容:
{"@odata.context": "https://xxxxx/odata/$metadata#Folders","@odata.count": 21, // 返回value数量"value": [{"Key": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx", // 文件夹key, 调用其他接口所需"DisplayName": "文件夹名称", // 文件夹展示名称"FullyQualifiedName": "文件夹名称", // 文件夹全称"FullyQualifiedNameOrderable": "文件夹名称","Description": null,"FolderType": "Standard","ProvisionType": "Automatic","PermissionModel": "FineGrained","ParentId": null,"ParentKey": null,"IsActive": true,"FeedType": "Processes","Id": 4,}]}
3. GetReleases
此接口用于获取启动作业所需的
release_key
请求类型 (Request Method):
GET
请求地址 (Request Url):
{your_domain}/odata/Releases
请求头 (Request Headers):
参数名称 | 类型 | 默认值 | 不为空 | 描述 |
---|---|---|---|---|
Authorization | str | Bearer {access_token} | True | access_token 来自/identity/connect/token |
Accept | str | application/json | True | |
X-UIPATH-FolderKey | str | True | 操作文件夹对应的key, 通过/odata/Folders 获取 |
示例如下:
"""
access_token: token
folder_key: 操作文件夹对应的key, 来自/odata/Folders
"""
def get_realeases(access_token, folder_key):url = f"{your_domain}/odata/Releases"headers = {"Authorization": f"Bearer {access_token}","accept": "application/json","X-UIPATH-FolderKey": folder_key,}result = requests.get(url, headers=headers)print(f"响应状态: {result.status_code}")print(f"响应正文: {result.text}")
响应正文:
- code 200: 成功
响应内容:
{"@odata.context": "https://xxxxxxxx/odata/$metadata#Releases","@odata.count": 2,"value": [{"Key": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx", // 流程key, 用于启动作业"ProcessKey": "包来源名称-测试", // 包来源名称"ProcessVersion": "1.0.6", // 包版本"IsLatestVersion": false,"IsProcessDeleted": false,"Description": "描述", // 流程描述"Name": "流程名称", // 流程名称"EnvironmentId": null,"EnvironmentName": "","EntryPointId": 2,"EntryPointPath": null,"InputArguments": null,"ProcessType": "Process","SupportsMultipleEntryPoints": true,"RequiresUserInteraction": true,"IsAttended": false,"IsCompiled": false,"AutomationHubIdeaUrl": null,"AutoUpdate": false,"HiddenForAttendedUser": false,"FeedId": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx","JobPriority": "Normal","SpecificPriorityValue": 45,"OrganizationUnitId": 21,"OrganizationUnitFullyQualifiedName": "文件夹名称","TargetFramework": "Legacy","RobotSize": null,"AutoCreateConnectedTriggers": true,"RemoteControlAccess": "None","LastModificationTime": "时间","LastModifierUserId": 9,"CreationTime": "时间","CreatorUserId": 9,"Id": 2,}]
}
4. StartJobs
此接口用于
启动作业
请求类型 (Request Method):
POST
请求地址 (Request Url):
{your_domain}/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs
请求头 (Request Headers):
参数名称 | 类型 | 默认值 | 不为空 | 描述 |
---|---|---|---|---|
Authorization | str | Bearer {access_token} | True | access_token 来自/identity/connect/token |
Accept | str | application/json | True | |
Content-Type | str | application/json | True | |
X-UIPATH-FolderKey | str | True | 操作文件夹对应的key, 通过/odata/Folders 获取 |
请求正文 (Request Body):
参数名称 | 类型 | 默认值 | 不为空 | 描述 |
---|---|---|---|---|
startInfo | dict | startInfo | True | 千万注意层级哦 |
- startInfo
参数名称 | 类型 | 默认值 | 不为空 | 描述 |
---|---|---|---|---|
ReleaseKey | str | True | release_key 来自/odata/Releases | |
JobsCount | num | 1 | True | 作业数 |
JobPriority | str | Normal | True | 优先级 |
Strategy | str | ModernJobsCount | True | 策略 |
ResumeOnSameContext | boolean | False | True | |
RuntimeType | str | Unattended | True |
示例如下:
"""
access_token: token
release_key: 流程key
folder_key: 文件夹key
"""
def start_jobs(access_token, release_key, folder_key):url = f"{your_domain}/odata/Jobs/UiPath.Server.Configuration.OData.StartJobs"req_data = {"startInfo": {"ReleaseKey": release_key, # 流程id"JobsCount": 1, # 作业数"JobPriority": "Normal", # 优先级"Strategy": "ModernJobsCount","ResumeOnSameContext": False,"RuntimeType": "Unattended",}}headers = {"Accept": "application/json","Content-Type": "application/json","Authorization": f"Bearer {access_token}","X-UIPATH-FolderKey": folder_key,}result = requests.post(url=url, data=json.dumps(req_data), headers=headers)print(f"响应状态: {result.status_code}")print(f"响应正文: {result.text}")
响应正文:
- code 200: 成功
{"@odata.context": "https://xxxxxx/odata/$metadata#Jobs","value": [{"Key": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx","StartTime": null,"EndTime": null,"State": "Pending","JobPriority": "Normal","SpecificPriorityValue": 45,"ResourceOverwrites": null,"Source": "Manual","SourceType": "Manual","BatchExecutionKey": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx","Info": null,"CreationTime": "时间","StartingScheduleId": null,"ReleaseName": "Java","Type": "Unattended","InputArguments": null,"OutputArguments": null,"HostMachineName": null,"HasMediaRecorded": false,"HasVideoRecorded": null,"PersistenceId": null,"ResumeVersion": null,"StopStrategy": null,"RuntimeType": "Unattended","RequiresUserInteraction": true,"ReleaseVersionId": null,"EntryPointPath": "Main.xaml","OrganizationUnitId": 21,"OrganizationUnitFullyQualifiedName": null,"Reference": "","ProcessType": "Process","ProfilingOptions": null,"ResumeOnSameContext": false,"LocalSystemAccount": "","OrchestratorUserIdentity": null,"RemoteControlAccess": "None","MaxExpectedRunningTimeSeconds": null,"ServerlessJobType": null,"Id": 4262,}],
}