Differenze tra l'ID esplicito o implicito dell'account in una rotta REST

0

Considerare il seguente esempio (comune nelle applicazioni SaaS):

Questo è un SaaS che si occupa di Widget.

  • Hai un account, che ti autentichi tramite una chiave API. Ogni chiave API autentica solo un account.
  • Hai diversi widget sotto il tuo account. Un widget appartiene a un solo account e non può essere trasferito ad altri account.

La rappresentazione URL di un widget può essere:

  1. https://api.domain.com/v0/accounts/{accountId}/widgets/{widgetId}

  2. https://api.domain.com/v0/widgets/{widgetId}

La differenza è che la rotta 1 ha l'accountId esplicito e la rotta 2 la ha implicita (nell'autenticazione tramite la chiave API).

Esempi

In natura sembrano esserci esempi per entrambe le alternative:

Ad esempio, Twilio API rende esplicito l'accountId. Per effettuare una chiamata in uscita:

curl -X POST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXX/Calls.json \
--data-urlencode "Url=http://demo.twilio.com/docs/voice.xml" \
--data-urlencode "From=+15010000000" \
--data-urlencode "To=+12300000000" \
-u ACXXXXXXXXXXXXXXXXXXX:your_auth_token

e API stripe ha l'accountId implicito. Ad esempio, per ritirare il saldo:

curl https://api.stripe.com/v1/balance \
   -u sk_test_BQokikJOvBiI2HlWgH4olfQ2:

Quali sono i compromessi con entrambe le alternative (esplicite e implicite)?

    
posta Victor 20.05.2018 - 18:43
fonte

1 risposta

1

Un vantaggio che posso vedere nell'uso del caso 1 ( https://api.domain.com/v0/accounts/{accountId}/widgets/{widgetId} ) è che l'URL corrisponde a una particolare risorsa, mentre questo non è vero nel caso 2. L'URL del caso 1 specifica un particolare widget tramite il suo widgetId e l'account con id accountId a cui è associato. Al contrario, non è possibile determinare il particolare widget dall'URL del caso 2 poiché non include l'ID dell'account. Da questo argomento il caso 1 è più 'RESTful'.

Una domanda simile che discute alcuni ulteriori compromessi è qui:

Progettazione API REST: POST (implicito userId) vs PUT (userId esplicito)

    
risposta data 29.05.2018 - 14:47
fonte

Leggi altre domande sui tag