Введение в Spring REST Shell

Введение в Spring REST Shell

1. обзор

В этой статье мы рассмотрим Spring REST Shell и некоторые из ее функций.

Это расширение Spring Shell, поэтому мы рекомендуем сначала прочитатьabout it.

2. Вступление

Spring REST Shell - это оболочка командной строки, предназначенная для облегчения работы с Spring HATEOAS-совместимыми ресурсами REST.

Нам больше не нужно манипулировать URL-адресами в bash с помощью таких инструментов, какcurl. Spring REST Shell, обеспечивающий более удобный способ взаимодействия с ресурсами REST.

3. Монтаж

Если мы используем MacOS с Homebrew, мы можем просто выполнить следующую команду:

brew install rest-shell

Для пользователей других операционных систем нам необходимо загрузить бинарный пакет изthe official GitHub project page, распаковать пакет и найти исполняемый файл для запуска:

tar -zxvf rest-shell-1.2.0.RELEASE.tar.gz
cd rest-shell-1.2.0.RELEASE
bin/rest-shell

Другой вариант - загрузить исходный код и выполнить задачу Gradle:

git clone git://github.com/spring-projects/rest-shell.git
cd rest-shell
./gradlew installApp
cd build/install/rest-shell-1.2.0.RELEASE
bin/rest-shell

Если все настроено правильно, мы увидим следующее приветствие:

 ___ ___  __ _____  __  _  _     _ _  __
| _ \ __/' _/_   _/' _/| || |   / / | \ \
| v / _|`._`. | | `._`.| >< |  / / /   > >
|_|_\___|___/ |_| |___/|_||_| |_/_/   /_/
1.2.1.RELEASE

Welcome to the REST shell. For assistance hit TAB or type "help".
http://localhost:8080:>

4. Начиная

Мы будем работать с APIalready developed for another article. localhost:8080 используется как базовый URL.

Вот список открытых конечных точек:

  • GET/articles - получить всеArticles

  • GET/articles/{id} - получитьArticle по id

  • GET/articles/search/findByTitle?title={title} - получитьArticle по заголовку

  • GET / profile / articles - получить данные профиля для ресурсаArticle

  • POST/articles - создать новыйArticle с предоставленным телом

КлассArticle имеет три поля:id, title, иcontent.

4.1. Создание новых ресурсов

Добавим новую статью. Мы собираемся использоватьthe post command passing a JSON String with the –data parameter.

Во-первых, нам нужноfollow URL, связанный с ресурсом, который мы хотим добавить. Командаfollow принимает относительный URI, объединяет его сbaseUri и устанавливает результат как текущее местоположение:

http://localhost:8080:> follow articles
http://localhost:8080/articles:> post --data "{title: "First Article"}"

Результатом выполнения команды будет:

< 201 CREATED
< Location: http://localhost:8080/articles/1
< Content-Type: application/hal+json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 29 Oct 2017 23:04:43 GMT
<
{
  "title" : "First Article",
  "content" : null,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/articles/1"
    },
    "article" : {
      "href" : "http://localhost:8080/articles/1"
    }
  }
}

4.2. Поиск ресурсов

Теперь, когда у нас есть ресурсы, давайте их выясним. Мы собираемся использоватьthe discover command which reveals all available resources at the current URI:

http://localhost:8080/articles:> discover

rel        href
=================================================
self       http://localhost:8080/articles/
profile    http://localhost:8080/profile/articles
article    http://localhost:8080/articles/1

Зная об URI ресурса, мы можем получить его с помощью командыget:

http://localhost:8080/articles:> get 1

> GET http://localhost:8080/articles/1

< 200 OK
< Content-Type: application/hal+json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 29 Oct 2017 23:25:36 GMT
<
{
  "title" : "First Article",
  "content" : null,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/articles/1"
    },
    "article" : {
      "href" : "http://localhost:8080/articles/1"
    }
  }
}

4.3. Добавление параметров запроса

Мы можем указать параметры запроса как фрагменты JSON, используя параметр–params.

Получим статью по заданному заголовку:

http://localhost:8080/articles:> get search/findByTitle \
> --params "{title: "First Article"}"

> GET http://localhost:8080/articles/search/findByTitle?title=First+Article

< 200 OK
< Content-Type: application/hal+json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 29 Oct 2017 23:39:39 GMT
<
{
  "title" : "First Article",
  "content" : null,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/articles/1"
    },
    "article" : {
      "href" : "http://localhost:8080/articles/1"
    }
  }
}

4.4. Установка заголовков

The command called headers allows managing headers within the session scope - каждый запрос будет отправлен с этими заголовками. headers set принимает аргументы–name и–value для определения заголовка.

Мы собираемся добавить несколько заголовков и сделать запрос, включая эти заголовки:

http://localhost:8080/articles:>
  headers set --name Accept --value application/json

{
  "Accept" : "application/json"
}

http://localhost:8080/articles:>
  headers set --name Content-Type --value application/json

{
  "Accept" : "application/json",
  "Content-Type" : "application/json"
}

http://localhost:8080/articles:> get 1

> GET http://localhost:8080/articles/1
> Accept: application/json
> Content-Type: application/json

4.5. Запись результатов в файл

Не всегда желательно выводить на экран результаты HTTP-запроса. Sometimes, we need to save the results in a file for further analysis.с

Параметр–output позволяет выполнять такие операции:

http://localhost:8080/articles:> get search/findByTitle \
> --params "{title: "First Article"}" \
> --output first_article.txt

>> first_article.txt

4.6. Чтение JSON из файла

Часто данные JSON слишком велики или слишком сложны для ввода через консоль с помощью параметра–data.

Кроме того, существуют некоторые ограничения на формат данных JSON, которые мы можем ввести непосредственно в командную строку.

Параметр–from дает возможность читать данные из файла или каталога.

Если значением является каталог, оболочка прочитает каждый файл, который заканчивается на“.json”, и выполнит POST или PUT с содержимым этого файла.

Если параметр является файлом, то оболочка загрузит файл и данные POST / PUT из этого файла.

Создадим следующую статью из файлаsecond_article.txt:

http://localhost:8080/articles:> post --from second_article.txt

1 files uploaded to the server using POST

4.7. Установка переменных контекста

Мы также можем определить переменные в контексте текущего сеанса. The command var defines the get and set parameters for getting and setting a variable respectively.с

По аналогии сheaders, аргументы–name и–value предназначены для указания имени и значения новой переменной:

http://localhost:8080:> var set --name articlesURI --value articles
http://localhost:8080/articles:> var get --name articlesURI

articles

Теперь мы собираемся распечатать список переменных, доступных на данный момент в контексте:

http://localhost:8080:> var list

{
  "articlesURI" : "articles"
}

Убедившись, что наша переменная сохранена, мы будем использовать ее с командойfollow для переключения на данный URI:

http://localhost:8080:> follow #{articlesURI}
http://localhost:8080/articles:>

4.8. Просмотр истории

Все пути, которые мы посещаем, записаны. The command history shows these paths in the chronological order:

http://localhost:8080:> history list

1: http://localhost:8080/articles
2: http://localhost:8080

Каждый URI связан с номером, который можно использовать для перехода к этому URI:

http://localhost:8080:> history go 1
http://localhost:8080/articles:>

5. Заключение

В этом руководстве мы сосредоточились на интересном и редком инструменте в экосистеме Spring - инструменте командной строки.

Вы можете найти больше информации о проектеover on GitHub.

И, как всегда, все фрагменты кода, упомянутые в статье, можно найти вour repository.