Quale dovrebbe essere l'API REST (URL) per un utente da assegnare a più territori

-1

Nella nostra applicazione abbiamo un utente che può essere assegnato a più territori. Qual è il modo migliore per esporre l'API REST?

Dovrebbe essere come:

[POST] www.xyz.com/Territory/User

o

[POST] www.xyz.com/User/Territory

BODY:

{    "UserId": 6,   "TerritoryId": [1,2,5] }

Sto progettando questa applicazione utilizzando .net WEB API 2, quindi l'azione sopra descritta deve essere inserita nel controller utente o nel controller Territory o devo creare UserTerritory come nuovo controller? Qualsiasi aiuto è molto apprezzato.

    
posta user3151766 20.06.2018 - 16:23
fonte

2 risposte

1

REST non si cura di quale ortografia usi per i tuoi identificatori.

 GET /715f9784-4b51-461a-b3ee-fdf2823c25cb

va perfettamente bene, per quanto riguarda REST.

 www.xyz.com/Territory/User
 www.xyz.com/User/Territory

L'unica vera differenza tra questi due, vista dal cliente, è il modo in cui riferimenti relativi lavoro. Dove saranno utili i segmenti di punti?

www.xyz.com/Territory/User + ../Foo = www.xyz.com/Territory/Foo
www.xyz.com/User/Territory + ../Foo = www.xyz.com/User/Foo

Se sei più interessato ad altre cose su Territory , metterlo alla radice rende più facile raggiungere altre risorse a partire da quella radice; se sei più interessato ad altre risorse su User , allora questo appartiene in cima.

Le buone notizie: HTTP ha semantica standard sul posto se la ottieni "sbagliata"

GET /Territory/User/...

307 Temporary Redirect
Location: /User/Territory/...
    
risposta data 20.06.2018 - 17:31
fonte
-2

Poiché stai usando saggiamente POST, non hai alcun parametro nell'URL

Quindi, puoi usare uno o entrambi o semplicemente

www.xyz.com/User/AddUser
{ "UserId" : 6, "TerritoryId" : [1,2,5] }

Se stai ottenendo gli utenti ti aspetteresti

/Territory/{territoryId}/Users

Per restituire solo gli utenti nel territorio selezionato

Mentre il controller Users verrebbe utilizzato per query più generiche, forse richiedendo un POST

POST /User/GetUserByTerritoryIds  
{[1,2,3,4....]}
    
risposta data 20.06.2018 - 16:53
fonte

Leggi altre domande sui tag