Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Akronim REST označava REpresentational State Transfer, dok API označava Application Programming Interface. Zajedno se odnose na REST API. REST API je usluga koja prenosi zahtjeve i odgovore između dva softverska sustava, na REST arhitekturi.

REST arhitektura gradi web usluge kojima se može pristupiti putem URL-ova pomoću jednog od četiri glagola zahtjeva: POST, GET, PUT i DELETE. Dakle, mogli biste reći da je REST API softver koji vam omogućuje stvaranje, čitanje, ažuriranje i brisanje resursa putem URL-ova.

Možete naučiti kako izraditi REST API koristeći Spring Boot.

Inicijalizacija Spring Boot aplikacije

Prvo što biste trebali učiniti je upoznati se s osnovama proljeća i postavite aplikaciju Spring Boot. Ipak ćete morati promijeniti ovisnosti. Osim ovisnosti o webu, morat ćete nabaviti ovisnost Spring Data Java Persistent API (JPA) i upravljački program za bazu podataka koju namjeravate koristiti (ova će aplikacija koristiti MySQL).

instagram viewer

Za ovaj REST API trebat će vam kontroler, model i repozitorij. Dakle, REST API će imati sljedeću strukturu datoteka:

Stvaranje modela

Prva klasa koju ćete morati stvoriti je model kupca, koji pohranjuje logiku podataka.

paket com.onlineshopaholics.api.model;

uvoz jakarta.ustrajnost. Stupac;
uvoz jakarta.ustrajnost. Entitet;
uvoz jakarta.ustrajnost. GeneratedValue;
uvoz jakarta.ustrajnost. GenerationType;
uvoz jakarta.ustrajnost. Iskaznica;
uvoz jakarta.ustrajnost. Stol;

@Stol(ime="kupac")
@Entitet
javnostrazredaKupac{
@Iskaznica
@GeneratedValue(strategija = GenerationType. AUTO)
privatna ID cijelog broja;

@Stupac(ime="Ime kupca")
privatna Naziv niza;

privatna String email;

javnost Cijeli broj dobitiId(){
povratak iskaznica;
}

javnostponištitisetId(ID cijelog broja){
ovaj.id = id;
}

javnost Niz getName(){
povratak Ime;
}

javnostponištitisetName(Naziv niza){
ovaj.name = ime;
}

javnost Niz getEmail(){
povratak e-pošta;
}

javnostponištitisetEmail(String email){
ovaj.email = e-pošta;
}
}

Iz gornje klase kupaca vidjet ćete da će svaki kupac imati ID, ime i e-poštu. Također ćete primijetiti nekoliko napomena koje služe različitim svrhama.

  • @Entity: Klasu korisnika deklarira kao JPA entitet. To znači da će JPA koristiti polja u klasi za stvaranje stupaca u relacijskoj bazi podataka.
  • @Table: Određuje naziv tablice koja će se mapirati u klasu modela korisnika.
  • @Id: Označava svojstvo koje će jedinstveno identificirati entitet u bazi podataka.
  • @GeneratedValue i @GenerationType: rade zajedno kako bi odredili strategiju automatskog generiranja za polje s kojim je povezano. Dakle, ID polje će automatski generirati jedinstvenu vrijednost svaki put kada stvorite novog kupca.
  • @Column: Označava svojstvo koje se preslikava na stupac u bazi podataka. Dakle, svojstvo imena preslikat će se u stupac imena korisnika u bazi podataka.

Stvaranje repozitorija

Ovo spremište omogućit će vam interakciju s podacima o kupcima u bazi podataka.

paket com.onlineshopaholics.api.repository;

uvoz org.springframework.data.repository. CrudRepository;
uvoz com.onlineshopaholics.api.model. Kupac;

javnostsučeljeCustomerRepositoryproteže seCrudRepository<Kupac, Cijeli broj>{}

Repozitorij korisnika se proširuje Spring’s CrudRepositoy sučelje, prosljeđujući mu klasu modela kupca zajedno s vrstom jedinstvenog identifikatora za entitet, Integer.

Sučelje CrudRepository pruža pristup do više od 10 operacija, uključujući generičke CRUD metode koje će vam trebati za REST API. Dakle, budući da CrudRepository već definira metode koje ćete trebati, nema potrebe da ih eksplicitno deklarirate u CustomerRepository sučelju.

Stvaranje kontrolera

Kontroler vam omogućuje ažuriranje podataka u vašoj bazi podataka pomoću modela i repozitorija.

paket com.onlineshopaholics.api.controller;

uvoz java.util. izborno;

uvoz org.springframework.beans.factory.annotation. Autowired;
uvoz org.springframework.web.bind.annotation. DeleteMapping;
uvoz org.springframework.web.bind.annotation. GetMapping;
uvoz org.springframework.web.bind.annotation. PathVariable;
uvoz org.springframework.web.bind.annotation. PostMapping;
uvoz org.springframework.web.bind.annotation. PutMapping;
uvoz org.springframework.web.bind.annotation. RequestBody;
uvoz org.springframework.web.bind.annotation. RequestMapping;
uvoz org.springframework.web.bind.annotation. RequestParam;
uvoz org.springframework.web.bind.annotation. ResponseBody;
uvoz org.springframework.web.bind.annotation. RestController;

uvoz com.onlineshopaholics.api.model. Kupac;
uvoz com.onlineshopaholics.api.repozitorij. CustomerRepository;

