[JAVA] Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.

Zielgruppe, um den Artikel zu lesen

・ Diejenigen, die zum ersten Mal eine externe API verwenden ・ Spring-Boot-Anfänger

Ich schreibe unter der Annahme, dass.

Zweck

Ich denke, dass jedes Unternehmen häufig Mikrodienste erstellt und diese als externe APIs bereitstellt. Wenn ich eine externe API in meinen Service einbinde, möchte ich sie für zukünftige Arbeiten verwenden, indem ich lerne, wie die Clientbibliothek verwendet wird und wie sie grundlegend verwendet wird, z. B. die Zuordnung von Daten im Json-Format zu Java-Objekten. Ich bin.

Ergebnisse

GithubAPITest.gif

Wenn Sie auf die GitHub-Such-API klicken, wird das Repository nach Sprache durchsucht und der Repository-Name und Benutzername sowie die Übersicht über das Repository werden erfasst und angezeigt.

Umgebung

FW:spring-boot 2.2.5 Template Engine: Thymeleaf 3.0.4 HTTP-Client-Bibliothek: okhttp3 4.4.1 Gegenseitige Konvertierungsbibliothek von Json zu Java-Objekt: gson 2.8.6

Da Maven für das Projektmanagement verwendet wird, werden die Abhängigkeiten in pom.xml beschrieben.

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>

Informationen zur GitHub Search API

GitHub Search API Official

Sie können nach Repositorys, Benutzern, Problemen und PR suchen. Es ist sehr einfach zu bedienen und erfordert keine vorherige Registrierung der Mitgliedschaft (die Anzahl der Anfragen ist jedoch begrenzt).

https://api.github.com/search/repositories?q=Suchbegriff

https://api.github.com/search/repositories?q=java Wenn Sie versuchen, die obige URL in Ihren Browser einzugeben, werden die Suchergebnisse für das Suchwort "java" in Ihrem Browser angezeigt. Sie können die Programmsprache auch suchen und sortieren, indem Sie sie wie folgt anpassen: "Q = Suchwort + Sprache: Ruby" (Einzelheiten finden Sie unter der obigen URL).

Konvertieren Sie danach diesen Inhalt von Json nach Java und zeigen Sie ihn in Thymeleaf an.

Erklärung des Quellcodes

Gson

[Java] Konvertieren Sie JSON in Java und Java in JSON - Verwendung von GSON und Jackson-

Erstellen Sie zunächst ein POJO, um Json-Parameter wie oben beschrieben in Java zu speichern. Insbesondere habe ich die API entsprechend getippt, die im Browser angezeigten Parameter kopiert und eingefügt und ein POJO mit "jsonschema2pojo" erstellt. Sehr angenehm. .. ..

Wenn Sie jsonschema2pojo verwenden, erhalten Sie drei Klassen: Beispiel, Gegenstand und Besitzer. Ich habe nur "Beispiel" in "ResultApi" umbenannt.

@SerializedName

Durch Hinzufügen der Annotation @SerializedName (com.google.gson.annotations.SerializedName) zum Zielmitglied können Sie den Elementnamen zum Zeitpunkt der JSON-Ausgabe in einen beliebigen Wert ändern.

@Expose

In Standard Serializable werden Felder mit Transient nicht serialisiert (nicht gespeichert). In Gson können nur Felder mit der Annotation Expose serialisiert werden.

