・ Ceux qui utilisent une API externe pour la première fois ・ Débutant au printemps
J'écris en supposant que.
Je pense que chaque entreprise crée souvent des micro-services et les fournit sous forme d'API externes. Parmi eux, lors de l'incorporation d'une API externe dans mon service, je voudrais l'utiliser pour de futurs travaux en apprenant à utiliser la bibliothèque cliente et à utiliser de base comme le mappage des données au format Json vers des objets Java. Je suis.
En appuyant sur l'API de recherche GitHub, le référentiel est recherché par langue, et le nom du référentiel et le nom d'utilisateur, ainsi que la vue d'ensemble du référentiel sont acquis et affichés.
FW:spring-boot 2.2.5 Moteur de modèle: thymeleaf 3.0.4 Bibliothèque cliente HTTP: okhttp3 4.4.1 Bibliothèque de conversion mutuelle de Json en objet Java: gson 2.8.6
Puisque Maven est utilisé pour la gestion de projet, les dépendances sont décrites dans pom.xml.
pom.xml
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
Officiel de l'API de recherche GitHub
Vous pouvez rechercher des référentiels, des utilisateurs, des problèmes et des relations publiques. C'est très simple à utiliser et vous n'avez pas besoin de vous inscrire en tant que membre à l'avance (cependant, le nombre de demandes est limité).
https://api.github.com/search/repositories?q=Rechercher un mot
https://api.github.com/search/repositories?q=java
Si vous essayez d'entrer l'URL ci-dessus dans votre navigateur, vous verrez que les résultats de la recherche pour le mot de recherche "java" sont affichés dans votre navigateur.
Vous pouvez également rechercher et trier la langue du programme en la personnalisant comme ? Q = mot de recherche + langue: ruby
(voir l'URL ci-dessus pour plus de détails).
Après cela, convertissez ce contenu de Json en Java et affichez-le dans Thymeleaf.
Gson
[Java] Convertir JSON en Java et Java en JSON-Comment utiliser GSON et Jackson-
Tout d'abord, créez un POJO pour stocker les paramètres Json en Java comme décrit ci-dessus.
Plus précisément, j'ai tapoté l'API de manière appropriée, copié et collé les paramètres affichés sur le navigateur et créé un POJO avec jsonschema2pojo
. Très pratique. .. ..
Si vous utilisez jsonschema2pojo
, vous obtiendrez trois classes, Exemple, Item et Owner. J'ai renommé uniquement «Exemple» en «ResultApi».
@SerializedName
En ajoutant l'annotation @SerializedName (com.google.gson.annotations.SerializedName) au membre cible, vous pouvez modifier le nom de l'élément au moment de la sortie JSON en une valeur de votre choix.
@Expose
En standard Serializable, les champs avec transitoire ne sont pas sérialisés (non enregistrés). Dans Gson, seuls les champs avec l'annotation Expose peuvent être sérialisés.
Source: GSON1, [GSON2](http://www.ne.jp/asahi/hishidama/home/ tech / java / google / gson.html)
okhttp3
J'ai fait référence à Comment POST JSON dans Java-Méthode en utilisant OkHttp3 et Méthode en utilisant HttpUrlConnection-.
Normalement, lorsque nous accédons à un serveur Web, nous y accédons via une communication HTTP via un navigateur, mais le contenu de la requête n'est que le mot de recherche, et il est affiché sur le navigateur sans rien savoir de spécial. Je vais. Lorsque vous faites cela par programme, c'est une bibliothèque qui émet des demandes, crée des informations sur le client, exécute la communication HTTP, stocke les résultats de la réponse, etc.
DemoGetApiController.java
@Controller
public class DemoGetApiController {
@ModelAttribute
ResultApi init() {
return new ResultApi();
}
@GetMapping("/apitest")
String readme(Model model) throws IOException {
return "rest/apiTest";
}
@PostMapping("/apitest")
String search(
@RequestParam(name = "target", required = false) String target,
@RequestParam(name = "language", required = false) String language,
Model model) throws IOException {
//Créer une URL. Le mot de recherche et le bouton radio sont acquis lors de la communication postérieure et stockés dans l'URL.
String url = "https://api.github.com/search/repositories?q=" + target + "+" + "language:" + language;
//Nous avons préparé les informations requises pour la communication HTTP. Enfin, le résultat est stocké dans le corps de la réponse.
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Call call = client.newCall(request);
Response response = call.execute();
ResponseBody body = response.body();
//Les informations au format json sont stockées dans POJO créé par jsonschema2pojo.
String json = body.string();
Gson gson = new Gson();
ResultApi resultApi = gson.fromJson(json, ResultApi.class);
model.addAttribute("resultApi", resultApi);
return "rest/apiTestResult";
}
}
@RequestParam (name =" target ", required = false) String target
stocke le mot de recherche.
@RequestParam (name =" language ", required = false) String language
stocke le langage de programmation des boutons radio.
Pour plus de détails sur l'utilisation de Gson et Http3, veuillez vous référer à l'URL ci-dessus. ResultApi / Item / Owner de POJO est omis.
apiTest
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<link href="/css/style.css" th:href="@{/css/style.css}" rel="stylesheet" type="text/css"></link>
<title>tester</title>
</head>
<body>
<form th:action="@{'/apitest'}" method="post">
<input type="text" name="target">
<button>Chercher</button>
<p>
<label><input type="radio" name="language" value="java" checked>java</label>
<label><input type="radio" name="language" value="ruby">ruby</label>
<label><input type="radio" name="language" value="c#">c#</label>
<label><input type="radio" name="language" value="python">python</label>
<label><input type="radio" name="language" value="javascript">javascript</label>
<label><input type="radio" name="language" value="c"> c</label>
</p>
</form>
</body>
</html>
apiTestResult
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<link href="/css/style.css" th:href="@{/css/style.css}" rel="stylesheet"
type="text/css"></link>
<title>tester</title>
</head>
<body>
<a th:href="@{'/apitest'}">Revenir</a>
<div class="gitContents">
<div class="card card-skin" th:each="item, stat : ${resultApi.items}">
<div class="card__imgframe">
<img th:src="${item.owner.avatarUrl}">
</div>
<div class="card__textbox">
<div class="card__titletext">
<a th:href="${item.htmlUrl}"><span th:text="${item.name}"></span></a>
</div>
<div class="card__overviewtext">
<ul>
<li>USER : <span th:text="${item.owner.login}"></span></li>
<li>DESCRIPTION : <span th:text="${item.description}"></span></li>
</ul>
</div>
</div>
</div>
</div>
</body>
</html>
Cette fois, le nom USER et le résumé du référentiel sont extraits et affichés. De plus, vous pouvez également obtenir le nombre d'étoiles, le nombre de fourches, etc. CSS omis.
Je pense que vous avez appris à utiliser l'API externe de base. Ensuite, au contraire, je voudrais défier de créer une API et de la sortir au format Json! !!
Recommended Posts