Rails 4 ha introdotto le richieste PATCH
come metodo di richiesta predefinito durante gli aggiornamenti parziali (comuni) sugli oggetti. Questo è conforme agli standard HTTP e una buona (più vecchio) posta a discutere questa decisione può essere trovato qui:È possibile disabilitare la rotta PUT standard in Rails 4?
http://weblog.rubyonrails.org/2012/2/25/edge-rails-patch-is-the-new-primary-http-method-for-updates/
Quando si definisce una risorsa in config/routes.rb
come
resources :books
quindi i seguenti itinerari sono creato per impostazione predefinita in rotaie 4:
GET /books books#index
GET /books/:id books#show
POST /books books#create
DELETE /books/:id books#destroy
PATCH /books/:id books#update
PUT /books/:id books#update
Come sto sviluppando una nuova applicazione e non devo mi interessa la retrocompatibilità, vorrei rimuovere il percorso obsoleto PUT
.
C'è un modo semplice per realizzare questo in config/routes.rb
?
spiegazione perché questo percorso PUT
mi dà fastidio: Sto usando il swagger-docs gem per la generazione automatica di documentazione per la mia spavalderia API. A causa del comportamento descritto, ho sempre due definizioni di endpoint per le richieste di aggiornamento (PUT
e PATCH
) per ogni risorsa. Inoltre, poiché si tratta di un percorso potenzialmente deprecating, vorrei che la mia API non la supportasse da oggi in poi.
UPDATE a causa delle prime risposte nella direzione sbagliata vorrei chiarire: io non voglio rimuovere l'azione 'update', ma solo il percorso PUT obsolete, mantenendo il percorso PATCH.
Grazie per la risposta. Usando except:: update rimuoverà sia route PUT che PATCH, che non è quello che voglio. Per quanto riguarda la tua spiegazione delle differenze: è corretto, ma il post del blog che ho collegato nella domanda spiega in modo decente, che in pratica non eseguiamo mai richieste PUT reali nelle nostre API. Raramente sostituisci interi oggetti (ad esempio created_at) e anche update-or-create non ha senso in molte API perché l'ID viene solitamente creato dal database, non dal consumer API, quindi devi creare tramite POST –
Capisco che ma tu hai per essere consapevole che: 1) Non tutti i server accettano patch come spiegato nel post del mio blog 2) In un'API l'azione di aggiornamento della richiesta non sa se l'entità aggiornata esiste, o si ha una sorta di: errore non trovato nell'entità . O ti ritroverai ad aggiornare qualcosa di inesistente. 3) Tutte le azioni PUT reindirizzeranno su una rotta inesistente. Modifica con un tipo di soluzione. – tebayoso
Vedo il punto in cui non tutti i server accettano PATCH, ma non svolge alcun ruolo per la mia applicazione. Non capisco il tuo secondo punto, però. ovviamente un'azione di aggiornamento verificherà se l'elemento referenziato esiste e genera un errore altrimenti. Qual è la differenza tra il comportamento atteso di PUT e PATCH qui? Il tuo terzo punto è positivo, perché: voglio che la mia API ** non ** definisca la rotta PUT, in modo che i consumatori non la implementino. Questo è quello per cui sono qui.Inoltre, il link sopra spiega che hanno mantenuto la rotta PUT solo per la compatibilità all'indietro. –