Spring RESTシェルの紹介

1概要

この記事では、Spring RESTシェルとその機能について説明します。

これはSpring Shellの拡張なので、最初にlink:/spring-shell-cliを読むことをお勧めします。

2前書き

Spring RESTシェルは、Spring HATEOAS準拠のRESTリソースでの作業を容易にするために設計されたコマンドラインシェルです。

__curlのようなツールを使用してbashでURLを操作する必要はもうありません。Spring REST ShellはRESTリソースと対話するためのより便利な方法を提供します。

3インストール

HomebrewでmacOSマシンを使っているのなら、次のコマンドを実行するだけです。

brew install rest-shell

他のオペレーティングシステムをお使いの場合は、https://github.com/spring-projects/rest-shell/downloads[公式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入門

公開されているエンドポイントのリストは次のとおりです。

  • GET /articles - すべての __Article __を取得

  • GET /articles/\ {id} - idで Article を取得

  • GET /articles/search/findByTitle?title = \ {title} - __記事を入手してください

タイトルで ** GET/profile/articles - Article リソースのプロファイルデータを取得します

  • POST /articles - 本文を指定して新しい Article を作成

Article クラスには、 id、title、 、および content. の3つのフィールドがあります。

4.1. 新しいリソースを作成する

新しい記事を追加しましょう。 post コマンドを使用して、JSONの String – data パラメーターを渡します** 。

まず、追加したいリソースに関連付けられている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. リソースを知る

さて、リソースを入手したら、それらを見つけましょう。現在のURIで利用可能なすべてのリソースを表示する discover コマンドを使用します。

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. クエリパラメータの追加

– params パラメータを使用して、クエリパラメータを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. ヘッダを設定する

  • headers と呼ばれるコマンドはセッションスコープ内でヘッダを管理することを許可します** - すべてのリクエストはこれらのヘッダを使って送信されます。 heders 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リクエストの結果を画面に出力することは、必ずしも望ましいことではありません。時々、我々はさらなる分析のためにファイルに結果を保存する必要があります。

– 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. コンテキスト変数の設定

現在のセッションコンテキスト内で変数を定義することもできます。 ** var コマンドは、それぞれ変数を取得および設定するための get および set パラメータを定義します。

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. 閲覧履歴

私たちが訪れる道はすべて記録されています。 ** history コマンドは、これらのパスを時系列で表示します。

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 プロジェクトの詳細情報を見ることができます。

そして、いつものように、この記事で言及されているすべてのコードスニペットはhttps://github.com/eugenp/tutorials/tree/master/spring-rest-shell[私のレポジトリ]にあります。