[REST] Razlika med PUT in PATCH?
 
thai 3. jul 2015 09:13:41 Pridružen od:
14. dec 2014
81 objav
32 31 2
#1

Pri Laravel lahko za update izberem metodo PUT ali PATCH in mi ni jasno, v čem je razlika? Načeloma uporabljam PATCH ampak če za metodo izberem PUT, update-anje še vedno deluje brez težav in mi ni jasno v čem je sploh razlika?


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
spicey 3. jul 2015 09:41:51 Pridružen od:
2. avg 2007
70 objav
87 3 3
#2

When should we use the PATCH HTTP method?



The HTTP methods PATCH can be used to update partial resources. For instance, when you only need to update one field of the resource, PUTting a complete resource representation might be cumbersome and utilizes more bandwidth






Malo si preberi o REST-u, pa boš bolje razumel. (ker mi, glede na tvoje vprašanje, deluje, da gledaš ti na to s stališča PHP-ja oz Laravela, ne pa HTTP metode)


všeč(1) ni všeč(0) spam(0)
 
Vini 3. jul 2015 09:44:57 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#3

Glavna razlika je v tem, da je PUT namenjen zamenjavi celotnega resourca, PATCH pa se uporablja za modifikacijo obstoječega. Če v obeh primerih podaš vse lastnosti resourca, potem razlike efektivno res ni. Je pa vprašanje, če Laravel res upošteva tole ali ne, ga ne poznam. Poskusi narediti PUT s kakšnim manjkajočim propertyjem resourca, načeloma bi ti moral manjkajočega v resourcu izpraznit.


všeč(1) ni všeč(0) spam(0)
 
bostjan 3. jul 2015 09:51:29 Pridružen od:
31. jul 2008
643 objav
689 30 9
#4

Ni lih fora Laravela (ali katerega koli frameworka). Fora je kako imaš ti narejeno v kodi. Drugače pa ti je Vini napisal glavno razliko.


všeč(1) ni všeč(0) spam(0)
 
thai 3. jul 2015 10:45:30 Pridružen od:
14. dec 2014
81 objav
32 31 2
#5

spicey:




When should we use the PATCH HTTP method?



The HTTP methods PATCH can be used to update partial resources. For instance, when you only need to update one field of the resource, PUTting a complete resource representation might be cumbersome and utilizes more bandwidth






Malo si preberi o REST-u, pa boš bolje razumel. (ker mi, glede na tvoje vprašanje, deluje, da gledaš ti na to s stališča PHP-ja oz Laravela, ne pa HTTP metode)




Ne gledam iz stališča Laravela. Mi je jasno, da gre tu za HTTP request v originalu s POST metodo ter hidden input z metodo PUT, PATCH (pač za spremembo resource) in da lahko tak način implemnentiraš vsepovsod... Laravel sem omenil, ker me zanima, kako je rešeno tukaj + smisel dveh metod.




Vini:

Glavna razlika je v tem, da je PUT namenjen zamenjavi celotnega resourca, PATCH pa se uporablja za modifikacijo obstoječega. Če v obeh primerih podaš vse lastnosti resourca, potem razlike efektivno res ni. Je pa vprašanje, če Laravel res upošteva tole ali ne, ga ne poznam. Poskusi narediti PUT s kakšnim manjkajočim propertyjem resourca, načeloma bi ti moral manjkajočega v resourcu izpraznit.




Približno tako sem si tudi sam vse skupaj razlagal in sem že prej naredil test tako, da en input ni bil določen (file) in pri PUT bi mi verjetno moralo potem to polje v bazi "izprazniti" ampak mi ga ne in ostane nespremenjeno.



Recimo, da imam (dumpal sem request, enkrat za PATCH, drugič za PUT)...



Pa recimo, da sem spremenil samo vrednost "name".



V 1. primeru (PATCH) mi potem updata samo polje "name"?



V 2. primeru (PUT) pa bi mi moralo v bazi updatat name, url (+polje img, ki ga nisem spreminjal - v inputu nisem dodal nove slike zato te vrednosti v requestu ni - ampak mi ga ne, polje img v bazi ostane nespremenjeno)?



Sicer pa ne vidim potem nekega velikega smisla v PUT metodi, če pa lahko vedno uporabim PATCH in je to to? Ali v katerem primeru bi potem sploh prišla prav PUT metoda?