Quelle: GSON1, [GSON2](http://www.ne.jp/asahi/hishidama/home/ tech / java / google / gson.html)

okhttp3

Ich verwies auf POST in der Java-Methode mit OkHttp3 und Methode mit HttpUrlConnection-.

Wenn wir auf einen Webserver zugreifen, greifen wir normalerweise über die HTTP-Kommunikation über einen Browser darauf zu. Der Anforderungsinhalt ist jedoch nur das Suchwort und wird im Browser angezeigt, ohne dass etwas Besonderes bekannt ist. Ich werde. Bei dieser programmgesteuerten Ausführung handelt es sich um eine Bibliothek, die Anforderungen ausgibt, Clientinformationen erstellt, HTTP-Kommunikation ausführt, Antwortergebnisse speichert usw.

Regler

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 {

		//URL erstellen. Das Suchwort und das Optionsfeld werden während der Postkommunikation erfasst und in der URL gespeichert.
		String url = "https://api.github.com/search/repositories?q=" + target + "+" + "language:" + language;

		//Wir haben die für die HTTP-Kommunikation erforderlichen Informationen vorbereitet. Schließlich wird das Ergebnis im Antworttext gespeichert.
		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();

		//Informationen im JSON-Format werden in POJO gespeichert, das von jsonschema2pojo erstellt wurde.
		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 speichert das Suchwort. @RequestParam (name =" language ", required = false) String language speichert die Programmiersprache des Optionsfelds.

Einzelheiten zur Verwendung von Gson und Http3 finden Sie unter der obigen URL. ResultApi / Item / Eigentümer von POJO wird weggelassen.

Aussicht

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>Prüfung</title>
</head>
<body>
	<form th:action="@{'/apitest'}" method="post">
		<input type="text" name="target">
		<button>Suche</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>Prüfung</title>
</head>
<body>
	<a th:href="@{'/apitest'}">Rückkehr</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>

Dieses Mal werden der USER-Name und die Zusammenfassung des Repositorys extrahiert und angezeigt. Darüber hinaus können Sie auch die Anzahl der Sterne, die Anzahl der Gabeln usw. ermitteln. CSS weggelassen.

Impressionen

Ich denke, Sie haben gelernt, wie man die grundlegende externe API verwendet. Als nächstes möchte ich im Gegenteil herausfordern, eine API zu erstellen und sie im Json-Format auszugeben! !!

Recommended Posts

Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Erstellen Sie mit Spring Boot eine einfache Such-App
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Ich habe mit Spring Boot ein einfaches MVC-Beispielsystem erstellt
Implementieren Sie einen einfachen Web-REST-API-Server mit Spring Boot + MySQL
Erstellen Sie einen Web-API-Server mit Spring Boot
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.
03. Ich habe eine Anfrage von Spring Boot an die Postleitzahlensuch-API gesendet
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Ich habe eine Funktion zum Registrieren von Bildern bei der API in Spring Framework erstellt. Teil 1 (API Edition)
Versuchen Sie, die Springcode-Such-API mit Spring Boot aufzurufen
Ich habe mit Swing eine GUI erstellt
Ich habe eine einfache Empfehlungsfunktion erstellt.
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Flyway mit Spring Boot ausprobiert
Ich habe eine Funktion zum Registrieren von Bildern bei der API in Spring Framework erstellt. Teil 2 (Client Edition)
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 1/3 (Jasper Reports-Einstellungen) zu drucken.
[Rails] Ich habe eine einfache Kalender-Mini-App mit benutzerdefinierten Spezifikationen erstellt.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
02. Ich habe eine API erstellt, um eine Verbindung von Spring Boot zu MySQL (My Batis) herzustellen.
[Ruby] Ich habe einen einfachen Ping-Client erstellt
Erstellen Sie mit Spring Batch eine einfache On-Demand-Charge
Ich habe mit Ruby einen riskanten Würfel gemacht
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Ich habe eine Janken App mit Kotlin gemacht
Ich habe eine Janken App mit Android gemacht
Formularklassenvalidierungstest mit Spring Boot
Spring Boot Form
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
04. Ich habe mit SpringBoot + Thymeleaf ein Frontend gemacht
Ich habe Mosaikkunst mit Pokemon-Bildern gemacht
Ich wollte Spring Boot in einem Multiprojekt gradle
Ich habe einen LINE Bot mit Rails + Heroku gemacht
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Ich habe mit Ruby On Rails ein Portfolio erstellt
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports Extra Edition (Variables Edition) zu drucken.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports Extra Edition (Bildausgabe) zu drucken.
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
Wovon ich süchtig war, als ich eine Spring Boot-Anwendung mit VS Code entwickelte
Ich habe mit Spring Framework eine API-Domain erstellt. Teil 2
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
[Spring Boot] Benutzerinformationen mit Rest API abrufen (Anfänger)
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung
Passen Sie die Antwort auf REST-API-Fehler mit Spring Boot an (Teil 2).
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Ich habe im Frühjahr einen Restful-Server und -Client erstellt.
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Ich habe mit Spring Framework eine API-Domain erstellt. Teil 1
Nginx + Spring Boot Papagei Return LineBot mit VPS gemacht
Passen Sie die Antwort auf REST-API-Fehler mit Spring Boot an (Teil 1).
Mit Spring Boot herunterladen
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.