[JAVA] J'ai créé un serveur et un client Restful au printemps.

J'ai essayé d'étudier un peu quelque chose appelé API.

Cela semble être une méthode de communication majeure récemment pour la communication entre les serveurs. Eh bien, récemment, chaque service majeur distribue des API, alors j'ai étudié un peu.

Je n'ai pas étudié depuis une heure, j'accepte donc l'édition!

À propos de la chose appelée API

L'API peut adresser les requêtes suivantes au serveur.

Méthode Ce que tu peux faire
GET Obtenez des ressources
POST Création de ressources enfants, ajout de données aux ressources et autres traitements
PUT Mettre à jour les ressources, créer des ressources
DELETE Supprimer la ressource
HEAD En-tête de ressource(Obtenir des métadonnées)
OPTIONS Obtenir des méthodes prises en charge par une ressource
TRACE Confirmation du fonctionnement du proxy
CONNECT Modification de la connexion tunnel avec le comportement du proxy

Personnellement, la seule chose que j'utilise ici est GET POST. Si vous voulez en savoir plus sur les affaires, veuillez en savoir plus.

Fournissez l'API.

Cette fois, nous allons créer l'API la plus simple, l'API pour obtenir JSON avec la méthode GET.

Tout d'abord, du service qui délivre JSON.

