Skip to content

项目管理

项目是设备管理的基本单位,用于对设备进行分组和管理。一个组织下可以创建多个项目,每个项目可以包含多个设备。

接口概览

方法端点描述
GET/api/v2/projects/获取项目列表
POST/api/v2/projects/创建项目
GET/api/v2/projects/{project_id}/获取项目详情
PUT/api/v2/projects/{project_id}/更新项目
DELETE/api/v2/projects/{project_id}/删除项目
POST/api/v2/projects/{project_id}/transfer/转移项目

项目对象

项目对象包含以下字段:

字段类型描述
project_idstring项目唯一标识符
namestring项目名称
favoriteboolean是否收藏
device_countinteger项目下的设备总数
offline_device_countinteger离线设备数量
created_atstring创建时间(ISO 8601 格式)

获取项目列表

获取当前组织下的所有项目。

GET /api/v2/projects/

请求头

参数必填描述
AuthorizationBearer Token 认证

响应示例

json
[
    {
        "project_id": "proj_abcdefghij",
        "name": "智慧农业项目",
        "favorite": true,
        "device_count": 15,
        "offline_device_count": 2,
        "created_at": "2025-01-15T08:30:00Z"
    },
    {
        "project_id": "proj_klmnopqrst",
        "name": "环境监测项目",
        "favorite": false,
        "device_count": 8,
        "offline_device_count": 0,
        "created_at": "2025-02-20T14:15:00Z"
    }
]

代码示例

python
import requests

API_BASE = "https://dl.yengear.com/api/v2"
ACCESS_TOKEN = "your_access_token"

def get_projects():
    """获取项目列表"""
    response = requests.get(
        f"{API_BASE}/projects/",
        headers={"Authorization": f"Bearer {ACCESS_TOKEN}"}
    )
    return response.json()

# 调用示例
projects = get_projects()
for project in projects:
    print(f"{project['name']}: {project['device_count']} 台设备")
bash
curl -X GET "https://dl.yengear.com/api/v2/projects/" \
     -H "Authorization: Bearer your_access_token"

获取项目详情

获取指定项目的详细信息。

GET /api/v2/projects/{project_id}/

路径参数

参数类型必填描述
project_idstring项目唯一标识符

响应示例

json
{
    "project_id": "proj_abcdefghij",
    "name": "智慧农业项目",
    "favorite": true,
    "device_count": 15,
    "offline_device_count": 2,
    "created_at": "2025-01-15T08:30:00Z"
}

错误响应

状态码描述
404项目不存在

创建项目

在当前组织下创建新项目。

POST /api/v2/projects/

请求参数

参数类型必填描述
namestring项目名称
project_idstring自定义项目 ID,不填则自动生成

请求示例

json
{
    "name": "新建监测项目"
}

响应示例

json
{
    "project_id": "proj_uvwxyzabcd",
    "name": "新建监测项目",
    "favorite": false,
    "device_count": 0,
    "offline_device_count": 0,
    "created_at": "2025-03-21T10:00:00Z"
}

代码示例

python
def create_project(name):
    """创建项目"""
    response = requests.post(
        f"{API_BASE}/projects/",
        headers={
            "Authorization": f"Bearer {ACCESS_TOKEN}",
            "Content-Type": "application/json"
        },
        json={"name": name}
    )
    return response.json()

# 调用示例
new_project = create_project("温室大棚监测")
print(f"项目已创建: {new_project['project_id']}")
bash
curl -X POST "https://dl.yengear.com/api/v2/projects/" \
     -H "Authorization: Bearer your_access_token" \
     -H "Content-Type: application/json" \
     -d '{"name": "温室大棚监测"}'

更新项目

更新指定项目的信息。支持部分更新,只需提供要修改的字段。

PUT /api/v2/projects/{project_id}/

路径参数

参数类型必填描述
project_idstring项目唯一标识符

请求参数

参数类型必填描述
namestring项目名称
favoriteboolean是否收藏

注意

project_id 创建后不可修改。

请求示例

json
{
    "name": "更新后的项目名称",
    "favorite": true
}

响应示例

json
{
    "project_id": "proj_abcdefghij",
    "name": "更新后的项目名称",
    "favorite": true,
    "device_count": 15,
    "offline_device_count": 2,
    "created_at": "2025-01-15T08:30:00Z"
}

代码示例

python
def update_project(project_id, **kwargs):
    """更新项目信息"""
    response = requests.put(
        f"{API_BASE}/projects/{project_id}/",
        headers={
            "Authorization": f"Bearer {ACCESS_TOKEN}",
            "Content-Type": "application/json"
        },
        json=kwargs
    )
    return response.json()

# 调用示例
updated = update_project("proj_abcdefghij", name="新名称", favorite=True)
bash
curl -X PUT "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/" \
     -H "Authorization: Bearer your_access_token" \
     -H "Content-Type: application/json" \
     -d '{"name": "新名称", "favorite": true}'

删除项目

删除指定项目。

DELETE /api/v2/projects/{project_id}/

路径参数

参数类型必填描述
project_idstring项目唯一标识符

警告

删除项目前,请确保项目下没有设备。如果项目下存在设备,需要先解绑或转移设备。

响应

成功删除返回 HTTP 状态码 204 No Content,无响应体。

代码示例

python
def delete_project(project_id):
    """删除项目"""
    response = requests.delete(
        f"{API_BASE}/projects/{project_id}/",
        headers={"Authorization": f"Bearer {ACCESS_TOKEN}"}
    )
    return response.status_code == 204

# 调用示例
if delete_project("proj_abcdefghij"):
    print("项目已删除")
bash
curl -X DELETE "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/" \
     -H "Authorization: Bearer your_access_token"

转移项目

将项目转移到其他组织。转移后,项目及其下所有设备的归属将变更为目标组织。

POST /api/v2/projects/{project_id}/transfer/

路径参数

参数类型必填描述
project_idstring项目唯一标识符

请求参数

参数类型必填描述
target_org_slugstring目标组织的 slug 标识

请求示例

json
{
    "target_org_slug": "target-organization"
}

响应

成功转移返回 HTTP 状态码 200 OK,无响应体。

错误响应

状态码错误信息描述
400项目已属于目标组织不能转移到当前所属组织
404目标组织不存在指定的目标组织不存在

代码示例

python
def transfer_project(project_id, target_org_slug):
    """转移项目到其他组织"""
    response = requests.post(
        f"{API_BASE}/projects/{project_id}/transfer/",
        headers={
            "Authorization": f"Bearer {ACCESS_TOKEN}",
            "Content-Type": "application/json"
        },
        json={"target_org_slug": target_org_slug}
    )
    return response.status_code == 200

# 调用示例
if transfer_project("proj_abcdefghij", "new-organization"):
    print("项目转移成功")
bash
curl -X POST "https://dl.yengear.com/api/v2/projects/proj_abcdefghij/transfer/" \
     -H "Authorization: Bearer your_access_token" \
     -H "Content-Type: application/json" \
     -d '{"target_org_slug": "new-organization"}'

提示

项目转移需要组织管理员权限。转移完成后,原组织将无法访问该项目及其设备。