Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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"]]
    }]

}

 

Update Bezeichnung von auf Land mit der ID 1
Body in JSON:
{
        "Bezeichnung": "neue Bezeichnung"
}
Antwort: wie beim GET

Einfügen neues Land

POST auf http://rest.i-ag.ch/Land

Body in JSON:
{
        "Bezeichnung": "Landes-Bezeichnung"
}
Antwort: wie beim GET
Löschen von Land mit der ID 10

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.

...

Url: http://localhost:8084/rest2/ArtikelMethods/method/GetArtPriceSell?ArticleID=8&CustomerID=0&Quantity=1&Date=2015-07-01&ArticleID=3&CustomerID=0&Quantity=1&Date=2015-07-01

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",
            ...
            ...    

...