CRUD
Die CRUD-Operationen werden über folgende HTTP-Verben unterstützt:
...
- Jedes Objekt ist im Kontext der Klasse mit einer eindeutigen Id identifizierbar: rest.i-ag.ch/{Klasse}/{ID}.
- Beim Update (PUT) und Löschen (DELETE) ist die Syntax mit der ID zwingend.
- Beim Insert (POST) ist keine ID erlaubt, es kann jedoch kann ein Vater-Objekt angegeben werden, um Kind-Elemente anzufügen: rest.i-ag.ch/{Klasse}/{ID}/{Klasse}.
- Nutzdaten werden beim Insert (POST) und Update (PUT) im Body übergeben.
- Lesend (GET) kann die komplette Baumstruktur des Objektmodells verwendet werden: rest.i-ag.ch/{Klasse}/{ID}/{Kind-Klasse}/{ID}/…
Bsp. Mehrwertsteuerdetails zum Aufwandkonto der Adresse mit der Id 123: ./Adresse/123/KontoAufwand/MWSTToOne.
...
Beispiele
Lese Land 1
GET auf http://rest.i-ag.ch/Land/1 -> Lese Land 1
Antwort: 200 OK mit
{
"resource": [{
"type": "object",
"meta": {
"name": "Land",
"description": "",
"properties": [
{
"name": "ID",
"description": "",
"primary": true,
"required": true,
"type": "number"
},{
"name": "Bezeichnung",
"description": "Name",
"type": "string"
},{
"name": "Landadressierung",
"description": "Darstellung Land \/ PLZ \/ Ort",
"type": "string"
}]
},
"data": [[1,"Schweiz","CH"]]
}]
Einfügen neues Land
POST auf http://rest.i-ag.ch/Land
DELETE auf http://rest.i-ag.ch/Land/10
Antwort: 200 Ok ohne Body
Queries auf Klassen
Beim Lesen (GET-Operation) besteht die Möglichkeit, Daten über Filterparameter einzuschränken:
...
Die Struktur der Antwort ist identisch zu derjenigen der CRUD-Operationen. Einziger Unterschied ist, dass die "properties"-Sektion durch eine "parameters"-Sektion ersetzt ist.
Gemäss http-Standards wird für die sicheren Methoden ein GET-Aufruf verlangt, allfällige Parameter werden in der URL mitgegeben.
...
Antwort:
{
"resource": [{
"type": "object",
"meta": {
"name": "GetArtPriceSell",
"description": "",
"parameters": [{
"name": "Price",
"desciption": "",
"required": true,
"type": "number",
"cardinality": 1,
"direction": "out"
},
{
"name": "PriceType",
"desciption": "",
"required": true,
"type": "number",
"cardinality": 1,
"direction": "out"
}]
},
"data": [[4.9,40],[38,40]]
}]
}
...
Das Format der Metadaten wird analog zu den Nutzdaten von Client angefordert.
Beispiel JSON: Tabelle Adresse: rest.i-ag.ch/Adresse/model
{
"resource": [{
"meta": {
"name": "Adresse",
"description": "",
"type": "object",
"properties": [
{
"name": "ID",
"description": "",
"primary": true,
"required": true,
"type": "number"
},{
"name": "ABCEinteilung",
"description": "ABC-Einteilung",
"type": "number"
},{
"name": "AbladevorschriftID",
"description": "Abladevorschrift",
"type": "number",
"links": [
{
"name": "Abladevorschrift",
"resource": "Abladevorschrift",
"cardinality": 1
}]
},{
"name": "AdresseIDNachfolger",
...
...
...