plantuml
@startuml
!theme plain
skinparam BoxPadding 20
skinparam ParticipantPadding 20
participant "API\nClient" as client
participant "API\nServer" as api
client -> api: GET /api/v1/products?page=1
api --> client: 200 OK\nLink: </api/v1/products?page=2>; rel="next",\n </api/v1/products?page=1>; rel="first",\n </api/v1/products?page=10>; rel="last"\n[Products Page 1]
client -> client: Parse Link-Header\nExtract rel="next"
client -> api: GET /api/v1/products?page=2\n(from Link-Header)
api --> client: 200 OK\nLink: </api/v1/products?page=1>; rel="prev",\n </api/v1/products?page=3>; rel="next",\n </api/v1/products?page=10>; rel="last"\n[Products Page 2]
client -> client: Parse Link-Header\nExtract rel="next"
client -> api: GET /api/v1/products?page=3\n(from Link-Header)
api --> client: 200 OK\nLink: </api/v1/products?page=2>; rel="prev",\n </api/v1/products?page=4>; rel="next",\n </api/v1/products?page=10>; rel="last"\n[Products Page 3]
note over client: Client navigiert\ndurch Pagination\nOHNE URL-Konstruktion
client -> api: GET /api/v1/products?page=10\n(rel="last" from Link-Header)
api --> client: 200 OK\nLink: </api/v1/products?page=9>; rel="prev",\n </api/v1/products?page=1>; rel="first"\n[Products Page 10 - Last]
note over client: HATEOAS-Prinzip:\nServer kontrolliert\nNavigation-URLs
@enduml