I got to thinking: maybe it's better to have both POST and PUT methods in the API and then the client determines which one to call.
Is this usually how RESTful APIs handle this scenario?
Non proprio. Pensa a come implementeresti questo in un sito web. Qualcuno andrebbe alla home page, quindi seguirà un link a un modulo che consentirà loro di fornire i dati che vorrebbero utilizzare, quindi invieranno il modulo e riceveranno un messaggio in cui si comunicherà se l'invio è andato a buon fine.
La rappresentazione del modulo descriveva l'identificativo della risorsa a cui inviare la richiesta e il metodo da utilizzare (in un modulo HTML, che sarebbe sempre un POST, ovviamente).
Quindi puoi usare POST, o PUT, o alternare avanti e indietro, o fare quello che vuoi semplicemente alterando la rappresentazione del modulo.
Da una prospettiva REST, l'unica cosa importante è rispettare l'interfaccia uniforme; che in questo caso significa che la semantica dei tuoi messaggi è allineata con le specifiche HTTP.
REST in realtà non si cura del metodo che si usa, purché (a) lo si usi correttamente secondo l'interfaccia uniforme, e (b) il client scopra quale metodo utilizzare consumando l'ipermedia fornita dal server.
Semanticamente, un PUT dovrebbe essere un sostituto completo. RFC 7231 è lo standard pertinente.
The PUT method requests that the state of the target resource be created or replaced with the state defined by the representation enclosed in the request message payload
È un po 'strano che tu inserisca $date
ma non lo aggiorni. Non è sbagliato, ma è difficile capire dall'esempio se date
fa parte della "rappresentazione racchiusa nel payload del messaggio di richiesta". La semantica di PUT consente a clienti e intermediari di formulare determinate ipotesi sullo stato della risorsa aggiornata senza inviare un GET al server: è responsabilità del server assicurarsi che tali ipotesi siano valide.