Если вы работаете с 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 доступна как в виде предварительно собранных бинарных файлов, так и в виде исходного кода, который вы можете собрать самостоятельно.

Установка с помощью бинарных файлов

  1. Перейдите на страницу релизов и скачайте последнюю версию для вашей операционной системы.

  2. Добавьте бинарный файл в переменную окружения $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)


  1. Odin41
    17.09.2024 02:47

    Добавить графический интерфейс.


    1. idsulik Автор
      17.09.2024 02:47

      ascii графику или же полноценное desktop приложение?


  1. vvardenfell
    17.09.2024 02:47

    Вот если бы интерактивный вариант типа k9s)


    1. idsulik Автор
      17.09.2024 02:47
      +1

      Это обязательно будет, спасибо


  1. aggromarus
    17.09.2024 02:47
    +1

    А что мешает для тестирования того или иного эндпоинта нажать в Сваггере "Try out" ?

    Выглядит как инструмент для тех, кто просто угорает мануальным набором в консольке, мб я не правильно смотрю? В чем плюс то?


    1. idsulik Автор
      17.09.2024 02:47

      swagger ui не очень удобен:

      1. тебе нужно либо развернуть swagger ui, либо же скопировать содержимое в существующий ui

      2. далее тебе нужно найти нужный endpoint среди кучи других

      3. кликать на кнопку

      4. заполнить поля

      5. кликать на кнопку еще раз

      а с CLI, ты выполняешь гораздо меньше шагов + все это работает быстро и удобно


      1. aggromarus
        17.09.2024 02:47

        Для оптимального поиска нужных эндпоинтов есть тэги и нет проблем раскидать по разным контроллерам их.

        А каждый раз писать консольную команду это быстрее и оптимальнее клика на UI, так?


        1. idsulik Автор
          17.09.2024 02:47

          1. мне лично удобнее пользоваться cli, т.к. он у меня всегда под рукой, нежели открытая страница swagger ui)

          2. если большой swagger, то swagger-ui подвисает

          В целом дело вкуса) кому-то docker desktop подавай, а кому-то удобнее docker cli, я лично пользуюсь вторым, но также видел, как многие пользуются desktop UI для запуска контейнеров и тд


    1. baldr
      17.09.2024 02:47
      +2

      А что мешает для тестирования того или иного эндпоинта нажать в Сваггере "Try out" ?

      У меня есть несколько API, доступ к которым разрешен только через VPN, причем, запущенный только с IP-адреса из whitelist. В whitelist добавлены толко адреса продакшен серверов.

      Соответственно, если что-то не работает и надо проверить этот АПИ, то приходится прокидывать туннели. Если это можно сделать прямо на сервере из консоли - то, возможно, это будет удобнее.


      1. idsulik Автор
        17.09.2024 02:47

        Хороший use case, если есть предложения как было бы удобнее это сделать, напишите.
        Моя идея - это сделать команду:

        swama request send --method=POST --endpoint=/user

        а далее интерактивно дать возможность вводить параметры.
        + можно сделать параметр, чтобы json-ом передавать параметры


        1. baldr
          17.09.2024 02:47
          +1

          Вообще говоря, когда я увидел интерфейс в табличках - сразу подумал что оно интерактивное. Но из статьи понял что нет.

          Идея на будущее - сделать интерфейс, например, на ncurses, readline или что там у вас на Го есть для этого.


          1. idsulik Автор
            17.09.2024 02:47

            а что "интерактивить" хотелось бы? Отправку запросов - да, будет очень удобно, а что еще? смотреть список ручек будет ли удобно интерактивно


        1. baldr
          17.09.2024 02:47
          +1

          Опять же, типичный use case: сначала мы авторизуемся с user/password, получаем access_token, а потом его используем на протяжение всей сессии. Причем, он может протухнуть же.

          Руками указывать в командной строке килобайтный JWT совсем не удобно. Возможно, стоит предусмотреть какой-нибудь локальный кэш (зашифрованный).


          1. idsulik Автор
            17.09.2024 02:47
            +1

            Тоже думал над таким вариантом.
            + есть еще вариант сделать профили, которые будут храниться ~/.swama/profiles

            через cli или интерактивно заполняешь профиль(токен, параметры и т.д.), а потом в cli указываешь -p {myProfile}, тогда он берет данные из профиля, тоже кажется удобный вариант, чтобы не заполнять параметры каждый раз