Domanda

Quale di questi URI sarebbe più 'fit' per ricevere Post (aggiungendo prodotto (s))? Ci sono delle migliori pratiche disponibili o è solo preferenze personali?

/ prodotto / (singolare)

o

/ prodotti / (plural)

Al momento usiamo /products/?query=blah per la ricerca e per /product/{productId}/ GET PUT & elimina di un singolo prodotto.

È stato utile?

Soluzione

Dato che il POST è un'operazione "aggiungere", è potrebbe essere più Englishy nella quale inserire l'/products, come si sarebbe aggiunta di un nuovo prodotto alla lista esistente di prodotti.

Finché hai reso standard qualcosa all'interno della vostra API, penso che sia abbastanza buono.

Da REST API dovrebbe essere ipertesto-driven, l'URI è relativamente irrilevante comunque. I clienti dovrebbero essere tirando URI da documenti restituiti e l'utilizzo di quelle richieste successive; tipicamente le applicazioni e le persone non avranno bisogno di indovinare o interpretare visivamente URI, dal momento che l'applicazione sarà istruire esplicitamente clienti quali risorse e URI sono disponibili.

Altri suggerimenti

In genere si utilizza POST per creare una risorsa quando non si conosce l'identificatore della risorsa in anticipo, e mettere quando lo fai. Così si sarebbe post per / prodotti, o mettere a / prodotti / {new-id}.

Con entrambi questi tornerai 201 Creato, e con il POST tornare in aggiunta un'intestazione Location contenente l'URL della risorsa appena creata (ammesso che è stato creato con successo).

POST o GET una sola cosa:. Un unico prodotto

A volte si ottiene con nessun prodotto specifico (o con criteri di query). Ma ancora dire che al singolare.

È raramente funzionano forme plurali di nomi. Se si dispone di una collezione (un catalogo di prodotti), è uno Catalogo.

Nel design RESTful, ci sono alcuni modelli di tutto la creazione di nuove risorse. Il modello che si sceglie in gran parte dipende da chi è responsabile per la scelta del URL per la risorsa appena creata.

Se il cliente è responsabile della scelta l'URL, il client dovrebbe mettere l'URL per la risorsa. Al contrario, se il server è responsabile per l'URL per la risorsa allora il cliente dovrebbe registrare a una risorsa "fabbrica". In genere la risorsa di fabbrica è la risorsa principale della risorsa in fase di creazione e di solito è una collezione che è pluralizzato.

Quindi, nel tuo caso mi consiglia di utilizzare /products

Vorrei inviare solo al singolare /product. E 'troppo facile confondere i due URL-s e ottenere confuso o fare errori.

Come molti hanno detto, probabilmente si può scegliere qualsiasi stile che piace fino a quando si è coerenti, però vorrei sottolineare alcuni argomenti su entrambi i lati; Sono personalmente sbilanciata verso singolare

A favore di nomi di risorse plurali:

  • semplicità dello schema URL, si conosce il nome della risorsa è sempre al plurale
  • molti considerano questa convenzione simile a come database tabelle vengono affrontati e considerare questo un vantaggio
  • sembra essere più ampiamente adottato

A favore dei nomi delle risorse singolari (ciò non esclude plurali quando si lavora su più risorse)

  • lo schema URL è più complessa, ma si guadagna di più espressività
  • si sa sempre quando si tratta di una o più risorse in base al nome della risorsa, al contrario di verificare se la risorsa ha un id cercando parametro seguente percorso
  • plurale a volte è più difficile per i non madrelingua (quando non è semplicemente una "s")
  • l'URL è più lungo
  • la "s" sembra essere un ridondante dal punto di vista un programmatori
  • è solo difficile da prendere in considerazione il parametro percorso come un sub-risorsa della collezione in contrapposizione a considerarla per quello che è: semplicemente un ID della risorsa identifica

è possibile utilizzare lo stesso URL per tutti loro e utilizzare il MessageContext per determinare quale tipo di azione del chiamante del servizio web ha voluto eseguire. Nessuna lingua è stato specificato, ma in Java si può fare qualcosa di simile.

WebServiceContext ws_ctx;
MessageContext ctx = ws_ctx.getMessageContext();
String action = (String)ctx.get(MessageContext.HTTP_REQUEST_METHOD);
if(action.equals("GET")
  // do something
else if(action.equals("POST")
  // do something

In questo modo è possibile controllare il tipo di richiesta che è stato inviato al servizio Web ed eseguire l'azione appropriata in base al metodo di richiesta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top