@RestController
@RequestMapping("/kupci")
javnostrazredaCustomerController{
@Autoožičeni
privatna CustomerRepository customerRepository;

// stvoriti novog kupca
@PostMapping("/dodati")
javnost Kupac addNewCustomer(@RequestBody Customer newCustomer){
Korisnik kupca = novi Kupac();
user.setName (newCustomer.getName());
user.setEmail (newCustomer.getEmail());
customerRepository.save (korisnik);
povratak korisnik;
}

// pregled svih kupaca
@GetMapping("Pogledaj sve")
javnost@ResponseBodyIterablegetAllCustomers(){
povratak customerRepository.findAll();
}

// pregled određenog kupca
@GetMapping("pogled/{id}")
javnost NeobaveznogetCustomer(@PathVariable Integer id){
povratak customerRepository.findById (id);
}

// ažuriranje postojećeg kupca
@PutMapping("/uredi/{id}")
javnost Niz Ažuriraj( @RequestBody Customer updateCustomer, @PathVariable Integer id){
povratak customerRepository.findById (id)
.map (kupac -> {
customer.setName (updateCustomer.getName());
customer.setEmail (updateCustomer.getEmail());
customerRepository.save (kupac);
povratak"Podaci o kupcu su uspješno ažurirani!";
}).orElseGet(() -> {
povratak"Ovaj kupac ne postoji";
});
}

// brisanje kupca
@DeleteMapping("izbriši/{id}")
javnost Niz izbrisati(@PathVariable("iskaznica")ID cijelog broja) {
customerRepository.deleteById (id);
povratak"Kupac je uspješno izbrisan!";
}
}

Kontroler iznad oprema REST API s CRUD operacijama, koristeći pet CrudRepository metode sučelja (svaka je dodijeljena određenoj metodi). Kontroler također koristi nekoliko važnih Spring napomena koje mu omogućuju obavljanje njegovih funkcija.

  • @RestController: Ova napomena ima dvije svrhe. Označava klasu za otkrivanje skeniranjem komponenti. Također govori Springu da upiše povratnu vrijednost za sve metode, u ovoj klasi, u tijelo odgovora.
  • @RequestMapping: Definira osnovni obrazac zahtjeva koji će kontroler obraditi. Dakle, ovaj kontroler će obraditi sve zahtjeve prema “/customers”.
  • @ResponseBody: Omogućuje metodi vraćanje cijelog entiteta.
  • @RequestBody: Omogućuje pretvaranje tijela zahtjeva u objekt.
  • @RequestParam: Omogućuje izolaciju jednog svojstva od objekta.
  • @PathVariable: Omogućuje mapiranje vrijednosti zahtjeva u rezervirano mjesto. Preslikava ID dan metodi brisanja s postojećom vrijednošću u bazi podataka.
  • @PostMapping: Omogućuje vam stvaranje resursa.
  • @GetMapping: Omogućuje čitanje podataka o resursima.
  • @PutMapping: Omogućuje ažuriranje resursa.
  • @DeleteMapping: Omogućuje brisanje resursa.

Povezivanje baze podataka s vašom aplikacijom

Za povezivanje baze podataka s bilo kojom Spring aplikacijom, morat ćete koristiti primjena.svojstva datoteku u mapi resursa. Ova je datoteka u početku prazna, pa je možete popuniti odgovarajućim svojstvima za bazu podataka koju namjeravate koristiti. Ova će aplikacija koristiti MySQL bazu podataka tako da će datoteka application.properties sadržavati sljedeće podatke:

spring.jpa.hibernate.ddl-auto=ažuriranje
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. Vozač

Gornji podaci pokazuju da će se ova aplikacija povezivati ​​s MySQL bazom podataka pod nazivom onlineshopaholics, s "root" korisničkim imenom i "securepw" kao lozinkom. Vaš sljedeći korak je kreiranje baze podataka i tablice kupaca u MySQL-u.

Izrada zahtjeva

Postoje mnogi alati koje možete koristiti za testiranje vašeg REST API-ja. Postman je popularan REST API alat za testiranje, a možete ga koristiti za testiranje jednostavnog API-ja koji ste izradili. Nakon stvaranja MySQL tablice i pokretanja Spring aplikacije, možete pokrenuti Postman i eksperimentirati s četiri glagola zahtjeva.

POST zahtjev

Ovaj zahtjev će vam omogućiti stvaranje novih kupaca pomoću REST API-ja. Da biste dovršili ovaj zahtjev, morat ćete otići na odjeljak zaglavlja u zahtjevu za objavu i stvoriti novo zaglavlje (vrsta sadržaja). Trebali biste postaviti vrijednost ovog zaglavlja na application/json jer ćete stvarati nove klijente pomoću JSON-a.

U tijelu zahtjeva morat ćete promijeniti vrstu u raw i umetnuti svoj JSON. Zatim ćete morati umetnuti URL objave:

Slanjem zahtjeva vratit će se sljedeći odgovor:

Možete vidjeti da je zahtjev bio uspješan, a novi korisnik ima i ID.

DOBITI zahtjev

Sada kada imate kupca, možete ga vidjeti pomoću zahtjeva za dobivanje koji vraća sve kupce:

Ili svaki kupac po ID-u:

PUT zahtjev

Janet možete ažurirati novim prezimenom i e-poštom.

IZBRIŠI zahtjev

Također možete izbrisati Janet iz baze podataka.

Testirajte svoj Spring REST API koristeći JUnit

Uz Spring Boot, možete testirati bilo koju aplikaciju (uključujući REST API-je) pomoću Springove testne datoteke. Testiranje softvera važno je za Spring Boot. Svaka inicijalizirana Spring aplikacija koristi JUnit za testiranje i omogućuje vam slanje zahtjeva vašim REST API-jima.