2012-07-24 387 views
3

如何獲取使用Jira Rest Apis的所有用戶的列表。Jira Rest Api獲取完整用戶列表

我曾嘗試: -

/rest/api/latest/user/search?username= 

在這裏,我試圖用空白的用戶名字符串,但它並沒有返回完整用戶列表。當用戶名長度至少爲1時,我們只會得到一些結果。

如何從Jira rest API獲取完整用戶列表?

回答

2

我不認爲其他API有這種能力。就我所知,您必須選擇不同的方式,例如,您可以使用Soap API來執行此操作,如JIRA SOAP API : get the list of users這個問題所示。另一種方式可能是querying the DB directly

+0

SOAP API是**「支持,但沒有未來的發展」**也不是Jira推薦的。 https://developer.atlassian.com/display/JIRADEV/Creating+a+JIRA+SOAP+Client – 2012-07-25 06:19:18

+0

是的,他們停止開發SOAP API並專注於開發REST API,但現在REST API並不完整,因此,只能用於簡單的任務。 SOAP API將來不會被開發,但將在未來的版本中得到支持。 – Kuf 2012-07-25 06:35:12

0

我有時在jira用戶上使用SOAP getGroup方法來獲取jira用戶的成員,但它似乎在約5K時錯過了一些用戶,而且您必須將其作爲JIRA管理員用戶運行。如果可以,更好的方法是直接訪問AD。

+0

SOAP API是**「支持,但沒有未來的發展」**也不是Jira推薦的。 https://developer.atlassian.com/display/JIRADEV/Creating+a+JIRA+SOAP+Client – 2012-07-25 06:18:57

1

您可以製作一個循環,讓您瀏覽所有字母和另一個循環,以顯示每個用戶姓名以該字母開頭的結果。像這樣:

char[] ch = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 

int j = ch.length; 
for (int i = 0; i < ch.length; i++) 
         { 
          System.out.print(Character.toString(Character.toUpperCase(ch[i]))); 
          --j; 

String projects = invokeGetMethod(auth, BASE_URL+"/rest/api/2/user/search?username="+Character.toString(ch[i])); 
          System.out.println(projects); 
          JSONArray projectArray = new JSONArray(projects); 
          for (int k = 0; k < projectArray.length(); k++) { 
          JSONObject proj = projectArray.getJSONObject(k); 
          System.out.println("Key:"+proj.getString("key")); 
} 

} 

private static String invokeGetMethod(String auth, String url) throws AuthenticationException, ClientHandlerException { 
     Client client = Client.create(); 
     WebResource webResource = client.resource(url); 
     ClientResponse response = webResource.header("Authorization", "Basic " + auth).type("application/json") 
       .accept("application/json").get(ClientResponse.class); 
     int statusCode = response.getStatus(); 
     if (statusCode == 401) { 
      throw new AuthenticationException("Invalid Username or Password"); 
     } 
     return response.getEntity(String.class); 
    } 
+0

這是一個很好的黑客! JIRA只允許用戶名以26個字符開頭?我知道我已經看到數字用戶名,也許有下劃線作爲第一個字符 – mdoar 2013-11-15 21:37:49

+0

是的,你是對的,它允許使用用戶號碼... 所以基本上你應該添加數字從0到9列表中,並嘗試它們太。 – Kirill 2013-12-05 12:11:02

0

這是我在perl中使用的一個例子。我相信它可以得到改善,但對我來說卻很有用。 只需相應地更改「用戶」和「密碼」即可。

#!/usr/bin/env perl 
use strict; 
use warnings; 
use 5.10.0; 
use Data::Dumper; 
use JIRA::REST; 

$Data::Dumper::Sortkeys = 1; 

my $jira='http://jira:8080'; 

my $jirarest = JIRA::REST->new($jira, 'user', 'password'); 

my %users; 

for my $c ('a' .. 'z', '0'..'9' ,'_') { 
    say "Scanning '$c'"; 
    my @u = @{$jirarest->GET("/user/search?username=$c&includeInactive=1&maxResults=1000")}; 
    say scalar (keys @u); 
    @users{ map {$_->{name}} @u } = @u; 
} 

say Dumper(\%users); 

say scalar (keys %users); 

主要假設是沒有單個字符有超過1000個條目。我將調查startAt參數,看看它是否支持某種分頁。

-1

我想讓我的電子郵件域中的所有用戶。由於JIRA使用username參數搜索username,displayName和emailAddress,所以我只需要指定username = mydomain.com作爲參數,並獲得了我的電子郵件域中的完整用戶列表。如果您想擴大搜索到多個域名,請嘗試使用username = .com。心連心。

-1

/rest/api/2/user/search?username=%工程。

+0

雖然這段代碼可能會解決這個問題,但應該總是考慮給它添加一個解釋。 – BDL 2017-01-20 13:58:06

0

You can use/rest/api/2/group/member?groupname=如果您是管理員用戶。否則,這是不可用的。