Akronymet REST står for REpresentational State Transfer, mens API står for Application Programming Interface. Sammen refererer de til et REST API. En REST API er en tjeneste som overfører forespørsler og svar mellom to programvaresystemer, på en REST-arkitektur.
REST-arkitekturen bygger webtjenester som er tilgjengelige via URL-er ved å bruke ett av fire forespørselsverb: POST, GET, PUT og DELETE. Så du kan si at en REST API er programvare som lar deg opprette, lese, oppdatere og slette ressurser via URL-er.
Du kan lære hvordan du oppretter et REST API ved å bruke Spring Boot.
Initialiserer Spring Boot-applikasjonen
Det første du bør gjøre er gjør deg kjent med vårens grunnleggende og sett opp en Spring Boot-applikasjon. Du må imidlertid endre avhengighetene. I tillegg til nettavhengigheten, må du få avhengigheten av Spring Data Java Persistent API (JPA), og driveren for databasen du har tenkt å bruke (denne applikasjonen vil bruke MySQL).
For denne REST APIen trenger du en kontroller, en modell og et depot. Så REST API vil ha følgende filstruktur:
Opprette modellen
Den første klassen du må lage er kundemodellen, som lagrer datalogikken.
pakke com.onlineshopaholics.api.model;
import jakarta.utholdenhet. Kolonne;
import jakarta.utholdenhet. Entitet;
import jakarta.utholdenhet. Generert Verdi;
import jakarta.utholdenhet. GenerationType;
import jakarta.utholdenhet. ID;
import jakarta.utholdenhet. Bord;@Bord(navn="kunde")
@Entitet
offentligklasseKunde{
@Id
@GeneratedValue(strategi = GenerationType. AUTO)
privat Heltalls-ID;@Kolonne(navn="Kundenavn")
privat Strengnavn;privat E-poststreng;
offentlig Heltall getId(){
komme tilbake id;
}offentligtomromsetId(heltalls-ID){
dette.id = id;
}offentlig String getName(){
komme tilbake Navn;
}offentligtomromsettnavn(strengnavn){
dette.navn = navn;
}offentlig String getE-post(){
komme tilbake e-post;
}
offentligtomromsett e-post(E-poststreng){
dette.email = e-post;
}
}
Fra kundeklassen ovenfor ser du at hver kunde har en ID, navn og e-postadresse. Du vil også legge merke til flere merknader som tjener forskjellige formål.
- @Entity: Erklærer kundeklassen som en JPA-enhet. Dette betyr at JPA vil bruke feltene i klassen til å lage kolonner i en relasjonsdatabase.
- @Tabell: Angir navnet på tabellen som skal tilordnes kundemodellklassen.
- @Id: Angir en egenskap som unikt vil identifisere enheten i databasen.
- @GeneratedValue og @GenerationType: Disse jobber sammen for å spesifisere en automatisk generert strategi for feltet som det assosieres med. Så, id-feltet vil automatisk generere en unik verdi hver gang du oppretter en ny kunde.
- @Kolonne: Angir en egenskap som tilordnes til en kolonne i databasen. Så navneegenskapen vil tilordnes en kundenavn-kolonne i databasen.
Opprette depotet
Dette depotet lar deg samhandle med kundedataene i databasen.
pakke com.onlineshopaholics.api.repository;import org.springframework.data.repository. CrudRepository;
import com.onlineshopaholics.api.model. Kunde;
offentliggrensesnittKundelagerstrekkerCrudRepository<Kunde, Heltall>{}
Kundelageret utvides Vårens CrudRepositoy grensesnittet, og sender det kundemodellklassen sammen med typen av den unike identifikatoren for enheten, heltall.
CrudRepository-grensesnittet gir tilgang til over 10 operasjoner, inkludert de generiske CRUD-metodene du trenger for REST API. Så fordi CrudRepository allerede definerer metodene du trenger, er det ikke nødvendig å eksplisitt deklarere dem i CustomerRepository-grensesnittet.
Opprette kontrolleren
Kontrolleren lar deg oppdatere dataene i databasen din ved å bruke modellen og depotet.
pakke com.onlineshopaholics.api.controller;import java.util. Valgfri;
import org.springframework.beans.factory.annotation. Autowired;
import org.springframework.web.bind.annotation. DeleteMapping;
import org.springframework.web.bind.annotation. GetMapping;
import org.springframework.web.bind.annotation. PathVariable;
import org.springframework.web.bind.annotation. PostMapping;
import org.springframework.web.bind.annotation. PutMapping;
import org.springframework.web.bind.annotation. RequestBody;
import org.springframework.web.bind.annotation. RequestMapping;
import org.springframework.web.bind.annotation. RequestParam;
import org.springframework.web.bind.annotation. ResponseBody;
import org.springframework.web.bind.annotation. RestController;
import com.onlineshopaholics.api.model. Kunde;
import com.onlineshopaholics.api.repository. CustomerRepository;
@RestController
@RequestMapping("/kunder")
offentligklasseKundekontroller{
@Autowired
privat CustomerRepository kundeRepository;
// opprette ny kunde
@PostMapping("/Legg til")
offentlig Kunde legg til Ny kunde(@RequestBody Kunde ny kunde){
Kundebruker = ny Kunde();
bruker.settNavn (nyKunde.getNavn());
bruker.settE-post (nyKunde.getE-post());
customerRepository.save (bruker);
komme tilbake bruker;
}
// se alle kunder
@GetMapping("se alt")
offentlig@ResponseBodyIterablegetAllekunder() {
komme tilbake kundeRepository.findAll();
}
// se spesifikk kunde
@GetMapping("view/{id}")
offentlig Valgfrifå kunde(@PathVariable Integer-ID) {
komme tilbake customerRepository.findById (id);
}
// oppdater en eksisterende kunde
@PutMapping("/edit/{id}")
offentlig String Oppdater( @RequestBody Customer updateCustomer, @PathVariable Integer id){
komme tilbake customerRepository.findById (id)
.map (kunde -> {
kunde.settNavn (oppdaterKunde.getNavn());
customer.setEmail (updateCustomer.getEmail());
customerRepository.save (kunde);
komme tilbake"Kundedetaljer har blitt oppdatert!";
}).orElseGet(() -> {
komme tilbake"Denne kunden eksisterer ikke";
});
}
// slett kunde
@DeleteMapping("delete/{id}")
offentlig String slette(@PathVariable("id")Heltalls-ID) {
customerRepository.deleteById (id);
komme tilbake"Kunden har blitt slettet!";
}
}
Kontrolleren ovenfor utstyrer REST API med CRUD-operasjoner, ved å bruke fem av CrudRepository
- @RestController: Denne merknaden har to formål. Den markerer en klasse for oppdagelse ved komponentskanning. Den ber også Spring om å skrive returverdien for alle metodene, i denne klassen, i svarteksten.
- @RequestMapping: Definerer grunnlinjeforespørselsmønsteret som kontrolleren skal håndtere. Så denne kontrolleren vil håndtere alle forespørsler til "/kunder".
- @ResponseBody: Lar en metode returnere en hel enhet.
- @RequestBody: Lar deg konvertere forespørselsteksten til et objekt.
- @RequestParam: Lar deg isolere én egenskap fra et objekt.
- @PathVariable: Lar deg tilordne en forespørselsverdi til en plassholder. Den kartlegger ID-en gitt til slettemetoden med en eksisterende verdi i databasen.
- @PostMapping: Lar deg lage ressurser.
- @GetMapping: Lar deg lese ressursdata.
- @PutMapping: Lar deg oppdatere ressurser.
- @DeleteMapping: Lar deg slette ressurser.
Koble databasen til applikasjonen din
For å koble en database til en hvilken som helst Spring-applikasjon, må du bruke applikasjonsegenskaper fil under ressursmappen. Denne filen er i utgangspunktet tom, så du kan fylle den med de riktige egenskapene for databasen du har tenkt å bruke. Denne applikasjonen vil bruke en MySQL-database, så filen application.properties vil inneholde følgende data:
spring.jpa.hibernate.ddl-auto=oppdatering
spring.jpa.open-in-view=false
spring.datasource.url=jdbc: mysql://${MYSQL_HOST: localhost}:3306/onlineshopaholics
spring.datasource.username=root
spring.datasource.password=securepw
spring.datasource.driver-class-name=com.mysql.cj.jdbc. Sjåfør
Dataene ovenfor viser at denne applikasjonen vil koble til en MySQL-database kalt onlineshopaholics, med et "root"-brukernavn og "securepw" som passord. Det neste trinnet ditt er å lage databasen og kundetabellen i MySQL.
Opprette forespørsler
Det er mange verktøy du kan bruke for å teste REST API. Postman er et populært REST API-testverktøy, og du kan bruke den til å teste den enkle API-en du har bygget. Etter å ha opprettet MySQL-tabellen og kjørt Spring-applikasjonen, kan du starte Postman og eksperimentere med de fire forespørselsverbene.
POST-forespørsel
Denne forespørselen lar deg opprette nye kunder ved å bruke REST API. For å fullføre denne forespørselen, må du gå til overskriftsdelen av innleggsforespørselen din og opprette en ny overskrift (innholdstype). Du bør angi denne overskriftens verdi til application/json, siden du vil opprette nye kunder ved hjelp av JSON.
I brødteksten i forespørselen må du endre typen til rå og sette inn JSON. Deretter må du sette inn nettadressen til innlegget:
Sending av forespørselen vil returnere følgende svar:
Du kan se at forespørselen var vellykket, og den nye kunden har også en id.
FÅ forespørsel
Nå som du har en kunde, kan du se den med get-forespørselen som returnerer alle kunder:
Eller hver kunde etter ID:
PUT-forespørsel
Du kan oppdatere Janet med et nytt etternavn og e-postadresse.
SLETT forespørsel
Du kan også slette Janet fra databasen.
Test din Spring REST API ved å bruke JUnit
Med Spring Boot kan du teste hvilken som helst applikasjon (inkludert REST APIer) ved å bruke Springs testfil. Programvaretesting er viktig for Spring Boot. Hver initialisert Spring-applikasjon bruker JUnit for testing og lar deg sende forespørsler til REST APIene.