Рубрики
Без рубрики

Введение в весеннюю оболочку REST

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

Автор оригинала: baeldung.

Введение в весеннюю оболочку REST

1. Обзор

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

Это расширение Spring Shell, поэтому мы рекомендуем прочитать об этом в первую очередь.

2. Введение

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

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

3. Установка

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

brew install rest-shell

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

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. Начало работы

Мы будем работать с API уже разработаны для другой статьи . localhost:8080 используется в качестве базового URL.

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

  • ПОЛУЧИТЬ /статьи – получить все Статья секунда
  • ПОЛУЧИТЬ /статьи/йид – получить Статья по идентификатору
  • ПОЛУЧИТЬ /статьи/поиск/поискByTitle?название и название – получить Статья по названию
  • GET/profile/articles – получить данные профиля для Статья ресурс
  • POST /статьи – создать новую Статья с телом при условии,

Статья класс имеет три поля: ID, название, и содержание.

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

Давайте добавим новую статью. Мы будем использовать почтовый команда прохождения JSON Струнные с – данные параметр .

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

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. Открытие ресурсов

Теперь, когда у нас есть ресурсы, давайте выясним их. Мы собираемся использовать обнаружить команда, которая раскрывает все доступные ресурсы на текущем уровне 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, мы можем получить его с помощью получить команда:

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, используя – парамы параметр.

Давайте статью по данному названию:

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. Установка хедерсов

Командование вызвало головки позволяет управлять заготовщиками в рамках сессионой – каждый запрос будет отправлен с помощью этих заготовок. головки установить берет -имя и -значение аргументы для определения заголовка.

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

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 на экран. Иногда нам нужно сохранить результаты в файле для дальнейшего анализа.

– выходной параметр позволяет выполнять такие операции:

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

>> first_article.txt

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

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

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

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

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

Мы также можем определить переменные в контексте текущего сеанса. Командный вар определяет получить и установить параметры для получения и установки переменной соответственно.

По аналогии с головки , аргументы -имя и -значение для того, чтобы дать название и значение новой переменной:

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"
}

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

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

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

Все пути, которые мы посещаем, записаны. Командный история показывает эти пути в хронологическом порядке :

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 – инструменте командной строки.

Более подробную информацию о проекте можно найти более на GitHub .

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