(Je n'expliquerai plus le contrôleur de Spring MVC ヾ (.> ﹏ <.) ノ)

APIServiceController.java




import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.TsugaruInfo.formmodel.RegisterForm;

@RequestMapping(value = "/APITransport")
@RestController
public class APIServiceController {
	
	@RequestMapping(value="APIAccessParametors",produces="application/json;charset=UTF-8")
	public String APIAccessParametors() {
		String APIResponseJson = 
			"{\"user\": [\"AtsuAtsuUdon\", \"user\", true],"
			+ " \"toot\": [\"C'est un udon chaud!\"]"
			+ "CWInfo: {CWSituationIs:[true, \"Quelque chose que je veux cacher\"], \"publicToot\", \"something\"]}";
		
		return APIResponseJson;
	}
}

Comme vous pouvez le voir, il ne fait que renvoyer la chaîne. Si vous forcez à augmenter les points ** @RestController et indiquez clairement qu'il s'agit d'un service reposant. ** ** Puisque les chaînes de caractères japonais sont livrées, @RequestMapping produces="application/json;charset=UTF-8" Il est spécifié comme.

Créez RestClient.

Maintenant, récupérons le client qui reçoit cela en utilisant la communication HTTP. Apparemment, Java a un service de repos standard ** API JAX-RS ** et des spécifications client. En tant qu'implémentation, il existe une bibliothèque pratique appelée ** jersey **.

Bien sûr, cette bibliothèque est également gérée par la ** Spring IO Platform **, donc (si vous ne savez pas, ggt (ry) Installons cette bibliothèque à la fois. ** [20190115] Addendum Spring IO Platform a terminé le développement (T_T) Veuillez utiliser Spring Boot pour résoudre la bibliothèque Spring **

pom.xml


		<!-- jersey -->
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.ext</groupId>
			<artifactId>jersey-spring3</artifactId>
		</dependency>
		
		<!-- Jackson -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
		</dependency>

La bibliothèque ci-dessous est une bibliothèque d'analyseurs json et xml appelée Jackson. Il convertit la chaîne json reçue en un objet.

Créons maintenant le côté client.

APIRecieverController.java


@RequestMapping(value = "/APITransport")
@Controller
public class APIRecieverController {

	@RequestMapping(value="recieverClient")
	public ModelAndView recieverClient(Model model) {
		ModelAndView mv = new ModelAndView("APIRecieverView");
		
//Spécifiez les paramètres de communication HTTP et l'URL
//S'il s'agit d'une méthode de publication, placez le corps de la requête ici
//Les en-têtes HTTP peuvent également être inclus
		Client client = ClientBuilder.newClient();
		WebTarget target = client.target("http://localhost:8080")
			    .path("/WebAquarium3.1/APITransport/APIAccessParametors");
			 
		String result = "";
//Tentative de communication HTTP
			try {
			    result = target.request().get(String.class);
			} catch (BadRequestException e) {
			    System.out.println("La réception a échoué > <");
			    throw e;
			}
//Envoyez le json reçu à la vue tel quel.
//Je n'emballerai pas avec Jackson cette fois
		mv.addObject("APIMessage", result);
		return mv;
	}
}

Fondamentalement, c'est comme écrit dans le commentaire. ** 1. Spécifiez l'URL de l'API ** ** 2. Lancer une demande **

Utilisez l'API dans la procédure. Enfin, créez une vue qui affiche ceci. Il dit html, mais bien sûr, c'est .jsp

APIRecieverView.html


<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<head>
<meta content="ja" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>HTTPReciever</title>

<body>

<p>Le message reçu de l'API est</p>
<p>${APIMessage}</p>
<p>est.</p>

</body>

</html>

Recevez simplement la valeur avec **% APIMessage% **. C'est facile. Lançons-le.

image.png

J'ai pu utiliser correctement l'API en utilisant la communication HTTP.

Résumé

Pour être honnête, cela seul ne peut pas être aussi flashy. En ce qui concerne l'acquisition d'informations d'authentification en combinaison avec OAuth2 et Spring Security, je pense que cela deviendra une fonction assez puissante. (Il semble qu'étudier dans cette mesure sera le premier)

Pour le moment, la communication HTTP s'effectue en Java. C'était une étude qui donnait l'impression de maintenir les bases.

URL de référence Jersey Client API: Comment créer un client API Web en Java http://www.techscore.com/blog/2016/09/20/jersey-client-api/ POST dans Jersey Client https://qiita.com/noobar/items/a96e07e441241b1e0215

Recommended Posts

J'ai créé un serveur et un client Restful au printemps.
[Ruby] J'ai créé un simple client Ping
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 2 (édition client)
J'ai créé un programme de jugement des nombres premiers en Java
J'ai créé une bibliothèque d'extension Ruby en C
J'ai fait un jeu de problèmes de calcul simple en Java
[Ruby] J'ai fait un robot avec de l'anémone et du nokogiri.
Ce que j'ai appris lors de la création d'un serveur en Java
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 1 (édition API)
J'ai fait une roulette à Java.
J'ai créé une application de chat.
Fait le côté serveur du jeu de cartes en ligne ⑤
J'ai créé le côté serveur du jeu de cartes en ligne ③
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
J'ai créé le côté serveur du jeu de cartes en ligne ⑥
J'ai essayé JAX-RS et pris note de la procédure
J'ai créé le côté serveur du jeu de cartes en ligne ④
J'ai créé le côté serveur du jeu de cartes en ligne ②
J'ai créé un client RESAS-API en Java
J'ai créé un système d'exemple MVC simple à l'aide de Spring Boot
J'ai essayé le guide d'introduction de Spring Boot [Création d'un service Web RESTful]
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 1/3 (paramètres Jasper Reports)
J'ai créé un PDF avec Java.
J'ai créé une application shopify @java
J'ai participé au JJUG CCC 2019 Spring
J'ai créé une interface graphique avec Swing
J'ai récemment créé une application js dans le langage courant de Dart
[Wire Mock] Je souhaite configurer un serveur stub / simulé en Java et effectuer des tests E2E.
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
Implémenter le client gRPC dans Ruby
J'ai écrit un programme de recherche d'itinéraire dans TDD et j'ai essayé de le refactoriser
J'ai fait une simple fonction de recommandation.
J'ai fait une annotation en Java.
Guide de démarrage de Spring Boot [Utilisation d'un service Web RESTful]
J'ai créé une application correspondante (application Android)
J'ai créé un outil de génération package.xml.
[Android] J'ai créé une application de podomètre.
Créez un projet Spring Boot avec intellij et quittez immédiatement après le lancement
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 2/3 (création de modèle de formulaire)
J'avais des problèmes au travail, j'ai donc créé un plug-in IntelliJ
Je ne trouve pas Pivotal tc server Developer Edition dans Spring Tool Suite
Exécutable serveur avec Spring gradle Comment créer JAR et WAR
J'ai écrit une fonction Lambda en Java et l'ai déployée avec SAM
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
[LINE BOT] J'ai créé un Ramen BOT avec Java (Maven) + Heroku + Spring Boot (1)
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
J'ai essayé un problème de calendrier avec Ruby
J'ai créé un serveur écologique avec scala
J'ai fait une mort risquée avec Ruby
J'ai créé un plug-in pour IntelliJ IDEA
J'ai créé une application Janken avec kotlin
J'ai créé une application de calculatrice sur Android
J'étais accro au @Transactional de Spring
J'ai créé un nouvel outil de déploiement Java
J'ai créé une application Janken avec Android
[* Java *] J'ai participé au JJUG CCC 2019 Spring
J'ai essayé d'incorporer une formule dans Javadoc
Lorsque j'ai défini un bean de portée de session dans Spring Boot, il se comportait étrangement et devait être ajusté.