Задача:
Получить файл из Bitbucket с версией определяемой тегом.
Адрес файла: https://BITBUCKET_ADR/projects/PROJECT_NAME/repos/configs/browse/FILE_NAME.yaml
Общая информация о Bitbucket REST API
Структура REST выглядит следующим образом :http://host:port/context/rest/api-name/api-version/path/to/resource
Ответ приходит в виде json со следующей структурой
1 2 3 4 5 6 7 8 9 10 |
{"lines":[ ……. FILE LINES …… ], "start":0, "size":500, "isLastPage":false, "limit":500, "nextPageStart":500} |
Примечание
Файл не всегда передается полностью. Он разбивается на страницы, для получения полного файла необходимо сделать несколько запросов, пока не достигнем последней страницы "isLastPage":true .
В запросе можно указать дополнительные параметры start и limit
limit - количество строк на одной странице;
start - номер считываемой страницы.
Запрос для получения файла из задачи(Файл небольшой, 2000 строк хватит для того, чтобы получить его полностью).https://BITBUCKET_ADR/rest/api/1.0/projects/PROJECT_NAME/repos/configs/browse/FILE_NAME.yaml?limit=2000
Файл получаем, это уже неплохо. Теперь добавим условие с версией по тегу.
Для начала посмотрим какие теги существуют. Для этого составим запрос следующего вида:http://host:port/context/rest/api-name/api-version/path/to/resource
/tags
Применительно к требуемому репозиторию:https://BITBUCKET_ADR/rest/api/1.0/projects/PROJECT_NAME/repos/configs/tags
Ответ:
1 2 3 4 5 6 |
{"size":9,"limit":25,"isLastPage":true,"values":[ {"id":"refs/tags/20230123","displayId":"20230123","type":"TAG","latestCommit":"2a623c6e7d90f11e5","latestChangeset":"2a623c6e7d90f11e5","hash":null}, ...... {"id":"refs/tags/20221031","displayId":"20221031","type":"TAG","latestCommit":"3043c49e07434d33r3","latestChangeset":"3043c49e07434d33r3","hash":null} ], "start":0} |
Также можно получить информацию по конкретному тегу, ели знаем его ID(Для примера возьмем тег 20221031)https://BITBUCKET_ADR/rest/api/1.0/projects/PROJECT_NAME/repos/configs/tags/refs/tags/20221031
Ответ:
1 |
{"id":"refs/tags/20221031","displayId":"20221031","type":"TAG","latestCommit":"3043c49e07434d33r3","latestChangeset":"3043c49e07434d33r3","hash":null} |
В ответе нас интересует код коммита. Для получения данных по этому коммиту добавим это значение в исходный запрос в атирбуте athttps://BITBUCKET_ADR/rest/api/1.0/projects/PROJECT_NAME/repos/configs/browse/FILE_NAME.yaml?limit=2000&at=3043c49e07434d33r3