Jira API如何上传XML格式的issue数据

2次阅读

jira rest api 不支持直接上传 xml 格式 issue 数据,仅接受 application/json;xml 仅能通过 server/data center 的 project import 或 backup restore 流程处理,且需符合内部格式、管理员权限及 multipart 表单提交;cloud 完全不支持 xml 导入;正确做法是将 xml 解析为 json 后调用 rest api,并注意 adf 描述格式、自定义字段 id 差异、速率限制等约束。

Jira API如何上传XML格式的issue数据

Jira REST API 不支持直接上传 XML 格式 issue 数据

Jira 官方 REST API(包括 Cloud 和 Server/Data Center 8.0+)只接受 application/json 请求体,不接收、不解析、不处理 XML 格式的 issue 创建或导入请求。如果你尝试用 POST /rest/api/3/issue 发送 XML,会收到 415 Unsupported Media Type 错误,或更常见的 400 Bad Request 并提示 “Invalid JSON”。

XML 数据只能通过 Jira 的专用导入工具处理

真正能消费 XML 的路径是 Jira 自带的 Project ImportBackup Restore 流程,但它们有严格前提:

  • XML 必须符合 Jira 内部导出格式(如 entities.xml + activeobjects.xml),不是任意结构的自定义 XML
  • 仅限管理员操作,需通过 Web ui/secure/admin/ProjectImportSummary.jspa)或 jira-importers-plugin 后台任务触发
  • 不能用普通 API Token 或 Basic Auth 调用;必须登录后以 session 方式提交 multipart 表单(含 importFile 文件字段)
  • Server/Data Center 才支持完整 XML 导入;Jira Cloud 完全移除了 XML 导入能力,仅保留 CSV/JSON 导入

正确做法:把 XML 转成 JSON 再调用 REST API

这是最可控、可自动化、兼容 Cloud 和 Server 的方案。关键步骤如下:

  • 用 Python、Node.js 等解析原始 XML(例如用 xml.etree.ElementTreefast-xml-parser
  • 按 Jira REST API 的 issue 创建规范映射字段:
    summary<summary></summary>
    description<description></description>
    — 自定义字段需用 customfield_10052 这类 ID,不能用字段名
  • 注意必填字段:project.keyissuetype.name 必须存在且有效(建议先查 GET /rest/api/3/project/{key}/issuetypes
  • 附件需单独调用 POST /rest/api/3/issue/{issueIdOrKey}/attachments,不能塞进 issue body
import xml.etree.ElementTree as ET import requests  root = ET.parse("issues.xml").getroot() for item in root.findall("issue"):     summary = item.find("summary").text     desc = item.find("description").text or ""          payload = {         "fields": {             "project": {"key": "PROJ"},             "summary": summary,             "description": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": desc}]}]},             "issuetype": {"name": "Bug"}         }     }          resp = requests.post(         "https://your-domain.atlassian.net/rest/api/3/issue",         json=payload,         headers={"Authorization": "Bearer YOUR_API_TOKEN", "Content-Type": "application/json"}     )

容易被忽略的关键限制

即使 XML 转 JSON 成功,仍有几个硬性约束常导致失败:

  • description 字段在 Cloud 上强制要求使用 Atlassian Document format(ADF),纯字符串会报错 Field 'description' cannot be set.
  • 自定义字段 ID 在不同实例间不通用;Server 实例的 customfield_10100 到 Cloud 可能变成 customfield_10062,必须动态查 Schema
  • 批量导入时,Jira Cloud 对速率有限制(默认 1000 req/hour),且无事务回滚 —— 某条失败不影响其余成功项
  • XML 中的时间戳(如 <created>2023-01-01T12:00:00Z</created>)要转成 ISO 8601 字符串再填入 created 字段,但该字段仅对管理员在创建时覆盖时间有效,普通用户无法设置

实际落地时,别试图绕过 JSON 协议去“骗过” API —— 解析 XML 是一次性成本,而适配 XML 导入流程反而要维护两套环境逻辑。

text=ZqhQzanResources