Привет. Перед прочтением этой статьи настоятельно рекомендую надеть резиновые перчатки, респиратор и что-нибудь на глаза, чтобы не забрызгало.
Мы будем трогать постман.
И здесь не будет скриншотов для кретинов о том, как нажимать кнопочки в его паршивой гуйне, чтобы экспортировать за раз целую 1 коллекцию или 1 запрос в curl. Мы же не животные.
Пост пропитан лютой ненавистью к этому ржавому глюкавому дерьмодемону.
Ура! Наконец и ты тоже решил избавиться от этого проклятого WYSIWYG-а. Конец херовой синхронизации, конец драконовским ограничениям. Хочется чего-то простого и рабочего. Необходимо исправлять ошибки своей молодости.
Ты был несведущ, пацаны говорили, что постман избавит тебя от проблем, сделает счастливым… но ты плотненько подсел на это дерьмо и постоянно пытаешься найти тот одноразовый кайф, который когда-то испытал. В какой-то момент твой братан сдох и вот тебе уже приходится башлять двум индусам-барыгам несметные деньги, чтобы продолжать страдать.
А за это время вся твоя учётка (или даже целая команда некогда классных чюваков и чювесс, которым уже ты сам сломал жизни) обросла коллекциями и переменными.
Что делать?
Давай я помогу тебе, коллега.
Для начала — удали постман. Прямо сейчас и весь.
Да, я серьёзно, не ссы. Вырезай его к херам, с корнями. Он не нужен. Он никогда не был нужен.
Postman — зло. Его не должно существовать.
Люди ошибаются, но люди также в силах бороться с собой. С постманом. Удаляй.
Массовый экспорт
Вариант простой
Подойдёт для тех, кто владеет своим аккаунтом и он зарегистрирован на личную почту, к которой есть доступ.
- Входим в учётку:
https://identity.getpostman.com/login - ЛКМ по своей аватарке -> Settings -> Export data -> Export data -> Request data export
- Ждём архив на свою почту.
Вариант посложнее
Подойдёт тем, кто не имеет доступа к почте, на которую заведена учётка, либо участникам команды, которые работают в одном Workspace и имеют доступ к настройкам. Тут придётся, конечно, изловчиться, но другого выхода нет.
Для начала мы сходим в настройки учётки и создадим себе токен для доступа к Postman API:
- Входим в учётку:
https://identity.getpostman.com/login - ЛКМ по своей аватарке -> Settings -> API keys -> Generate API Key
- Вводим название, подтверждаем и копируем выданный токен куда-нибудь под руку.
Там же, в браузере, возвращаемся в раздел Collections и встаём на любую. В адресной строке, точнее, в самом её конце (после /collection/
), ты увидишь UUID этой коллекции.
Теперь переходи в Environments и вставай на любую из существующих сред. В адресе тоже есть UUID, сразу после /environment/
.
Открываем текстовый редактор и сохраняем вот это в .sh-файл:
#!/bin/bash
api_key="PMAK-***"
declare -A collection_uuids=(
# [название]="UUID"
# ...
)
declare -A environment_uuids=(
# [название]="UUID"
# ...
)
collections_folder="postman/collections"
environments_folder="postman/environments"
##################################################################################################
##################################################################################################
##################################################################################################
log() {
[ ! -d "$log_path" ] && mkdir -p "$log_path"
echo -e "[$(date '+%H:%M:%S')] $*" | tee -a "$log_path/export-$(date '+%Y%m%d').log"
}
log_path="postman/logs"
log "============================================================================"
log "Export started"
if [ "$1" == '-r' ]; then
log "Removing folders (-r provided):\n\t$collections_folder\n\t$environments_folder"
rm -rf "$collections_folder" "$environments_folder"
fi
mkdir -p "$collections_folder" "$environments_folder" "$log_path"
count=${#collection_uuids[@]}
if [ $count == 0 ]; then
log "No collections to export, skipping"
else
cur=1
for name in "${!collection_uuids[@]}"; do
filename="$collections_folder/$name.postman_collection.json"
collection_uuid="${collection_uuids[$name]}"
log "Collection $cur/$count: $name"
log "\tFile\t: $filename"
curl -X GET https://api.getpostman.com/collections/$collection_uuid \
--silent \
--header "Cache-Control: no-cache" \
--header "X-Api-Key: $api_key" \
--output "$filename" 2>&1
[ $? ] && result="OK" || result="ERROR $?"
log "\tResult\t: $result"
((++cur))
done
fi
log "Exporting environments"
count=${#environment_uuids[@]}
if [ $count == 0 ]; then
log "No environments to export, skipping"
else
cur=1
for name in "${!environment_uuids[@]}"; do
filename="$environments_folder/$name.postman_environment.json"
environment_uuid="${environment_uuids[$name]}"
log "Environment $cur/$count: $name"
log "\tFile\t: $filename"
curl -X GET https://api.getpostman.com/environments/$environment_uuid \
--silent \
--header "Cache-Control: no-cache" \
--header "X-Api-Key: $api_key" \
--output "$filename" 2>&1
[ $? ] && result="OK" || result="ERROR $?"
log "\tResult\t: $result"
((++cur))
done
fi
log "Export finished!"
В переменные collection_uuids
и environment_uuids
этого скрипта тебе надо загнать значения в формате [название]="UUID"
, для коллекций и для сред соответственно. Где их брать я упомянул выше.
Забивай уиды, сохраняй в файл и chmod
ь его на +x
. Запускай и получишь на выходе все свои коллекции и среды в виде json-файлов в своих папочках.
Если данных много (куча запросов с тестами, переменными, примерами и описаниями), то экспорт может длиться вплоть до нескольких минут. Это нормально.
Забудь о постмане и живи счастливо. Полдела сделано.
Конвертация
Теперь мы будем всё конвертировать. Для этого я написал вот такую штукенцию:
Ставим:
composer global r axenov/pm-convert
Запускаем:
./pm-convert \
-d ~/postman/collections \
-e ~/postman/localhost.postman_environment.json \
-o ~/postman/exported
--http \
--curl \
--wget
И через секунду радуемся!
Теперь у нас есть пачка файлов запросов, где вместо {{переменных}}
указаны реальные (существующие) значения и все заголовки на месте.
С ними можно делать что угодно! Даже IDEA умеет работать с http-файлами.
Обращу внимание, что сейчас поддерживается только Bearer-авторизация и вон те три формата для конвертации. В остальных форматах я пока не вижу особого смысла, а вот с авторизашками ещё поработаю.
Также я добавлю генерацию md-файлов документации с включёнными примерами. Такая наработка у меня уже есть, но я ещё не перетаскивал её в pm-convert.
Жду твои предложения и баг-репорты:
https://git.axenov.dev/anthony/pm-convert
Следи за обновлениями, там ещё будут плюшечки.
Здравия тебе.
Update 18.09.23
Теперь можно конвертировать коллекции из v2.0 в v2.1 и обратно. Исправлена куча ошибок и логики, так что рекомендую использовать pm-convert с версии 1.5.0 и выше. Ну и вообще, почаще запускать composer global update
.
FAQ
Захотел. Так я просто, быстро и удобно решил задачу без лишних 🚀🚀🚀🚀 выебонов. Оказывается, так тоже можно.
Да. А что с ебалом? Ещё скажи что ты не ставил себе через ноду консольные js-утилиты, которые кто-то тоже мог бы написать в твоей любимой экосистеме, но не написал, потому что он тупой говнарь. Вот и пыху поставишь. Я тоже тупой говнарь 🙂
Ну, или в докер заверни, если такой брезгливый.