Как получить полный список репозиториев, к которым разрешен доступ пользователю?

Я нашел API битбакета, например:

https://bitbucket.org/api/2.0/repositories/{teamname}

Но эта ссылка возвращает статус 301 (навсегда перемещена в !api/2.0/repositories/{teamname}).

Хорошо, но этот возвращает статус 200 с нулевым репозиторием.

Я указываю два параметра как user и password, но ничего не изменилось.

Итак, может ли кто-нибудь ответить, как получить полный список частных репозиториев, разрешенных конкретному пользователю?


person gaussblurinc    schedule 06.05.2014    source источник
comment
Первая конечная точка у меня отлично работает. Помните, что вам необходимо пройти аутентификацию, чтобы увидеть частные репозитории, и вы должны быть членом этой команды и иметь как минимум доступ для чтения к репозиториям.   -  person Alexandru Guzinschi    schedule 17.05.2014
comment
Я чувствую, что битбукетный API настолько плох, что никто не знает, как с ним что-то делать.   -  person AFP_555    schedule 13.05.2019


Ответы (4)


Документация Atlassian — Repositories Endpoint содержит подробную документацию о том, как получить доступ хранилища.

URL-адрес, упомянутый в битбакете для ПОЛУЧЕНИЯ списка репозиториев для учетной записи:

GET https://api.bitbucket.org/2.0/repositories/{owner}

Если вы используете вышеуказанный URL-адрес, он всегда извлекает репозитории, владельцем которых вы являетесь. Чтобы получить полный список репозиториев, членом которых является пользователь, вы должны вызвать:

GET https://api.bitbucket.org/2.0/repositories?role=member

Вы можете применить следующий набор фильтров для роли в зависимости от ваших потребностей.

Чтобы ограничить набор возвращаемых репозиториев, примените параметр role=[owner|admin|contributor|member], где роли:

  • владелец: возвращает все репозитории, принадлежащие текущему пользователю.
  • admin: возвращает репозитории, к которым у пользователя есть явный доступ администратора.
  • участник: возвращает репозитории, к которым у пользователя есть явный доступ для записи.
  • member: возвращает репозитории, к которым у пользователя есть явный доступ для чтения.

Изменить-1:
Вы можете использовать браузер Bitbucket REST для тестирования запроса/ ответ.(прекращено)

person blizzard    schedule 25.09.2015
comment
OP (и я посмертно) хочу, чтобы эта информация относилась к конкретному пользователю, а не к текущему пользователю. Эта функциональность оказалась доступной в v1 API в качестве конечной точки привилегий, однако v2 не имеет той же конечной точки. - person andyfeller; 18.05.2017
comment
@ user771555 v2 API не является полной заменой v1. Если у v2 API нет конечной точки — и функции не были перенесены в совершенно другую конечную точку — вы можете продолжать использовать конечные точки API v1. Например, на момент написания этой статьи конечная точка привилегий по-прежнему существовала только в API версии 1 по адресу api.bitbucket.org/1.0. / привилегии, и нет реализации v2, но конечная точка v1 работает без проблем. (Кроме того, вы умерли? re:посмертно) - person simpleuser; 30.09.2017
comment
ССЫЛКА на справочник по API 2.0 для репозиториев developer.atlassian.com/bitbucket/api /2/ссылка/ресурс/ - person thun; 27.03.2018
comment
Нигде в своей документации они не упомянули, что базовый URL-адрес — https://api.bitbucket.org, что ужасно глупо. - person qed; 09.09.2018
comment
Здесь есть разбиение на страницы, есть ли способ получить все страницы одним GET-запросом? - person Alexander Mills; 10.05.2019
comment
Документация не говорит об этом параметре фильтрации. Откуда вы это знаете и где можно об этом подробнее прочитать? - person Martynas; 06.09.2019

Не следует использовать API из домена https://bitbucket.org/api.

Вместо этого всегда следует использовать https://api.bitbucket.org.

Теперь одна из причин, по которой вы можете получить пустой результат после перенаправления, может заключаться в том, что некоторые http-клиенты будут отправлять учетные данные Basic Auth, только если сервер явно запрашивает их, возвращая ответ 401 с заголовком ответа WWW-Authenticate.

Конечная точка репозитория не требует аутентификации. Он просто вернет репозитории, которые видны анонимным пользователям (в вашем случае это вполне может быть пустой набор), и поэтому клиенты, которые настаивают на вызове WWW-Authenticate (их много, включая Microsoft Powershell), не будут работать должным образом (обратите внимание, curl всегда охотно отправляет учетные данные Basic Auth, что делает его хорошим инструментом для тестирования).

person Erik van Zijst    schedule 30.09.2015

К сожалению, из того, что я вижу в документации, нет возможности перечислить все частные репозитории, к которым у пользователя есть доступ.

GET https://api.bitbucket.org/2.0/repositories

«Возвращает разбитый на страницы список всех общедоступных репозиториев». согласно документу.

GET https://api.bitbucket.org/2.0/repositories/{owner}

«Возвращает разбитый на страницы список всех репозиториев, принадлежащих указанной учетной записи или UUID». согласно документу.

Таким образом, получение всех частных репозиториев, не обязательно принадлежащих пользователю, либо невозможно, либо я не нашел нужную конечную точку, либо документация неточна.

person Fletch    schedule 02.12.2019

В дополнение к ответу Blizzard я только что написал небольшой скрипт node.js:

import axios from 'axios';
import fs from 'fs';


async function main() {
    const bitbucket = axios.create({
        baseURL: 'https://api.bitbucket.org/2.0',
        auth: {
            username: process.env.BITBUCKET_USERNAME!,
            password: process.env.BITBUCKET_PASSWORD!,
        }
    });

    const repos = [];
    let next = 'repositories?role=member';

    for(;;) {
        console.log(`Fetching ${next}`)
        const res = await bitbucket.get(next);
        if(res.status < 200 || res.status >= 300) {
            console.error(res);
            return 1;
        }
        repos.push(...res.data.values);
        if(!res.data.next) break;
        next = res.data.next;
    }
    console.log(`Done; writing file`);
    await fs.promises.writeFile(`${__dirname}/../data/repos.json`,JSON.stringify(repos,null,2),{encoding:'utf8'});
}


main().catch(err => {
    console.error(err);
});
person mpen    schedule 27.12.2019