Если вы работаете с API, вы наверняка сталкивались с OpenAPI или Swagger для описания ваших API-спецификаций. Хотя эти инструменты облегчают процесс документирования, порой работать с ними через графические интерфейсы или ручной просмотр YAML-файлов бывает неудобно и утомительно.
Здесь на помощь приходит Swama — CLI-инструмент, позволяющий взаимодействовать с API-спецификациями напрямую из терминала. Он упрощает просмотр, фильтрацию и тестирование ваших API с использованием Swagger или OpenAPI.
Что такое Swama?
Swama — это командная утилита, созданная для взаимодействия со спецификациями Swagger/OpenAPI. Она позволяет:
Листать и просматривать все доступные API-эндпоинты.
Преобразовывать эндпоинты в команды
curl
илиfetch
для быстрого тестирования.Фильтровать эндпоинты по HTTP-методу, тегам и путям.
Исследовать теги и серверы, указанные в спецификации API.
{todo} Редактирование данных и экспорт в yaml/json
{todo} Запус mock-сервера
{todo} Команды для отправки запросов на api
Основные возможности
Список API-эндпоинтов: Получите полный список всех доступных API-методов и их путей.
Просмотр эндпоинтов: Подробно изучите каждый метод, его параметры, тело запроса и ответы.
Конвертация в
curl
/fetch
: Преобразуйте эндпоинты в командыcurl
илиfetch
для быстрого тестирования.Работа с тегами и серверами: Легко просматривайте и управляйте тегами и серверами в спецификации API.
Установка
Swama доступна как в виде предварительно собранных бинарных файлов, так и в виде исходного кода, который вы можете собрать самостоятельно.
Установка с помощью бинарных файлов
Перейдите на страницу релизов и скачайте последнюю версию для вашей операционной системы.
-
Добавьте бинарный файл в переменную окружения
$PATH
:-
Linux/MacOS:
sudo mv swama /usr/local/bin/ sudo chmod +x /usr/local/bin/swama
Windows: Добавьте файл в системный
PATH
для глобального доступа.
-
Сборка из исходников
Вы также можете собрать Swama вручную:
git clone https://github.com/idsulik/swama
cd swama
go build -o swama
Пример использования
После установки Swama можно начинать взаимодействовать с вашими Swagger/OpenAPI файлами через командную строку.
Список эндпоинтов
Для того чтобы получить полный список всех эндпоинтов, используйте следующую команду:
swama endpoints list --file swagger.yaml
Вы также можете фильтровать эндпоинты по методу, тегам или конкретным путям:
swama endpoints list --method GET --tag user
# если не указан "--flag", то будет сделана попытка найти файл в текущей директории
Просмотр информации об эндпоинте
Чтобы получить подробную информацию о конкретном эндпоинте, включая HTTP-метод, тело запроса и возможные ответы, используйте команду:
swama endpoints view --endpoint /user --method GET
Конвертация эндпоинта в команду curl или fetch
Одной из ключевых функций Swama является возможность конвертации эндпоинтов в команды curl
или fetch
для тестирования:
swama endpoints convert --file swagger.yaml --endpoint /api/users --method POST --type curl
Общая информация о Swagger/OpenAPI файле
Команда info позволяет быстро получить основную информацию о вашем Swagger/OpenAPI файле, такую как версия, заголовок и описание API.:
swama info view
Список серверов
Команда servers list
выводит список всех серверов, определенных в Swagger/OpenAPI файле, включая их URL и описание. Это может быть полезно, если у вас есть несколько окружений, таких как тестовое, staging или production:
swama servers list
Список тегов
Теги в API используются для группировки эндпоинтов. Команда tags list
выводит все теги, указанные в спецификации API:
swama tags list
Автодополнение
Swama поддерживает автодополнение для командной строки, что позволяет ускорить работу с инструментом. Чтобы включить автодополнение, выполните следующие команды:
-
Bash:
swama completion bash > /etc/bash_completion.d/swama
-
Zsh:
swama completion zsh > ~/.zsh/completion/_swama
Заключение
Swama значительно упрощает работу с API-спецификациями. Теперь, вместо того чтобы вручную искать нужные эндпоинты в Swagger UI или постоянно писать команды curl
, вы можете сделать всё это прямо из вашего терминала.
p.s. напишите в комментариях свои идеи, как можно улучшить инструмент, чтобы он стал еще удобнее и полезнее. Спасибо!
Комментарии (14)
aggromarus
17.09.2024 02:47+1А что мешает для тестирования того или иного эндпоинта нажать в Сваггере "Try out" ?
Выглядит как инструмент для тех, кто просто угорает мануальным набором в консольке, мб я не правильно смотрю? В чем плюс то?
idsulik Автор
17.09.2024 02:47swagger ui не очень удобен:
тебе нужно либо развернуть swagger ui, либо же скопировать содержимое в существующий ui
далее тебе нужно найти нужный endpoint среди кучи других
кликать на кнопку
заполнить поля
кликать на кнопку еще раз
а с CLI, ты выполняешь гораздо меньше шагов + все это работает быстро и удобно
aggromarus
17.09.2024 02:47Для оптимального поиска нужных эндпоинтов есть тэги и нет проблем раскидать по разным контроллерам их.
А каждый раз писать консольную команду это быстрее и оптимальнее клика на UI, так?
idsulik Автор
17.09.2024 02:47мне лично удобнее пользоваться cli, т.к. он у меня всегда под рукой, нежели открытая страница swagger ui)
если большой swagger, то swagger-ui подвисает
В целом дело вкуса) кому-то docker desktop подавай, а кому-то удобнее docker cli, я лично пользуюсь вторым, но также видел, как многие пользуются desktop UI для запуска контейнеров и тд
baldr
17.09.2024 02:47+2А что мешает для тестирования того или иного эндпоинта нажать в Сваггере "Try out" ?
У меня есть несколько API, доступ к которым разрешен только через VPN, причем, запущенный только с IP-адреса из whitelist. В whitelist добавлены толко адреса продакшен серверов.
Соответственно, если что-то не работает и надо проверить этот АПИ, то приходится прокидывать туннели. Если это можно сделать прямо на сервере из консоли - то, возможно, это будет удобнее.
idsulik Автор
17.09.2024 02:47Хороший use case, если есть предложения как было бы удобнее это сделать, напишите.
Моя идея - это сделать команду:swama request send --method=POST --endpoint=/user
а далее интерактивно дать возможность вводить параметры.
+ можно сделать параметр, чтобы json-ом передавать параметрыbaldr
17.09.2024 02:47+1Вообще говоря, когда я увидел интерфейс в табличках - сразу подумал что оно интерактивное. Но из статьи понял что нет.
Идея на будущее - сделать интерфейс, например, на ncurses, readline или что там у вас на Го есть для этого.
idsulik Автор
17.09.2024 02:47а что "интерактивить" хотелось бы? Отправку запросов - да, будет очень удобно, а что еще? смотреть список ручек будет ли удобно интерактивно
baldr
17.09.2024 02:47+1Опять же, типичный use case: сначала мы авторизуемся с user/password, получаем access_token, а потом его используем на протяжение всей сессии. Причем, он может протухнуть же.
Руками указывать в командной строке килобайтный JWT совсем не удобно. Возможно, стоит предусмотреть какой-нибудь локальный кэш (зашифрованный).
idsulik Автор
17.09.2024 02:47+1Тоже думал над таким вариантом.
+ есть еще вариант сделать профили, которые будут храниться ~/.swama/profiles
через cli или интерактивно заполняешь профиль(токен, параметры и т.д.), а потом в cli указываешь -p {myProfile}, тогда он берет данные из профиля, тоже кажется удобный вариант, чтобы не заполнять параметры каждый раз
Odin41
Добавить графический интерфейс.
idsulik Автор
ascii графику или же полноценное desktop приложение?