(* da ne bo kdo zmeden zakaj je v polju zapisano 6, dve vrednosti sem z grafičnim programom odstranil :D jasno, med njimi ni bilo img, ker je polje ne vsebuje, ker ni določena)


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
bostjan 3. jul 2015 11:31:51 Pridružen od:
31. jul 2008
643 objav
689 30 9
#6

Točno to kar ti je spicey napisal si zamešal. PUT in PATCH nista noben POST, ampak PUT IN PATCH. POST se naredi samo zato ker brskalniki ne podpirajo patch in put in se potem s hidden elementom naredi fake metoda.



Kako ti pa potem zadeve v ozadju dela......to je pa stvar tebe. Načeloma ti lahko podatke urejaš na get in na put brišeš. Lahko nove kreiraš z DELETE, ..... To je stvar programerja ki ureja.

Se pravi kako narediš put in patch je tvoja stvar. Razliko kako NAJ BI bilo ti je pa vini napisal.


všeč(0) ni všeč(0) spam(0)
 
thai 3. jul 2015 12:17:11 Pridružen od:
14. dec 2014
81 objav
32 31 2
#7

bostjan:

Točno to kar ti je spicey napisal si zamešal. PUT in PATCH nista noben POST, ampak PUT IN PATCH. POST se naredi samo zato ker brskalniki ne podpirajo patch in put in se potem s hidden elementom naredi fake metoda.



Kako ti pa potem zadeve v ozadju dela......to je pa stvar tebe. Načeloma ti lahko podatke urejaš na get in na put brišeš. Lahko nove kreiraš z DELETE, ..... To je stvar programerja ki ureja.

Se pravi kako narediš put in patch je tvoja stvar. Razliko kako NAJ BI bilo ti je pa vini napisal.




Ja saj to sem zgoraj napisal kot odgovor spicey ;) Metodo PUT/PATCH/DELETE pač "fejkamo" preko POST s hidden input, ker teh metod brskalnik ne pozna potem pa preko vrednosti za _metod (vidimo za katero "fake" metodo gre) naredimo kar želimo (generiramo SQL za UPDATE, DELETE... ). To je meni jasno. Malo sem bil v dvomim kakšna je točno razlika med PUT in PATCH, to je vini v principu pojasnil AMPAK očitno se tega pri Laravel ne držijo (me čisto informativno zamina)?



Sem zdajle dumpal query v primeru za PUT in v primeru za PATCH. V obeh primeri se v Laravel generira enak query... Recimo, če spremenim ime (input name, ostali inputi ostanejo enaki)...



pri PATCH...



string'update categories set name = ?, updated_at = ? where id = ?' (length=67)



pri PUT se generira query



string'update categories set name = ?, updated_at = ? where id = ?' (length=67)



Query-a sta identična torej je pri Laravel čisto vseeno ali uporabiš PUT ali PATCH, ker se očitno ne držijo tega, kar je zapisal Vini?


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
blackmamba 3. jul 2015 12:33:37 Pridružen od:
4. mar 2008
559 objav
392 25 11
#8

Ja, query je isti, v praksi lahko lahko isti query uporabiš tudi v POST-u ali DELETE, ampak tega ne počni.



Te metode so nekako "standardizirane", da bi tisti, ki na novo implementirajo api lažje in hitreje dojeli kaj katera metoda/klic naredi. Jaz razumem to samo kot organizacijsko vrednost.


všeč(1) ni všeč(0) spam(0)
 
thai 3. jul 2015 13:06:42 Pridružen od:
14. dec 2014
81 objav
32 31 2
#9

Še ena opazka glede PATCH...




Just as a side note, PATCH is not yet a standard. I've encountered an issue where one customer's firewall/proxy/cache/whatever is turning our front end's PATCH into METHOD_OTHER (this is according to Bugsnag) before it reaches our API, which Laravel then cannot route.



Unless you know for certain, PUT is safer, and it might be best to put a header/flag in the request to say that a partial update. It's not ideal, but hopefully things will improve soon!




Očitno bom raje uporabljal kar PUT...



Tisti, ki programirate v Laravel, katero metodo uporabljate za update? PUT ali PATCH, me čisto informativno zanima.


všeč(0) ni všeč(0) spam(0)
*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se