Modo RESTful di referenziare altre risorse nel corpo della richiesta

0

Supponiamo di avere una risorsa chiamata group con la seguente rappresentazione:

{
    "id": 1,
    "name": "Superheroes"
    "_links": {
        "self": {
            "href": "http://my.api.com/groups/1"
        }
    }
}

Ora diciamo che voglio creare una nuova istanza person di POST ing a /persons/1 . Quale dei seguenti dovrei usare per il corpo della richiesta:

Utilizzo dell'ID

{
    "name": "Batman",
    "groupId": 1
}

Uso del link

{
    "name": "Batman",
    "group": "http://my.api.com/groups/1"
}

Con il primo metodo accedo all'ID direttamente o per cercare la risorsa correlata o eventualmente memorizzare l'id nel database, quando mantengo l'istanza person . Ma con l'altro metodo, devo estrarre l'id dall'URI o, seguire il link per caricare la risorsa correlata, e quindi scoprire il suo id. Non voglio davvero archiviare l'URI nel database.

Con quest'ultima opzione, visto che il server controlla la struttura dell'URI, per me va bene analizzare l'id dal link? Seguire il link al server stesso sembra strano, visto che a questo punto abbiamo già accesso alle informazioni direttamente (abbiamo solo bisogno dell'ID).

Quindi, per riassumere, quale di queste opzioni è la migliore?

  • Utilizza l'id direttamente.
  • Utilizza il link, ma analizza l'ID.
  • Utilizza il link, ma accedi al link per ottenere l'istanza della risorsa, quindi ottieni l'id.
posta Vivin Paliath 27.01.2015 - 19:54
fonte

1 risposta

2

La risposta "giusta" dipende dalla tua situazione, ma non si collega mai.

POST
{
    "name": "Batman",
    "groupId": 1
}

va bene

POST
{
    "name": "Batman",
    "groupName": "my group"
}

Potrebbe essere utile per comodità.

L'utilizzo di un link è sbagliato, perché il link potrebbe cambiare in base a tonnellate di materiale (ad es. www.example.com/groups/1 o example.com/groups/1 o groups.example.com/groups/1-group -name-in-seo-friendly-format può tutti puntare alla stessa risorsa). Vuoi passare qualcosa che "mai" cambia. L'ID è una buona scelta, ma potrebbe essere conveniente lasciare passare un nome (per ridurre il numero complessivo di chiamate).

Normalmente direi che il cliente ottiene GET /groups.json e POST / utenti con l'id del gruppo.

    
risposta data 27.01.2015 - 20:15
fonte

Leggi altre domande sui tag