Med MVC Frameworket, arbejder man med at opbygge en internetapplikation, i stedet for et internetsite. Man tolker Url'er som ressourcer i stedet for sider, og http metoderne har pludselig fået en anden og mere klar betydning. Når man designer sin MVC applikation, og dermed sine Url mønstre (Route), er man nu tvunget til at tænke i funktionalitet. Tag f.eks.:
/Shop/Categories/List
Her er man slet ikke tvivl om at man kan forvente en listning af sine produkt-kategorier vel? Hvad så med:
/Shop/Categories/2
Ja umiddelbart, så kunne man forvente at kategorien med id=2 vises, men det kommer vel lidt an på med hvilken metode vi kalder Url'en. Hvad nu hvis metoden er: DELETE? Så burde ovenstående Url vel slette hele kategorien med id=2 ikke?
Vi rører ved noget centralt i REST aspektet i MVC frameworket. De fleste tænker nok kun på metoderne GET og POST, som man har brugt i lang tid ved form-baseret webudvikling, men de er jo dybest set ikke helt nok. Jeg mener man i sit MVC API design, bør tage højde for følgende designlinjer.
GET
Må kun bruges ved 'ufarlige' kald til ressourcer. Altså kald hvor der ikke forventes andet end at der returneres data. Et kald som f.eks.:
/Shop /Products/2?action=delete
vil i følge min terminologi være 'farlig'.
POST
Skal bruges, når man ønsker at poste data til sin ressource. Det kan typisk være kald der resulterer i en opdatering af data.
DELETE
Skal bruges når man ønsker at slette ressourcer.
PUT
Skal bruges når man ønsker at oprette nye ressourcer. Man kan selvfølgelig argumentere for at man også kan bruge POST til oprettelse, da termen jo kan ændre betydning ud fra hvilken ressource man beskuer metoden fra. Ændre man, eller tilføjer man til en liste, når der introduceres et nyt emne?
DELETE og PUT metoderne, har været en del af http definitionen, siden den første gang blev introduceret, men det er ikke mange gange jeg har været stødt ind i dem i mit virke som udvikler. Det ændre dog ikke ved, at jeg mener de har deres absolutte berettigelse i forbindelse med MVC frameworks, og jeg tror at de vil blive involveret i kommende versioner af produktet.
Efterfølgende, opstår selvfølgelig spørgsmålet:
Nu hvor Html-form elementet kun understøtter GET og POST, hvordan får man så klienten (IE og FF) til at requeste med DELETE eller PUT metoden?
Ja, ind til videre, så er det ganske rigtigt kun de to første og mest udbredte metoder der understøttes af formen, men så har vi heldigvis XmlHttpRequest objektet til at foretage vores AJAX kald med. Den understøtter alle metoder. Jeg har netop afsluttet en række forsøg med min applikation, og det virkede i både IE og FF.
[code=JavaScript] $.ajax({
type: "DELETE",
url: "TestRest.aspx",
dataType: "html",
success: function(msg){alert(msg)}
}); [/code]
(Mit AJAX bibliotek er jQuery)
Thats it'n that's that