如何在查询包含 space 时通过 REST API 检索 Jira 问题
How to retrieve Jira issues via REST API when query contains a space
我正在尝试从项目中检索状态为 "New Ticket" 的所有问题。其中包含 space 的状态名称完全让我感到困惑。
我的命令如下所示。如果 status 是一个单词,如 Closed
,这将非常有效,但在 New Ticket
.
中的间距会失败
curl -D- \
-u user:password \
-X POST \
-H "Content-Type: application/json" \
--data '{"jql":"project = DEVOPS AND status = New Ticket", "fields":["id","key","summary","description"]}' \
"https://projecturl.atlassian.net/rest/api/2/search"
我尝试了以下但没有成功;
"project = DEVOPS AND status = New Ticket"
"project = DEVOPS AND status = 'New Ticket'"
"project = DEVOPS AND status = %22New Ticket%22"
"project = DEVOPS AND status = \u0025New Ticket\u0025"
正确的语法是什么?
经过一番折腾,结果证明您可以在查询中转义引号,就像这样;
"project = DEVOPS AND status = \"New Ticket\""
如果是 GET 请求并且请求在 URI 中,而不是在 POST 数据中怎么办?
我有类似下面的东西
/usr/bin/curl \
-s -u user@company.com:APIKEY -X GET \
-H "Content-Type: application/json" \
https://company.atlassian.net/rest/api/2/search?expand=changelog&jql=project=KEY%20and%20issueType=BUG
对我来说,它正在删除 %20and%20issueType=BUG 部分(并且可能会向 STDERR 和 运行 丢弃错误,就好像 jql 只是 project=KEY
编辑:
这开始感觉像是一个错误,即使当您将 URI 粘贴到浏览器时它工作得很好。
用 + 替换 %20 没有任何区别。无论哪种方式,我都得到了相同的结果。
问题似乎是同时存在 expand=changelog 和带有空格的 JQL。当我删除它时,它工作正常。当我把它放在最后以便我有 https://company.atlassian.net/rest/api/2/search?jql=project=KEY+and+issueType=BUG&expand=changelog 而不是 JQL 部分工作时,我得到了 KEY 中所有 BUG 的查询,但它忽略了 expand=changelog 部分而且我没有得到错误的错误历史记录。
我正在使用 Ansible 通过 jira 打开工单!
为了解决单词之间与space相关的错误我只是将space替换为“+”来替换spaces,按照i.g:
也许这对你有帮助 ;)
- name: Checking if the Jira issue already exist
uri:
url: "{{ jira_server }}rest/api/3/search?jql=text~'{{ jira_subject | replace(' ','+')}}{{ jira_fw_type_operation }}'&project={{ jira_project }}"
user: "{{ jira_user }}"
password: "{{ jira_token }}"
force_basic_auth: yes
return_content: yes
status_code: 200
timeout: 60
headers:
Accept: "application/json"
register: fetch_issue
changed_when: fetch_issue['json']['total'] == 0
我正在尝试从项目中检索状态为 "New Ticket" 的所有问题。其中包含 space 的状态名称完全让我感到困惑。
我的命令如下所示。如果 status 是一个单词,如 Closed
,这将非常有效,但在 New Ticket
.
curl -D- \
-u user:password \
-X POST \
-H "Content-Type: application/json" \
--data '{"jql":"project = DEVOPS AND status = New Ticket", "fields":["id","key","summary","description"]}' \
"https://projecturl.atlassian.net/rest/api/2/search"
我尝试了以下但没有成功;
"project = DEVOPS AND status = New Ticket"
"project = DEVOPS AND status = 'New Ticket'"
"project = DEVOPS AND status = %22New Ticket%22"
"project = DEVOPS AND status = \u0025New Ticket\u0025"
正确的语法是什么?
经过一番折腾,结果证明您可以在查询中转义引号,就像这样;
"project = DEVOPS AND status = \"New Ticket\""
如果是 GET 请求并且请求在 URI 中,而不是在 POST 数据中怎么办?
我有类似下面的东西
/usr/bin/curl \
-s -u user@company.com:APIKEY -X GET \
-H "Content-Type: application/json" \
https://company.atlassian.net/rest/api/2/search?expand=changelog&jql=project=KEY%20and%20issueType=BUG
对我来说,它正在删除 %20and%20issueType=BUG 部分(并且可能会向 STDERR 和 运行 丢弃错误,就好像 jql 只是 project=KEY
编辑: 这开始感觉像是一个错误,即使当您将 URI 粘贴到浏览器时它工作得很好。
用 + 替换 %20 没有任何区别。无论哪种方式,我都得到了相同的结果。
问题似乎是同时存在 expand=changelog 和带有空格的 JQL。当我删除它时,它工作正常。当我把它放在最后以便我有 https://company.atlassian.net/rest/api/2/search?jql=project=KEY+and+issueType=BUG&expand=changelog 而不是 JQL 部分工作时,我得到了 KEY 中所有 BUG 的查询,但它忽略了 expand=changelog 部分而且我没有得到错误的错误历史记录。
我正在使用 Ansible 通过 jira 打开工单! 为了解决单词之间与space相关的错误我只是将space替换为“+”来替换spaces,按照i.g:
也许这对你有帮助 ;)
- name: Checking if the Jira issue already exist
uri:
url: "{{ jira_server }}rest/api/3/search?jql=text~'{{ jira_subject | replace(' ','+')}}{{ jira_fw_type_operation }}'&project={{ jira_project }}"
user: "{{ jira_user }}"
password: "{{ jira_token }}"
force_basic_auth: yes
return_content: yes
status_code: 200
timeout: 60
headers:
Accept: "application/json"
register: fetch_issue
changed_when: fetch_issue['json']['total'] == 0