我想在.NET4.6 Web API 2 項(xiàng)目中使用Patch更新一個(gè)大對(duì)象中的某個(gè)字?jǐn)?,這才意識(shí)到我以前都沒(méi)有用過(guò)Patch。這是一次難得的學(xué)習(xí)機(jī)會(huì)。
我不知道在Web API 2中最好的實(shí)現(xiàn)方式是什么,所以我按照慣例,用google搜索"Patch Web API"。我得到的第一條結(jié)果是Michael McKenna’s “How to Add JSON Patch Support to Web API”??雌饋?lái)只要照做就行了,但是我想知道為什么他一定要為此寫個(gè)解決方案。毫無(wú)疑問(wèn)地,在Web API中Patch是一個(gè)非常常見(jiàn)的需求,難道.NET就沒(méi)有一個(gè)原生的方式實(shí)現(xiàn)它嗎?也許Michael也不知道。
經(jīng)過(guò)一番探索之后,在幾乎所有的論壇和博客中都無(wú)外乎如下三種方法,卻沒(méi)有一個(gè)是我喜歡的。
1. 為每個(gè)屬性寫一個(gè)api
有人建議為每個(gè)修改寫個(gè)方法,例如設(shè)置“Book.Name”,設(shè)置“Book.PageCount”等等。毫無(wú)疑問(wèn)地,這種方式實(shí)現(xiàn)起來(lái)非?;〞r(shí)間,并且也不好維護(hù),特別是當(dāng)對(duì)象中有很多屬性或者有很多對(duì)象的時(shí)候,簡(jiǎn)直就是天坑:(。
2. 使用ODATA
很多人建議在項(xiàng)目中包含.NET ODATA類庫(kù),只用它的Delta類來(lái)實(shí)現(xiàn)Patch請(qǐng)求。這看起來(lái)有點(diǎn)怪怪的。ODATA和簡(jiǎn)潔的JSON API比起來(lái)是一個(gè)完全不同的大家伙。我趕腳ODATA有點(diǎn)笨重,不直觀,不優(yōu)雅。