HATEOAS-principper for REST
Forstå og anvend Hypermedia as the Engine of Application State (HATEOAS) i Deres REST-API'er.
HATEOAS-principper for REST er en gratis Spring Boot 4-mikrotjenester og REST-API'er-lektion på CoddyKit. Dette er lektion 3 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Spring Boot 4-mikrotjenester og REST-API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 3 lektioner i alt.
HATEOAS forklaret
HATEOAS står for Hypermedier som motoren i applikationstilstanden. Det er en central begrænsning i RESTful-arkitekturen, som foreslår, at et API bør guide klienter gennem tilgængelige handlinger ved hjælp af hypermedielinks.
Tænk på det som et websted: Du navigerer ved at klikke på links, ikke ved at indtaste URL'er fra hukommelsen. HATEOAS bringer den samme idé til API'er.
Fordele ved HATEOAS
HATEOAS gør dit API mere opdageligt og nemmere at videreudvikle. I stedet for at hardkode URL'er opdager klienter de tilgængelige handlinger direkte i API-svarene.
- Klientuafhængighed: Klienter behøver ikke på forhånd at kende URL-strukturerne.
- Udvikling af API'et: Du kan ændre URL-stier uden at ødelægge klienterne, så længe navnene på linkrelationerne ("rel") forbliver ens.
- Selvdokumentation: Svarene beskriver i sig selv, hvilke handlinger der kan udføres som det næste.
Hypermedier som tilstandsmotor
»Motoren i applikationstilstanden« betyder, at klienten skifter mellem applikationstilstande (f.eks. fra at se en bruger til at se brugerens ordrer) ved at vælge links i hypermediesvaret.
API-svaret returnerer ikke kun data; det returnerer data PLUS instruktioner (links) om, hvad du kan gøre med dataene, eller hvor du kan gå hen som det næste.
Introduktion til Spring HATEOAS
Det kan være omstændeligt at implementere HATEOAS manuelt. Heldigvis leverer Spring Boot biblioteket Spring HATEOAS, som gør det enklere at tilføje links til dine REST-ressourcer.
Det tilbyder klasser som EntityModel, CollectionModel og WebMvcLinkBuilder, så det bliver intuitivt og robust at oprette links.
Dit første selvlink
Lad os begynde med at tilføje et »self«-link til en enkelt brugerressource. Dette link peger tilbage på selve ressourcen, så klienter nemt kan hente dens aktuelle tilstand.
Vi bruger EntityModel til at indpakke vores data og WebMvcLinkBuilder til at konstruere linket.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@SpringBootApplication
public class SelfLinkApp {
public static void main(String[] args) {
SpringApplication.run(SelfLinkApp.class, args);
}
}
class User {
private Long id;
private String name;
public User(Long id, String name) {
this.id = id; this.name = name;
}
public Long getId() { return id; }
public String getName() { return name; }
public void setId(Long id) { this.id = id; }
public void setName(String name) { this.name = name; }
}
@RestController
class UserController {
@GetMapping("/users/{id}")
public EntityModel<User> getUser(@PathVariable Long id) {
User user = new User(id, "Alice"); // Dummy user
EntityModel<User> resource = EntityModel.of(user);
// Add a "self" link
resource.add(linkTo(methodOn(this.getClass()).getUser(id))
.withSelfRel());
return resource;
}
}`EntityModel` og `Link` – grundig gennemgang
Når du bruger Spring HATEOAS, returnerer dine API-svar typisk objekter som EntityModel eller CollectionModel.
EntityModel<T>: En indpakning af et enkelt domæneobjekt (som voresUser), der gør det muligt at tilføje links til det.Link: Repræsenterer et hyperlink, der indeholder en URI og et relationsnavn (f.eks. »self«, »orders«).
Klienten fortolker derefter disse links for at navigere i API'et.
Link til relaterede ressourcer
Ud over »self«-links kan du tilføje links til relaterede ressourcer. En brugerressource kan for eksempel indeholde et link til brugerens ordrer.
Vi bruger withRel("relationName") til at definere relationen mellem den aktuelle ressource og den linkede ressource.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@SpringBootApplication
public class RelatedLinkApp {
public static void main(String[] args) {
SpringApplication.run(RelatedLinkApp.class, args);
}
}
class User { // Re-using User class
private Long id; private String name;
public User(Long id, String name) {
this.id = id; this.name = name;
}
public Long getId() { return id; }
public String getName() { return name; }
public void setId(Long id) { this.id = id; }
public void setName(String name) { this.name = name; }
}
@RestController
class UserController {
@GetMapping("/users/{id}")
public EntityModel<User> getUser(@PathVariable Long id) {
User user = new User(id, "Bob");
EntityModel<User> resource = EntityModel.of(user);
resource.add(linkTo(methodOn(this.getClass()).getUser(id))
.withSelfRel());
// Add link to user's orders
resource.add(linkTo(methodOn(this.getClass()).getUserOrders(id))
.withRel("orders")); // Define relation
return resource;
}
@GetMapping("/users/{id}/orders")
public String getUserOrders(@PathVariable Long id) {
return "Orders for user " + id; // Dummy endpoint
}
}`WebMvcLinkBuilder`-magi
WebMvcLinkBuilder er afgørende for HATEOAS i Spring. Den gør det muligt at oprette links ved direkte at referere til dine controller-metoder i stedet for at hardkode URL-strenge.
Det gør dine links typesikre og opdaterer dem automatisk, hvis du omstrukturerer stien eller metodenavnene i din controller, så dit API bliver mere robust.
HATEOAS for samlinger
Når du returnerer en liste over elementer, bør du bruge CollectionModel. Hvert element i samlingen kan have sit eget selvlink, og selve samlingen kan have et selvlink (f.eks. til listeslutpunktet).
Det gør det muligt for klienter at navigere til individuelle elementer fra en liste eller at genindlæse hele samlingen.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Arrays;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@SpringBootApplication
public class CollectionHateoasApp {
public static void main(String[] args) {
SpringApplication.run(CollectionHateoasApp.class, args);
}
}
class User { // Re-using User class
private Long id; private String name;
public User(Long id, String name) {
this.id = id; this.name = name;
}
public Long getId() { return id; }
public String getName() { return name; }
public void setId(Long id) { this.id = id; }
public void setName(String name) { this.name = name; }
}
@RestController
class UserController {
private List<User> users = Arrays.asList(
new User(1L, "Charlie"),
new User(2L, "David")
);
@GetMapping("/users")
public CollectionModel<EntityModel<User>> getAllUsers() {
List<EntityModel<User>> userResources = users.stream()
.map(user -> EntityModel.of(user,
linkTo(methodOn(this.getClass()).getUser(user.getId()))
.withSelfRel()))
.collect(Collectors.toList());
return CollectionModel.of(userResources,
linkTo(methodOn(this.getClass()).getAllUsers())
.withSelfRel()); // Link for the collection
}
// Need a getUser method for the link builder to reference
@GetMapping("/users/{id}")
public EntityModel<User> getUser(@PathVariable Long id) {
return EntityModel.of(new User(id, "Dummy"),
linkTo(methodOn(this.getClass()).getUser(id)).withSelfRel());
}
}Hurtigt tjek af HATEOAS
Hvilke af følgende er vigtige fordele ved at anvende HATEOAS-principper i et REST-API?
Opsummering af HATEOAS og det næste
Godt gået! Du har lært om HATEOAS, og hvordan det gør REST-API'er mere opdagelige og nemmere at videreudvikle ved at indlejre hypermedielinks i svarene.
- HATEOAS: Hypermedier som motoren i applikationstilstanden.
- Spring HATEOAS: Leverer værktøjer som
EntityModel,CollectionModelogWebMvcLinkBuilder. - Links: Guider klienter gennem interaktioner med API'et og mindsker behovet for hardkodning.
Ved at anvende HATEOAS opretter du ægte RESTful-API'er, som er mere robuste og nemmere for klienter at bruge over tid.
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 24
- Lektioner
- 93
Ofte stillede spørgsmål
Er lektionen “HATEOAS-principper for REST” gratis?
Ja — hele teksten til “HATEOAS-principper for REST” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Spring Boot 4-mikrotjenester og REST-API'er-kurset, skal du opgradere til CoddyKit PRO. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 3 lektioner i alt.
Hvad lærer jeg i “HATEOAS-principper for REST”?
Forstå og anvend Hypermedia as the Engine of Application State (HATEOAS) i Deres REST-API'er. Du øver dig i Spring Boot 4-mikrotjenester og REST-API'er med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Spring Boot 4-mikrotjenester og REST-API'er?
Der kræves ingen tidligere erfaring. Spring Boot 4-mikrotjenester og REST-API'er på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 3.
Hvor lang tid tager lektionen “HATEOAS-principper for REST”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Spring Boot 4-mikrotjenester og REST-API'er-lektion?
Ja. Alle Spring Boot 4-mikrotjenester og REST-API'er-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Validering af requests og responses
- Paginering og sortering
- HATEOAS-principper for REST