Einführung in die Spring REST Shell

Einführung in die Spring REST Shell

1. Überblick

In diesem Artikel werfen wir einen Blick auf die Spring REST Shell und einige ihrer Funktionen.

Da es sich um eine Spring Shell-Erweiterung handelt, empfehlen wir, zuerstabout itzu lesen.

2. Einführung

Die Spring REST-Shell ist eine Befehlszeilen-Shell, die die Arbeit mit Spring HATEOAS-kompatiblen REST-Ressourcen erleichtert.

Wir müssen die URLs in Bash nicht mehr mithilfe von Tools wiecurl.bearbeiten. Die Spring REST Shell bietet eine bequemere Möglichkeit zur Interaktion mit REST-Ressourcen.

3. Installation

Wenn wir einen MacOS-Computer mit Homebrew verwenden, können wir einfach den nächsten Befehl ausführen:

brew install rest-shell

Für Benutzer anderer Betriebssysteme müssen wir ein Binärpaket vonthe official GitHub project page herunterladen, das Paket entpacken und eine ausführbare Datei zum Ausführen finden:

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

Eine andere Möglichkeit besteht darin, den Quellcode herunterzuladen und eine Gradle-Aufgabe auszuführen:

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

Wenn alles richtig eingestellt ist, wird die folgende Begrüßung angezeigt:

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

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

4. Anfangen

Wir werden mit der APIalready developed for another article arbeiten. Daslocalhost:8080 wird als Basis-URL verwendet.

Hier ist eine Liste der exponierten Endpunkte:

  • GET/articles - Erhalte alleArticles

  • GET/articles/{id} - Erhalte einArticle durch id

  • GET/articles/search/findByTitle?title={title} - Erhalte einArticle nach Titel

  • GET / profile / articles - Ruft die Profildaten für eineArticle-Ressource ab

  • POST/articles - Erstellen Sie ein neuesArticle mit einem bereitgestellten Body

Die KlasseArticlehat drei Felder:id, title, undcontent.

4.1. Neue Ressourcen erstellen

Fügen wir einen neuen Artikel hinzu. Wir werdenthe post command passing a JSON String with the –data parameter verwenden.

Zuerst müssen wirfollow der URL angeben, die der Ressource zugeordnet ist, die wir hinzufügen möchten. Der Befehlfollow verwendet einen relativen URI, verkettet ihn mitbaseUri und legt das Ergebnis als aktuellen Speicherort fest:

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

Das Ergebnis der Ausführung des Befehls ist:

< 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. Ressourcen entdecken

Wenn wir nun einige Ressourcen haben, lassen Sie uns sie herausfinden. Wir werdenthe discover command which reveals all available resources at the current URI verwenden:

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

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

Da wir den Ressourcen-URI kennen, können wir ihn mit dem Befehlgetabrufen:

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. Abfrageparameter hinzufügen

Mit dem Parameter–paramskönnen Abfrageparameter als JSON-Fragmente angegeben werden.

Lassen Sie uns einen Artikel mit dem angegebenen Titel erhalten:

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. Header setzen

The command called headers allows managing headers within the session scope - Jede Anfrage wird mit diesen Headern gesendet. Dasheaders set verwendet die Argumente–name und–value, um einen Header zu bestimmen.

Wir werden ein paar Überschriften hinzufügen und eine Anfrage stellen, einschließlich dieser Überschriften:

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. Ergebnisse in eine Datei schreiben

Es ist nicht immer wünschenswert, die Ergebnisse einer HTTP-Anforderung auf dem Bildschirm auszudrucken. Sometimes, we need to save the results in a file for further analysis.

Der Parameter–output ermöglicht die Ausführung solcher Operationen:

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

>> first_article.txt

4.6. JSON aus einer Datei lesen

Häufig sind JSON-Daten zu groß oder zu komplex, um mit dem Parameter–dataüber die Konsole eingegeben zu werden.

Außerdem gibt es einige Einschränkungen hinsichtlich des Formats der JSON-Daten, die direkt in die Befehlszeile eingegeben werden können.

Der Parameter–from bietet die Möglichkeit, Daten aus einer Datei oder einem Verzeichnis zu lesen.

Wenn der Wert ein Verzeichnis ist, liest die Shell jede Datei, die mit“.json” endet, und führt einen POST oder PUT mit dem Inhalt dieser Datei durch.

Wenn der Parameter eine Datei ist, lädt die Shell die Datei und die POST / PUT-Daten aus dieser Datei.

Erstellen wir den nächsten Artikel aus der Dateisecond_article.txt:

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

1 files uploaded to the server using POST

4.7. Festlegen von Kontextvariablen

Wir können auch Variablen im aktuellen Sitzungskontext definieren. The command var defines the get and set parameters for getting and setting a variable respectively.

In Analogie zuheaders dienen die Argumente–name und–value zur Angabe des Namens und des Werts einer neuen Variablen:

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

articles

Jetzt drucken wir eine Liste der derzeit verfügbaren Variablen im Kontext aus:

http://localhost:8080:> var list

{
  "articlesURI" : "articles"
}

Nachdem wir sichergestellt haben, dass unsere Variable gespeichert wurde, verwenden wir sie mit dem Befehlfollow, um zum angegebenen URI zu wechseln:

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

4.8. Verlauf anzeigen

Alle von uns besuchten Pfade werden aufgezeichnet. The command history shows these paths in the chronological order:

http://localhost:8080:> history list

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

Jeder URI ist mit einer Nummer verknüpft, mit der dieser URI aufgerufen werden kann:

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

5. Fazit

In diesem Tutorial haben wir uns auf ein interessantes und seltenes Tool im Spring-Ökosystem konzentriert - ein Befehlszeilen-Tool.

Weitere Informationen zum Projektover on GitHub finden Sie hier.

Und wie immer sind alle im Artikel erwähnten Codefragmente inour repository zu finden.