plantuml
@startuml
!theme plain
skinparam BoxPadding 20
skinparam ParticipantPadding 20
participant "API\nClient" as client
participant "API\nServer" as api
database "Database" as db
client -> api: POST /api/v1/orders\nContent-Type: application/json\n{\n "productId": "prod_789",\n "quantity": 2\n}
api -> db: INSERT INTO orders\n(product_id, quantity, status)\nVALUES ('prod_789', 2, 'pending')\nRETURNING id
db --> api: Order created\nid: 12345
api -> api: Generate Location URI:\nhttps://api.example.com/api/v1/orders/12345
api --> client: 201 Created\nLocation: https://api.example.com/api/v1/orders/12345\nETag: "abc123"\n{\n "id": "12345",\n "status": "created"\n}
note over client: Client speichert\nLocation-URI für\nnachfolgende Operationen
client -> api: GET /api/v1/orders/12345\n(from Location-Header)
api -> db: SELECT * FROM orders\nWHERE id = 12345
db --> api: Order Data
api --> client: 200 OK\n{\n "id": "12345",\n "status": "pending",\n "productId": "prod_789"\n}
client -> api: PATCH /api/v1/orders/12345\n(from Location-Header)\n{\n "status": "confirmed"\n}
api -> db: UPDATE orders\nSET status = 'confirmed'\nWHERE id = 12345
db --> api: 1 row updated
api --> client: 200 OK\n{\n "id": "12345",\n "status": "confirmed"\n}
note over client: RESTful-Pattern:\nLocation-Header\nentkoppelt Client von\nURI-Konstruktion
@enduml