2016-06-20 26 views
0

Ich frage mich, ob die folgende Struktur von API-Links HATEOAS-kompatibel ist?Ist diese API-Struktur kompatibel mit HATEOAS?

Insbesondere bin ich mir nicht sicher/Endpunkt erstellen. Sollte es auf der Eingangsebene sein, weil der Benutzer eine Gruppe von dort erstellen kann oder ist es in Ordnung, sie in/groups zu setzen?

Was denken Sie über den Rest? Es sollte auch HAL-kompatibel sein.

/groups 
    /create 
    /detail/{groupId} 
    /update 
    /delete 
    /items 
    /search{?page,size,sort} 
+2

Warum setzen Sie Operationen ('create',' detail', 'update',' delete', 'search') in URIs? Das ist RPC, nicht REST. –

+1

Ich erkannte, es sollte nur POST/Gruppen - Gruppe PUT/detail/{groupID} zu aktualisieren Gruppe DELETE/detail/{groupID - Gruppe zu löschen –

+1

Ja, das wäre besser. –

Antwort

1

HATEOAS (siehe Richardson's Maturity Model level 3) dreht sich alles um Links, so mit HAL Browser dies wie folgt aussehen würde:

Root:

{ 
    "_links": { 
    "self": { 
     "href": "/api/root" 
    }, 
    "api:group-add": { 
     "href": "http://apiname:port/api/group" 
    }, 
    "api:group-search": { 
     "href": "http://apiname:port/api/group?pageNumber={pageNumber}&pageSize={pageSize}&sort={sort}" 
    }, 
    "api:group-by-id": { 
     "href": "http://apiname:port/api/group/id" (OR "href": "http://apiname:port/api/group?id={id}") 
    } 
    } 
} 

Das Add würde einfach ein POST, dass Endpunkt, und dann hätten Sie 2 GET-Methoden.

Dann, wenn Sie auf eine bestimmte Gruppe aufschlüsseln (sagen # 1):

{ 
    "Id" : 1, 
    "Name" : "test", 
    "_links": { 
    "self": { 
     "href": "/api/group/1" (OR "/api/group?id=1") 
    }, 
    "edit": { 
     "href": "http://apiname:port/api/group/1" 
    }, 
    "api:delete": { 
     "href": "http://apiname:port/api/group/1" 
    }, 
    "api:items-query": { 
     "href": "http://apiname:port/api/bonus?groupId=1" 
    } 
    } 
} 

Hier würde die Bearbeitung einfach ein PUT sein, und dann werden Sie eine DELETE benötigen (siehe Stufe 2 von REST in der gleichen Verbindung), wie für die Elemente, wissen Sie wahrscheinlich am besten, wenn sie nur eine Eigenschaft oder ein anderer Endpunkt sind; Sie könnten sie sogar einbetten, um in demselben Anruf zurückgegeben zu werden, der eine Gruppe abruft.