Comment initialiser une API Web avec Spring Boot ?

Initialisation d’une API web avec le framework Spring Boot !
Solveig.jpg
Solveig LECARPENTIERMis à jour le 20 Août 2020
initialisation api web spring boot

Vous souhaitez créer une APIUne API est un programme permettant à deux applications distinctes de communiquer entre elles et d’échanger des données. web simplement ? Rien de mieux que Spring BootFramework Java se basant sur Spring. ! Dans cet article, on vous montre comment initialiser une API web avec Springboot. Allez, c’est parti !

Pourquoi utiliser Spring Boot pour la création d’une API Web ?

Spring Boot (extension de Spring) est un framework de développement Java open source, il permet de concevoir des applications web et est notamment recommandé pour la création d’API web légères et modulaires. A l’opposé, on retrouve le célèbre JavaLangage de développement très populaire ! EE qui est lui, plutôt destiné aux applications d’entreprises très lourdes.

Son principal avantage est d’être bootable facilement ! L’objectif est d’avoir le strict minimum pour lancer son projet, organiser le code et la manière de faire, le tout en optimisant les performances.

Développer une API web avec Springboot, comment ça marche ?

Spring Boot définit une configuration de base permettant de simplifier et rendre rapide la création de nouveaux projets. Notre projet aura seulement besoin de certaines librairies pour commencer.

Il est possible de générer rapidement un nouveau projet sur http://start.spring.io, en spécifiant si c’est un projet Maven ou Gradle, le langage (Java, Kotlin, Groovy), la version de Spring Boot et de Java, le packaging (Jar ou War) et des dépendances de base (facultatif).

On pourra ajouter, dans le pom.xml, d’autres modules au besoin durant l’avancement du projet (Spring Batch, Websocket, serveur de mail...). Il est aussi possible de commencer son projet sur un IDEEnvironnement de développement permettant de faciliter le développement d'applications. tel que IntelliJ. 

spring_boot1.PNG

Ici, on a choisi trois dépendances courantes pour débuter un nouveau projet :

  • Spring Security : norme pour sécuriser l’application. Permet de personnaliser totalement l’authentification (LDAP, OpenID, BDD) et le contrôle d’accès.
  • Rest Repositories : facilite la création des services Web REST.
  • Spring Data JPA : facilite la mise en œuvre des couches d’accès aux données.

On peut explorer le projet avant de le générer, on retrouve alors dans le pom.xml la version de Spring Boot et de Java, les métadonnées de notre projet ainsi que nos dépendances choisies à l’étape précédente.
Nous avons une architecture de base avec le dossier main contenant le back (Java), les ressources et le dossier test pour les tests d’intégration. 

spring_boot2.PNG

Dans "resources” se trouve le fichier application.properties contenant les propriétés de l’application, comme le numéro de port du serveur, l’url d’accès à la BDD, le type d’authentification etc... Il est aussi possible d’avoir ces propriétés dans un fichier YAML, application.yml.

server.port = 8080
spring.application.name = demo
spring.data.mongodb.uri = mongodb://localhost/test

Côté back, deux classes ont été générées :

  • DemoApplication : l’annotation @SpringBootApplication permet de marquer cette classe comme point d’entrée de l’application lors de son exécution et déclenche alors l’ensemble des configurations.
package  com.example.demo;
import  org.springframework.boot.SpringApplication;
import  org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public  class  DemoApplication {

    public  static  void  main(String[] args)  {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • ServletInitializer : exécute l’application déployée à partir du War.
package  com.example.demo;
import  org.springframework.boot.builder.SpringApplicationBuilder;
import  org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public  class  ServletInitializer  extends  SpringBootServletInitializer  {

  @Override
  protected  SpringApplicationBuilder  configure(SpringApplicationBuilder application)  {
      return application.sources(DemoApplication.class);
  }
}

Les annotations SpringBoot

Voici quelques annotations principales proposées par Spring Boot qui permettent d’appliquer facilement des rôles et des comportements à des classes (on vous en cite quelques uns, mais il en existe beaucoup d’autres !) :

@Component : annotation générique pour des composants gérés par Spring.

@Component  
public class DemoClass {
}

@Autowired : injecte des @Component dans une classe pour les utiliser.

public class MailConfig {  
    @Autowired  
    private ApplicationProperties applicationProperties;
}

@Service : classe qui réalise des traitements métiers sur des données.

@Service  
public class StorageService {
}

@Repository : classe qui manipule des données d’une BDD.

@Repository  
public interface UserRepository extends JpaRepository<User, Long> {
}

@Controller : classe exposant une API RESTREST (REpresentational State Transfer) est un style d'architecture logicielle qui fonctionne sous un certain nombre de contraintes..

@Controller  
public class UserController {
}

@RequestMapping : URI de base d’accès à votre API REST (« /api »)

@RestController  
@RequestMapping("/api")  
public class UserResource {
}

Une fois notre application développée, nous pouvons la lancer via un exécutable (Jar ou War contenu dans le dossier target) contenant un serveur embarqué qui va, à son tour, lancer le projet.

Créer une API web avec Springboot : les points forts

Créer une API Web avec Spring Boot comporte plein d’avantages. Pour nous, les plus importants sont les suivants :

  • Légèreté : il n’y a que le strict minimum pour faire tourner les services ! Pas de superflux !

  • Simplicité de prise en main : la configuration simplifiée du projet permet de se concentrer sur la partie métier. La complexité de la création de l’API est gérée par Spring Boot.

  • Rapidité et efficacité : avec un projet Maven ou Gradle, on obtient un Jar ou War, contenant les briques du serveur web qui est directement exécutable dans un service de conteneur comme AWS.

Inconvénient lors de la création d’une API Web Springboot

L’inconvénient majeur avec SpringBoot, c’est le débogage. Spring Boot est composé de plusieurs couches différentes qu’il est possible de décompiler, mais ce n’est pas simple quand on souhaite débugger pour remonter à la source du problème. On passe d’un fichier à un autre puis un autre etc... et ça peut être vraiment très long parfois !

Spring Boot pour créer une API Web, on recommande ?

OUI ! Spring Boot est LE framework pour commencer toute API web rapidement et simplement. À la portée de tous et en quelques clics, nous avons une configuration de base qui permet de démarrer directement le développement de notre projet, que l’on pourra faire évoluer par la suite !

Il est capable de créer des services suffisamment légers et performants, en ne conservant que ce dont nous avons réellement besoin et donne la possibilité de déployer/exécuter l’application sans aucune autre ressource externe... et ça, c’est le top !