Spring REST Shell介绍

2023/05/19

1. 概述

在本文中,我们将了解Spring REST Shell及其一些特性。

这是一个Spring Shell扩展,所以我们建议先阅读

2. 简介

Spring REST Shell是一个命令行shell,旨在促进使用符合Spring HATEOAS的REST资源。

我们不再需要使用curl等工具在 bash中操作URL。Spring REST Shell提供了一种更方便的与REST资源交互的方式。

3. 安装

如果我们使用带有Homebrew的macOS机器,我们可以简单地执行下一个命令:

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。

以下是公开端点的列表:

  • GET /articles:获取所有Articles
  • GET /articles/{id}:通过id获取文章
  • GET /articles/search/findByTitle?title={title}:按标题获取文章
  • GET /profile/articles:获取文章资源的配置文件数据
  • POST /articles:创建一个新的文章,提供正文

Article类具有三个字段:id、title和content。

4.1 创建新资源

让我们添加一篇新文章,我们将使用post命令传递带有data参数的JSON字符串。

首先,我们需要遵循与我们要添加的资源关联的URL。以下命令采用相对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 发现资源

现在,当我们获得一些资源时,让我们找出它们。我们将使用discover命令显示当前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 添加查询参数

我们可以使用–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的命令允许在会话范围内管理标头——每个请求都将使用这些标头发送。标头集采用–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参数提供了从文件或目录中读取数据的可能性。

如果该值是一个目录,shell将读取每个以“.json”结尾的文件,并使用该文件的内容执行POST或PUT。

如果参数是文件,则shell将从该文件加载文件和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"
}

确保我们的变量已保存后,我们将使用它和以下命令切换到给定的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上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章