>> To say the truth, I'd even prohibit use of DELETE to actually delete >> smth. Deletion is way dangerous operation. Especially when cascading >> is on. >> > > While I agree that deletion is a dangerous operation, how dangerous > depending on the data being deleted, I disagree on prohibiting it. In > fact, I believe it is saner to use that verb over POST or gods forbid -- > GET (which is, unfortunately, not uncommon)! > > Why? Because it is a distinct verb. No doubt about its purpose. The > alternative is to pass a flag through POST which can lead to sloppy > design especially if POST accepts also creation and/or alteration of > data. Complex controller code only increases probability of mistake. I > don't even want to begin a rant on delete via GET. >
I don't mind the verb. The statement was "I'd forbid to delete anything. Better is to just lay the object aside". > You mention cascading. I assume foreign key cascading in the db? One of > the mistakes when doing REST is to consider the transactions in the > scope or sense of a database transaction. When one operation (paying a bill, say, PUT <>(amount=1)) depend on another (counting the saldo, GET <>/saldo), the whole scheme becomes rather synchronous -- thus transactions -- and they heavily resemble database's ones. > They are not the same. Definitely. Databases are optional. > However, delete should not be dangerous if you know what you're doing. > Mapping the action to the DELETE verb only facilitates the attention: > there's no doubt about what the action should do, so you proceed with > safeguards. You don't do IFs and IFNOts, checking extra flags to see > what the action might additionally mean (unless it is to represent a > condition of delete, but nothing else). > > Additionally, having a "deletion resource" or queue, or marking subject > for deletion before actual deletion is something that can be perfectly > handled by stored procedures and table/row triggers: no soup for you if > the flag/deletion resource is missing! That way you can't even > "accidentally" go to the SQL prompt and to DELETE whatever FROM > wherever, because the trigger would prevent deletion without proper > flag/resource set. Gods forbid that you forget a where clause. :) > Right. But real applications rarely do delete something. Besides, the real world doesn't cascade. -- Vladimir -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pylons-discuss?hl=en.
