Introduction à Shell REST Spring
1. Vue d'ensemble
Dans cet article, nous allons examiner Spring REST Shell et certaines de ses fonctionnalités.
Il s’agit d’une extension Spring Shell, nous vous recommandons donc de commencer par lireabout it.
2. introduction
Spring REST Shell est un shell de ligne de commande conçu pour faciliter l'utilisation des ressources REST compatibles Spring HATEOAS.
Nous n'avons plus besoin de manipuler les URL dans bash en utilisant des outils tels quecurl. Spring REST Shell fournit un moyen plus pratique d'interagir avec les ressources REST.
3. Installation
Si nous utilisons une machine macOS avec Homebrew, nous pouvons simplement exécuter la commande suivante:
brew install rest-shell
Pour les utilisateurs d'autres systèmes d'exploitation, nous devons télécharger un package binaire à partir dethe official GitHub project page, décompresser le package et trouver un exécutable à exécuter:
tar -zxvf rest-shell-1.2.0.RELEASE.tar.gz
cd rest-shell-1.2.0.RELEASE
bin/rest-shell
Une autre option consiste à télécharger le code source et à exécuter une tâche 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
Si tout est correctement configuré, nous verrons le message d'accueil suivant:
___ ___ __ _____ __ _ _ _ _ __
| _ \ __/' _/_ _/' _/| || | / / | \ \
| v / _|`._`. | | `._`.| >< | / / / > >
|_|_\___|___/ |_| |___/|_||_| |_/_/ /_/
1.2.1.RELEASE
Welcome to the REST shell. For assistance hit TAB or type "help".
http://localhost:8080:>
4. Commencer
Nous travaillerons avec les APIalready developed for another article. Lelocalhost:8080 est utilisé comme URL de base.
Voici une liste des points de terminaison exposés:
-
GET/articles - récupère tous lesArticles
-
GET/articles/{id} - obtenir unArticle par id
-
GET/articles/search/findByTitle?title={title} - obtenir unArticle par titre
-
GET / profile / articles - récupère les données de profil pour une ressourceArticle
-
POST/articles - crée un nouveauArticle avec un corps fourni
La classeArticle a trois champs:id, title, etcontent.
4.1. Créer de nouvelles ressources
Ajoutons un nouvel article. Nous allons utiliserthe post command passing a JSON String with the –data parameter.
Tout d'abord, nous devonsfollow l'URL associée à la ressource que nous voulons ajouter. La commandefollow prend un URI relatif, le concatène avec lesbaseUri et définit le résultat comme l'emplacement actuel:
http://localhost:8080:> follow articles
http://localhost:8080/articles:> post --data "{title: "First Article"}"
Le résultat de l'exécution de la commande sera:
< 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. Découvrir les ressources
Maintenant, lorsque nous avons des ressources, découvrons-les. Nous allons utiliserthe 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
Connaissant l'URI de la ressource, nous pouvons le récupérer en utilisant la commandeget:
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. Ajout de paramètres de requête
Nous pouvons spécifier des paramètres de requête en tant que fragments JSON à l'aide du paramètre–params.
Prenons un article du titre donné:
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. Définition des en-têtes
The command called headers allows managing headers within the session scope - chaque demande sera envoyée en utilisant ces en-têtes. Leheaders set prend les arguments–name et–value pour déterminer un en-tête.
Nous allons ajouter quelques en-têtes et faire une demande comprenant ces en-têtes:
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. Écriture des résultats dans un fichier
Il n’est pas toujours souhaitable d’imprimer les résultats d’une requête HTTP à l’écran. Sometimes, we need to save the results in a file for further analysis.
Le paramètre–output permet d'effectuer de telles opérations:
http://localhost:8080/articles:> get search/findByTitle \
> --params "{title: "First Article"}" \
> --output first_article.txt
>> first_article.txt
4.6. Lire JSON à partir d'un fichier
Souvent, les données JSON sont trop volumineuses ou trop complexes pour être saisies via la console à l'aide du paramètre–data.
En outre, le format des données JSON pouvant être entrées directement dans la ligne de commande est limité.
Le paramètre–from donne la possibilité de lire des données à partir d'un fichier ou d'un répertoire.
Si la valeur est un répertoire, le shell lira chaque fichier qui se termine par“.json” et effectuera un POST ou PUT avec le contenu de ce fichier.
Si le paramètre est un fichier, le shell chargera le fichier et les données POST / PUT à partir de ce fichier.
Créons l'article suivant à partir du fichiersecond_article.txt:
http://localhost:8080/articles:> post --from second_article.txt
1 files uploaded to the server using POST
4.7. Définition des variables de contexte
Nous pouvons également définir des variables dans le contexte de la session en cours. The command var defines the get and set parameters for getting and setting a variable respectively.
Par analogie avec lesheaders, les arguments–name et–value servent à donner le nom et la valeur d'une nouvelle variable:
http://localhost:8080:> var set --name articlesURI --value articles
http://localhost:8080/articles:> var get --name articlesURI
articles
Nous allons maintenant imprimer une liste des variables actuellement disponibles dans le contexte:
http://localhost:8080:> var list
{
"articlesURI" : "articles"
}
Après nous être assurés que notre variable a été enregistrée, nous allons l'utiliser avec la commandefollow pour basculer vers l'URI donné:
http://localhost:8080:> follow #{articlesURI}
http://localhost:8080/articles:>
4.8. Affichage de l'historique
Tous les chemins que nous visitons sont enregistrés. The command history shows these paths in the chronological order:
http://localhost:8080:> history list
1: http://localhost:8080/articles
2: http://localhost:8080
Chaque URI est associé à un numéro pouvant être utilisé pour accéder à cet URI:
http://localhost:8080:> history go 1
http://localhost:8080/articles:>
5. Conclusion
Dans ce didacticiel, nous nous sommes concentrés sur un outil intéressant et rare dans l'écosystème Spring: un outil de ligne de commande.
Vous pouvez trouver plus d'informations sur le projetover on GitHub.
Et, comme toujours, tous les extraits de code mentionnés dans l'article se trouvent dansour repository.