Введение в 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.