我想在.NET4.6 Web API 2 項(xiàng)目中使用Patch更新一個(gè)大對象中的某個(gè)字?jǐn)?,這才意識到我以前都沒有用過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”。看起來只要照做就行了,但是我想知道為什么他一定要為此寫個(gè)解決方案。毫無疑問地,在Web API中Patch是一個(gè)非常常見的需求,難道.NET就沒有一個(gè)原生的方式實(shí)現(xiàn)它嗎?也許Michael也不知道。

經(jīng)過一番探索之后,在幾乎所有的論壇和博客中都無外乎如下三種方法,卻沒有一個(gè)是我喜歡的。

1. 為每個(gè)屬性寫一個(gè)api

有人建議為每個(gè)修改寫個(gè)方法,例如設(shè)置“Book.Name”,設(shè)置“Book.PageCount”等等。毫無疑問地,這種方式實(shí)現(xiàn)起來非?;〞r(shí)間,并且也不好維護(hù),特別是當(dāng)對象中有很多屬性或者有很多對象的時(shí)候,簡直就是天坑:(。

2. 使用ODATA

很多人建議在項(xiàng)目中包含.NET ODATA類庫,只用它的Delta類來實(shí)現(xiàn)Patch請求。這看起來有點(diǎn)怪怪的。ODATA和簡潔的JSON API比起來是一個(gè)完全不同的大家伙。我趕腳ODATA有點(diǎn)笨重,不直觀,不優(yōu)雅。

網(wǎng)友評論