Wie beschreibe ich POST-Links in HAL?HATEOAS POST-Link in HAL
Ich bin ein RESTful API mit HATEOAS Constraints, ähnlich wie Wikipedia's HATEOAS example Gestaltung aber in HAL JSON (dropping das Schema, Host usw. aus Gründen der Klarheit) ausgedrückt:
GET /accounts/12345
{
"id" : 12345,
"balance" : 100.00
"_links" : {
"self" : {
"href" : "/accounts/12345"
},
"transfer" : {
"href" : "/accounts/12345/transfer{?amount,target}",
"templated" : true
}
}
}
den "Transfer" Aktion auszuführen der Kunde würde, vermutlich tun:
GET /accounts/12345/transfer?amount=100.00,target=54321
{
"id" : 34567,
"amount" : 100.00
"_links" : {
"self" : {
"href" : "/transfers/34567"
},
"source" : {
"href" : "/account/12345"
},
"target" : {
"href" : "/account/54321"
}
}
}
den "Transfer" Link per GET erstellt eine neue Ressource in "Transfers" Aufrufe. Aber ein GET zu tun, um eine neue Ressource zu erstellen, ist nicht idempotent und es fühlt sich falsch an; eine RESTful Ressource zentrierten API würde POST:
POST {amount: 10.00, source: 12345, target: 54321} /transfers/
{
"id" : 34567,
"amount" : 100.00
"_links" : {
"self" : {
"href" : "/transfers/34567"
},
"source" : {
"href" : "/account/12345"
},
"target" : {
"href" : "/account/54321"
}
}
}
Aber wie beschreibe ich dieses POST und die erforderlichen Formelemente in HAL so kann der Kunde die „Richtige“ ohne einfach nicht hart codiert? Vielleicht so etwas wie:
{
"id" : 12345,
"balance" : 100.00
"_links" : {
"self" : {
"href" : "/accounts/12345"
},
"transfer" : {
"href" : "/transfers{?amount,source,target}",
"templated" : true,
"method" : "POST"
}
}
}
Aber method
nicht Teil der HAL specification und es gibt keine analoge Kennung - so fühlt es sich wie ich auf dem Holzweg bin ...
Vielleicht sollte mein Kunde nur „wissen "Ein GET von transfer
gibt übereinstimmende Übertragungsressourcen zurück, und ein POST an transfer
erstellt eine neue Übertragungsressource.
FWIW, verwendet meine Implementierung Frühlings-Boot 2 mit Feder HATEOAS so die Folgefrage ist, wie dies mit Frühling HATEOAS ...