ASP.NET Web API2框架揭秘(.NET領(lǐng)域再現(xiàn)力作頂級專家精講微軟全新輕量級通信平臺)
我們一直強(qiáng)調(diào)做網(wǎng)站、成都做網(wǎng)站對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)的建站公司不一定是大公司,創(chuàng)新互聯(lián)作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
蔣金楠 著
ISBN 978-7-121-23536-8
2014年7月出版
定價:108.00元
732頁
16開
編輯推薦
√這是一本注重實證的書,功能各異、多達(dá)120個可供下載的示例,大量最佳實踐與實用性擴(kuò)展,可直接用于解決實際開發(fā)問題。
√全新的學(xué)習(xí)方法,通過完整論證來實現(xiàn)徹底的融會貫通。
√本書可以作為講設(shè)計架構(gòu)的書來讀,因為其以經(jīng)過長期檢驗的經(jīng)典架構(gòu)作為學(xué)習(xí)素材,可很好地啟發(fā)深度思考。
√講原理的書同樣足夠?qū)嵱?。了解ASP.NET Web API框架的運行原理,才能寫出最迎合框架的高效程序,才能找到解決具體項目問題的最佳擴(kuò)展點。
√這是一本幫助你提升內(nèi)功的書。雖然編程模式可以速成,但本書還是希望你最好對ASP.NETWeb API或ASP.NET MVC有基本概念。
內(nèi)容提要
《ASP.NET Web API 2框架揭秘》以實例演示的方式介紹了很多與ASP.NET Web API 相關(guān)的最佳實踐,同時還提供了一系列實用性的擴(kuò)展。《ASP.NET Web API 2框架揭秘》詳細(xì)講解了ASP.NETWeb API 從接收請求到響應(yīng)回復(fù)的整個流程,包括路由、HttpController 的激活、Action 方法的選擇與執(zhí)行、參數(shù)的綁定與驗證、過濾器的執(zhí)行和安全等相關(guān)的機(jī)制。
除此之外,《ASP.NET Web API 2框架揭秘》在很多章節(jié)還從設(shè)計的角度對ASP.NET Web API 的架構(gòu)進(jìn)行了深入分析,所以可以將《ASP.NET Web API 2框架揭秘》當(dāng)作一本架構(gòu)設(shè)計的書來讀。
雖然與市面上任何一本相關(guān)的書相比,《ASP.NET Web API 2框架揭秘》走得更遠(yuǎn)并更加近距離地觸及到ASP.NET Web API 框架的內(nèi)核,但是就其內(nèi)容本身來講卻沒有涉及太多“高深莫測”的知識點,所以閱讀《ASP.NET Web API 2框架揭秘》不存在太高的門檻。如果你覺得自己對ASP.NET Web API 所知甚少,可以利用《ASP.NETWeb API 2框架揭秘》來系統(tǒng)地學(xué)習(xí)ASP.NET WebAPI;如果你覺得自己對ASP.NET Web API 足夠精通,也一定能夠通過閱讀《ASP.NET Web API 2框架揭秘》發(fā)現(xiàn)自己知識的“盲點”。
目錄
第1 章 概述.....................1
1.1何為Web.............................2
1.1.1 TCP/IP與HTTP..................2
1.1.2 Web資源...................................4
1.1.3 HTTP事務(wù)................................6
1.1.4 HTTP報文..........................7
1.2 RESTful WebAPI..................................8
1.2.1為什么叫這個奇怪的名字..................9
1.2.2 RESTful WebAPI具有怎樣的特征.......................10
1.3初識ASP.NET WebAPI...............................18
1.3.1構(gòu)建解決方案.......................18
1.3.2定義WebAPI........................20
1.3.3以Web Host 方式寄宿Web API ..................21
1.3.4以Self Host 方式寄宿Web API..........................27
1.3.5利用HttpClient 調(diào)用Web API ..........................28
1.3.6創(chuàng)建一個“聯(lián)系人管理器”應(yīng)用......................31
第2 章 路由...............................41
2.1 ASP.NET路由...............................42
2.1.1請求URL 與物理文件的分離....................42
2.1.2實例演示:通過URL 路由實現(xiàn)請求地址與Web 頁面的映射...........43
2.1.3 ASP.NET路由系統(tǒng)..................................47
2.1.4注冊路由映射...............55
2.1.5根據(jù)路由規(guī)則生成URL..............................68
2.1.6 HttpHandler的動態(tài)映射............................70
2.2 ASP.NET Web API路由.................................73
2.2.1請求與響應(yīng).....................73
2.2.2 ASP.NET WebAPI路由系統(tǒng)..................77
2.2.3注冊路由映射.................91
2.3兩個路由系統(tǒng)的銜接.........................94
2.3.1HostedHttpRoute與HostedHttpRouteCollection ............94
2.3.2HttpControllerRouteHandler與HttpControllerHandler ............. 100
第3 章 消息處理管道................ 103
3.1HttpMessageHandler管道........................ 104
3.1.1HttpMessageHandler ....................................... 104
3.1.2DelegatingHandler ......................................... 106
3.1.3 HttpServer.................................................. 107
3.1.4HttpRoutingDispatcher........................................114
3.2 Web Host模式下的消息處理管道...............119
3.2.1HttpControllerHandler ...........................................119
3.2.2實例演示:自定義HttpMessageHandler實現(xiàn)HTTP 方法重寫(S305) .... 126
3.3 Self Host模式下的消息處理管道..........................130
3.3.1 HttpBinding........................... 130
3.3.2HttpSelfHostServer.......................... 136
第4 章 HttpController 的激活......................145
4.1HttpController...................... 146
4.1.1HttpControllerContext................ 147
4.1.2HttpControllerDescriptor ....... 147
4.1.3ApiController..................................................... 149
4.2 HttpController是如何被創(chuàng)建的...................151
4.2.1程序集的解析.................................................151
4.2.2HttpController類型的解析..................... 161
4.2.3 HttpController的選擇..................................... 165
4.2.4HttpController的創(chuàng)建................................ 173
4.2.5HttpController的激活與釋放............... 178
4.3 IoC的應(yīng)用.....................................................183
4.3.1利用Unity 來認(rèn)識IoC.......................... 183
4.3.2基于IoC 的HttpControllerActivator.................... 185
4.3.3基于IoC 的DependencyResolver............................ 188
第5 章 Action 的選擇........................ 191
5.1HttpActionDescriptor..................... 192
5.1.1 ReflectedHttpActionDescriptor............ 193
5.1.2ActionNameAttribute ............. 194
5.1.3方法名決定HTTP 方法................................ 195
5.1.4ActionHttpMethodProvider....................................... 197
5.1.5針對特性的緩存.............................................200
5.2HttpParameterDescriptor.............. 201
5.2.1ReflectedHttpParameterDescriptor................................ 202
5.2.2實例演示:解析Action方法參數(shù)描述信息................ 204
5.3HttpActionSelector ........................ 205
5.3.1 ApiControllerActionSelector....................206
5.3.2有效的Action 方法............................ 207
5.3.3目標(biāo)Action 方法的選擇..................... 208
第6 章 特性路由...................... 218
6.1特性路由注冊.......................219
6.1.1HttpRouteInfoProvider特性....................... 219
6.1.2基本路由映射...........................................220
6.1.3讓URL 模板能夠盡可能反映資源的層次結(jié)構(gòu).................... 222
6.1.4為路由變量設(shè)置約束......................226
6.1.5通配符路由變量......................................227
6.1.6缺省路由變量.........................................228
6.1.7設(shè)置URI 前綴....................................... 230
6.2約束表達(dá)式的解析...........................................231
6.2.1RangeRouteConstraint ................. 232
6.2.2InlineConstraintResolver ............. 233
6.2.3自定義約束...................237
6.3路由解析.....................241
6.3.1RouteCollectionRoute ............. 241
6.3.2實例演示:查看特性路由注冊生成的RouteCollectionRoute 對象........ 243
6.3.3子路由對象的創(chuàng)建...................248
6.3.4 HttpRouteData的生成........... 255
第7 章 Model 綁定(上篇) .......... 262
7.1 Model綁定解決怎樣的問題.............263
7.1.1基于HttpRouteData的參數(shù)綁定............. 263
7.1.2基于查詢字符串的參數(shù)綁定..............267
7.2 Model元數(shù)據(jù)的解析...................................268
7.2.1 Model元數(shù)據(jù)的層次化結(jié)構(gòu).................268
7.2.2ModelMetadata............ 270
7.2.3ModelMetadataProvider............ 278
7.3 ValueProvider.................. 282
7.3.1ValueProviderResult ............................ 282
7.3.2NameValuePairsValueProvider .......... 285
7.3.3RouteDataValueProvider與QueryStringValueProvider ...... 295
7.3.4CompositeValueProvider ........... 296
7.4ValueProviderFactory ............ 296
7.4.1RouteDataValueProviderFactory與QueryStringValueProviderFactory.. 297
7.4.2CompositeValueProviderFactory........... 298
7.4.3ValueProviderFactory的注冊................................ 299
7.4.4自定義ValueProviderFactory.....301
第8 章 Model 綁定(下篇) ............. 304
8.1 ModelBinder................ 305
8.1.1ModelBindingContext.......... 306
8.1.2去除前綴后的二次綁定...........307
8.1.3CompositeModelBinder ............ 309
8.2ModelBinderProvider......................... 310
8.2.1CompositeModelBinderProvider................311
8.2.2ModelBinderAttribute ........... 312
8.2.3 Model綁定的流程......................313
8.3針對不同目標(biāo)類型的Model綁定....................... 314
8.3.1簡單類型..............315
8.3.2復(fù)雜類型...................318
8.3.3集合...................327
8.3.4數(shù)組................340
8.3.5字典................343
8.3.6最后一個ModelBinder........ 350
8.4ModelState............... 355
8.4.1 ApiController的ModelState ........................ 355
8.4.2實例演示:獲取Model 綁定過程中由ValueProvider 提供的數(shù)據(jù)(S808).... 357
第9 章 參數(shù)的綁定............... 359
9.1參數(shù)綁定系統(tǒng)全景展示...............360
9.1.1HttpParameterBinding.......... 361
9.1.2ActionValueBinder............. 362
9.2 5個原生的HttpParameterBinding............ 365
9.2.1ModelBinderParameterBinding ............ 365
9.2.2FormatterParameterBinding ................ 368
9.2.3HttpRequestParameterBinding......... 387
9.2.4CancellationTokenParameterBinding ....... 388
9.2.5ErrorParameterBinding ........ 390
9.3HttpParameterBinding的創(chuàng)建策略.......................... 392
9.3.1ParameterBindingAttribute特性.............. 392
9.3.2注冊參數(shù)綁定規(guī)則..............................397
9.3.3HttpParameterBinding的創(chuàng)建策略................ 400
第10 章 參數(shù)的驗證........... 406
10.1幾種參數(shù)驗證方式..............407
10.1.1手工驗證綁定的參數(shù)...............407
10.1.2使用ValidationAttribute特性..................411
10.1.3創(chuàng)建自我驗證數(shù)據(jù)類型...........................416
10.2以ModelValidator為核心的參數(shù)驗證系統(tǒng)................... 418
10.2.1DataAnnotationsModelValidator ........... 421
10.2.2 RequiredMemberModelValidator...........422
10.2.3ValidatableObjectAdapter.......... 425
10.2.4ErrorModelValidator ............ 426
10.3基于數(shù)據(jù)注解特性的參數(shù)驗證.......................431
10.3.1ValidationAttribute特性.............. 431
10.3.2DataAnnotationsModelValidator ............. 437
10.3.3DataAnnotationsModelValidatorProvider......... 439
10.4參數(shù)驗證流程............442
10.4.1ModelValidationNode ............. 443
10.4.2“驗證樹”是如何被建立起來的................. 448
10.4.3“必需”數(shù)據(jù)成員的驗證...........................457
10.4.4 BodyModelValidator............... 462
第11 章 Action 的執(zhí)行.................. 472
11.1 Action方法的執(zhí)行..................473
11.1.1HttpActionInvoker ........... 473
11.1.2ActionExecutor............... 477
11.2內(nèi)容協(xié)商..................484
11.2.1ContentNegotiator............. 484
11.2.2MediaTypeFormatter是如何被篩選出來的.............. 486
11.2.3如何確定響應(yīng)字符集.............................498
11.3HttpActionResult ................. 501
11.3.1無響應(yīng)主體的HttpActionResult....................... 502
11.3.2含響應(yīng)主體的HttpActionResult..................... 506
11.3.3ResponseMessageResult .......... 517
11.4HttpResponseMessage的生成.............. 518
11.4.1ActionResultConverter........... 518
11.4.2從消息處理管道來看HttpResponseMessage的生成................... 523
第12 章 過濾器........................ 527
12.1 Filter及其提供機(jī)制....................528
12.1.1Filter........ 528
12.1.2FilterProvider............... 531
12.1.3 5種Filter 類型.................. 539
12.2認(rèn)證與授權(quán)..................540
12.2.1Identity............. 540
12.2.2 Principal................... 544
12.2.3AuthenticationFilter............. 548
12.2.4AuthorizationFilter ............... 554
12.3針對Action 方法執(zhí)行前后的攔截................. 558
12.3.1ActionFilterAttribute................ 559
12.3.2實例演示:利用自定義ActionFilter實現(xiàn)對Action 方法執(zhí)行結(jié)果的緩存..............565
12.4異常處理與Filter 的屏蔽........... 572
12.4.1ExceptionFilter............... 572
12.4.2實例演示:利用自定義的ExceptionFilter集成EntLib 進(jìn)行異常處理(S1208) ............ 574
12.4.3OverrideFilter ................ 579
第13 章 安全..................... 585
13.1 IIS/ASP.NET認(rèn)證..............586
13.1.1 Basic認(rèn)證...................586
13.1.2 Digest認(rèn)證..................591
13.1.3集成Windows 認(rèn)證............. 594
13.1.4 Forms認(rèn)證.......................602
13.2 SSL/TLS............ 608
13.2.1非對稱加密...............608
13.2.2通過SSL/TLS 實現(xiàn)傳輸安全............... 614
13.2.3 SSL/TLS的應(yīng)用...............615
13.3第三方認(rèn)證....................619
13.3.1 OAuth 2.0簡介..................620
13.3.2 ImplicitAuthorization Grant ........................ 624
13.3.3Authorization Code Authorization Grant .............. 632
第14 章 跨域資源共享.............. 643
14.1同源策略.................644
14.1.1實例演示:跨域調(diào)用WebAPI.............. 645
14.1.2 JSONP............ 648
14.2 CORS規(guī)范.............654
14.2.1資源的授權(quán)...............654
14.2.2實例演示:利用自定義的MessageHandler支持跨域資源共享......... 658
14.3 CORS在ASP.NET WebAPI 中的實現(xiàn)................ 667
14.3.1實例演示:采用ASP.NETWeb API 原生的機(jī)制實現(xiàn)跨域資源共享(S1406)......... 668
14.3.2 CORS授權(quán)策略及其提供機(jī)制.............670
14.3.3資源授權(quán)的檢驗和CORS 響應(yīng)報頭的生成............. 675
14.3.4CorsMessageHandler............... 678
第15 章 Web API 的調(diào)用................. 685
15.1 HttpClient.............. 686
15.1.1HttpMessageInvoker ......... 686
15.1.2HttpClientHandler......... 687
15.1.3HttpClient............. 697
15.2客戶端消息處理管道................700
15.2.1HttpMessageHandler管道...................... 700
15.2.2HttpClientFactory .......... 703
15.3面向“對象”編程....................704
15.3.1將數(shù)據(jù)對象寫入請求消息....................704
15.3.2讀取HTTP 消息主體內(nèi)容并反序列化為數(shù)據(jù)對象........... 707
附錄A 實例列表.......... 709
媒體推薦
互聯(lián)網(wǎng)應(yīng)用尤其是移動互聯(lián)網(wǎng)應(yīng)用的普及,讓采用Web直接通信的輕量級Web Service成為主流,本書要講的正是ASP.NET Web API。它是一個全新的通信平臺,因為微軟沒有選擇在重量級框架上通過擴(kuò)展實現(xiàn)輕量級通信。本書宗旨是清晰呈現(xiàn)消息處理管道,以使讀者完全理解從接收請求到響應(yīng)回復(fù)的全流程,并徹底掌握路由、HttpController激活、Action方法的選擇與執(zhí)行、參數(shù)的綁定與驗證、過濾器的執(zhí)行和安全等相關(guān)機(jī)制。
作者簡介
蔣金楠(網(wǎng)名Artech),《WCF全面解析(上、下冊)》《ASP.NET MVC 4框架揭秘》《ASP.NET MVC 5框架揭秘》等多部暢銷IT圖書作者,現(xiàn)就職于一知名軟件公司擔(dān)任高級軟件顧問。擁有一個訪問量超過200萬的個人博客,2012年度51CTO IT博客大賽10佳得主。2007—2013年被連續(xù)7次評為微軟MVP,同時也是少數(shù)幾個跨多領(lǐng)域(Solutions Architect、Connected System、Microsoft Integration和ASP.NET/IIS )的MVP之一。
作者博客: http://www.cnblogs.com/artech
作者微博: http://www.weibo.com/artech
電子郵箱:jiangjinnan@gmail.com
微信公眾賬號:Artech2981
前言
我覺得大部分人都是“眼球動物”,他們關(guān)注的往往都是目光所及的東西。對于很多軟件從業(yè)者來說,他們對看得見(具有UI界面)的應(yīng)用抱有極大的熱忱,但是對背后支撐整個應(yīng)用的服務(wù)卻顯得較為冷漠。如果我們將整個“生態(tài)系統(tǒng)”比喻成海面上漂浮的冰山,我們所能看到的只是露出水面的冰山一角,水面之下才是一個“龐然大物”。
提到服務(wù),我們自然想到Web Service。但是傳統(tǒng)意義上的WebService卻有點名不副實,因為支撐它的其實不是Web而是SOAP,承載一個Web Service甚至可以根本不需要Web。隨著互聯(lián)網(wǎng)的普及,互聯(lián)網(wǎng)應(yīng)用(尤其移動互聯(lián)網(wǎng)應(yīng)用)已經(jīng)成為主流,“SOAP之重”已經(jīng)越來越令我們無法承受,于是采用REST架構(gòu)風(fēng)格并直接采用Web進(jìn)行通信的輕量級Web Service走進(jìn)了我們的視野并登堂入室。為了與傳統(tǒng)的基于SOAP的Web Service進(jìn)行區(qū)分,我們將后者稱為Web API。
很多人鼓吹SOAP已死,我個人對此持不同的看法。上面講的“重”與“輕”都是不帶任何感情色彩的中性詞,至于優(yōu)劣評價則決定于它們是否適合應(yīng)用的場景。到目前為止,對于企業(yè)級應(yīng)用之間的內(nèi)部集成互聯(lián),我覺得傳統(tǒng)的Web Service依然是最好的選擇。傳統(tǒng)WebService應(yīng)用的領(lǐng)域貌似在不斷被Web API占據(jù),但是后者并不能完全被視為前者的替代品,它只是讓“踩過界”的Web Service退回到它應(yīng)該堅守的領(lǐng)地。WebService和Web API在各自適合的領(lǐng)域各司其職,形成一種理想的“路歸路、橋歸橋”的狀態(tài)。
Web Service和Web API的合理布局同樣也體現(xiàn)在微軟技術(shù)平臺上。WCF在過去是唯一的選擇,這是一個具有“SOAP”基因的通信平臺,微軟后來利用擴(kuò)展讓它提供了針對REST的支持。正因為如此,如果使用WCF來構(gòu)建Web API的話,我們依然需要采用傳統(tǒng)的編程方式,Web API的“簡單、快捷”完全得不到體現(xiàn)。微軟意識到在一個“重量級”通信框架上通過擴(kuò)展實現(xiàn)“輕量級”的通信,還不如重新構(gòu)建一個通信平臺,于是ASP.NET Web API應(yīng)運而生。
這不是一本傳統(tǒng)意義上的入門書籍
任何一本書都具有對應(yīng)的受眾群體,所以我不得不將這句話放在最前面,并且希望所有打算購買此書的讀者能夠看到。如果你之前對ASP.NET Web API(或者ASP.NET MVC)完全沒有概念,在某一天突然被安排去開發(fā)一個需要使用到ASP.NET Web API的項目,你希望有那么一本書能夠在一個星期或者更短的時間內(nèi)幫助你掌握ASP.NET Web API基本的編程方式,那么這本書不適合你。
我個人很喜歡金庸和古龍的武俠小說,我覺得學(xué)習(xí)某種開發(fā)框架就像是練一門武功。一門武功具有“招式”和“心法”之分,外在的招式可以速成,而內(nèi)功心法絕非一蹴而就,但是沒有內(nèi)功心法支撐的招式只是花拳繡腿。對于某種開發(fā)框架來說,基本的編程模式就是招式,框架本身的設(shè)計就是心法。
“訓(xùn)練招式”和“傳授心法”的書我們都需要,并且不能根據(jù)這點來評判一本書的優(yōu)劣。就本書而言,這是一本苦練內(nèi)功心法的書。對于大部分讀者來說,我覺得在很短的時間內(nèi)完全掌握本書的內(nèi)容并不是一件容易的事情,所以如果你沒有決定花較多的時間和精力閱讀此書的話,我還是建議你選擇其他相關(guān)的書籍。
我在《ASP.NET MVC 4框架揭秘》一書中寫過這么一段話:“掌握ASP.NET MVC具有三個層次,了解基本的編程模式為第一層次,能夠清晰認(rèn)識ASP.NET MVC框架本身從請求接收到響應(yīng)回復(fù)的整個流程為第二層次,最高的層次則是能夠靈活自由地利用ASP.NET MVC提供的擴(kuò)展點解決開發(fā)過程的實際問題”。這句話同樣適用于針對ASP.NET WebAPI的學(xué)習(xí),本書寫作的目的是使第一層次的讀者快速進(jìn)入第二層次和第三層次。
這是一本實用的書嗎
可能有人覺得這本講述ASP.NET Web API架構(gòu)設(shè)計和剖析框架運行原理的書沒有什么“實際”的意義,因為我們每天的日常工作就是編程,知道了ASP.NET Web API從請求接收到響應(yīng)回復(fù)之間的整個處理流程并不會對實際工作產(chǎn)生實質(zhì)性的改變。其實這種想法是極端錯誤的,因為我們編寫的程序最終是在框架上運行的,程序的高效性決定于它是否能夠最大限度地“迎合”框架的運行機(jī)制,所以了解ASP.NET Web API框架的運行原理有利于我們寫出高質(zhì)量的程序。
常年以來,我個人的主要工作就是維護(hù)和設(shè)計公司內(nèi)部的一個開發(fā)框架。這是一個在集團(tuán)內(nèi)部廣泛采用的針對.NET的開發(fā)框架,它的存在使流水線式的軟件開發(fā)成為可能,這個框架不僅僅提高了生產(chǎn)效率和產(chǎn)品質(zhì)量,還降低了對最終開發(fā)人員技能的要求。之所以能夠做到這一點,原因在于幾乎所有與業(yè)務(wù)無關(guān)的功能(比如日志、異常處理、權(quán)限控制、安全審核、事務(wù)處理等)都由這個框架來完成,最終的開發(fā)人員只需要實現(xiàn)具體的業(yè)務(wù)邏輯就可以了。
對于這個開發(fā)框架來說,針對相應(yīng)開發(fā)技術(shù)所做的擴(kuò)展和工具是一個重要的組成部分,所以出于本職工作的需要,我不得不對采用的主流開發(fā)技術(shù)進(jìn)行深入研究,因為只有在對其內(nèi)部運行原理了然于胸的情況下才能精準(zhǔn)地找到一個最適合的擴(kuò)展點來解決具體項目開發(fā)過程中遇到的問題。很多讀者都問過我同樣一個問題:“為什么你能夠了解那么多關(guān)于WCF、ASP.NET MVC和ASP.NET Web API這些技術(shù)的內(nèi)部細(xì)節(jié)?”我現(xiàn)在告訴你們答案:因為這是我本職工作的一部分。為了將這些實用的研究成果服務(wù)于更多的人,我將它們寫到我的多本書中。
可以將本書當(dāng)成一本講述設(shè)計架構(gòu)的書來讀
在我的周圍存在著這樣一些人,這些人以剛畢業(yè)一兩年的大學(xué)生為主,他們大都工作勤奮、聰明好學(xué),手中經(jīng)常捧著GoF的《設(shè)計模式》,總是希望將書中的設(shè)計模式應(yīng)用到具體項目之中,或者希望通過項目的實踐來印證他們在書本上學(xué)到的設(shè)計模式,但是理論和實踐之間的距離總讓他們感到困惑。
要從真實的項目或者產(chǎn)品中學(xué)習(xí)“實用”的軟件架構(gòu)設(shè)計知識,先得確定目標(biāo)項目或者產(chǎn)品中采用的架構(gòu)思想和設(shè)計模式是正確的,而我們參與的很多項目其實被“架構(gòu)”得一塌糊涂。對于像ASP.NET這樣的產(chǎn)品,其基礎(chǔ)架構(gòu)能夠在很長一段時間內(nèi)保持不變,本身就證明了應(yīng)用在上面的架構(gòu)設(shè)計的正確性,它們不正是我們學(xué)習(xí)架構(gòu)設(shè)計最好的素材嗎!
就我個人而言,很多設(shè)計架構(gòu)方面的知識都是近年來在深入研究WCF、ASP.NET MVC、ASP.NET Web API、EnterpriseLibrary和Unity這些開發(fā)技術(shù)和開源框架的過程中獲取的。對于那些只會拿貓、狗這些東西舉例的設(shè)計模式的書籍來說,這些內(nèi)容是學(xué)不到的。本書除了介紹一些技術(shù)細(xì)節(jié),實際上還將ASP.NET Web API的整個架構(gòu)設(shè)計展現(xiàn)在了讀者面前,相信有心的讀者會從中學(xué)到不少關(guān)于架構(gòu)設(shè)計方面的知識。
如果你手頭剛好有一本《ASP.NET MVC 4框架揭秘》(《ASP.NETMVC 5框架揭秘》也即將出版),可以將這兩本書對照著一起看。對于相同的功能點,認(rèn)真思考一下為何它們在ASP.NET MVC和ASP.NET Web API中會采用不同的設(shè)計,兩種設(shè)計孰優(yōu)孰劣,我想收獲會更大。
本書承載了個人針對新技術(shù)的學(xué)習(xí)方法
在過去幾年中,有些熱心的讀者和網(wǎng)友都向我咨詢過一個問題:“對于一門新的技術(shù),如何能夠在短時間內(nèi)掌握其精髓”。這是一個學(xué)習(xí)方法的問題,雖然我覺得每個人都有適合自己的學(xué)習(xí)方法,但我還是刻意地將我個人采用的方式體現(xiàn)在本書之中,希望它對某些讀者有用。如果讀者是個有心人,應(yīng)該可以看到我在介紹某個知識點的時候,不僅僅會告訴你“是什么”和“為什么”,還會告訴你“如何證明是這樣”。換句話說,我不僅僅將某個論點拋給你,還為你展現(xiàn)了整個論證的過程,實際上我在學(xué)習(xí)過程中就是這么做的。
本書的寫作特點
本書具有一個與其他中文原創(chuàng)或者翻譯書籍截然不同的特點,那就是幾乎所有的術(shù)語都采用英文,比如HttpController、Action和Model,在本書中并沒有翻譯成中文“HTTP控制器”、“操作”和“模型”。因為我認(rèn)為很多術(shù)語其實很難找到一個語義完全等同的中文詞組或短語與之對應(yīng),對于習(xí)慣了將英文作為“開發(fā)語言”的讀者來說,強(qiáng)行翻譯其實是不必要的。
除此之外,這不是一本純理論的書,而是一本“實證型”的書,在書中提供了120個可供單獨下載的實例。這些實例在本書中具有不同的作用,有的是為了探測和證明對應(yīng)的論點,有的是為了演示所使用的某種編程技巧。
本書讀者
雖然這不是一本傳統(tǒng)意義上的入門書籍,但是我不會根據(jù)讀者的技能將某一部分人排除在本書的讀者之外。與市面上絕大部分同類書籍相比,我寧愿說這本書走得更遠(yuǎn)而不是鉆得更深,因為雖然本書更加近距離地觸及了ASP.NET Web API框架內(nèi)核,但是涉及的內(nèi)容本身并沒有什么高深莫測之處,對于具有基本.NET基礎(chǔ)的讀者應(yīng)該都看得懂。所以我覺得本書適合那些對深層次了解ASP.NET Web API的開發(fā)人員和架構(gòu)師,不論讀者處于怎樣的層次總會找到自己知識的“盲點”。
關(guān)于作者
蔣金楠(網(wǎng)名Artech),《WCF全面解析》(上、下冊)、《ASP.NET MVC 4框架揭秘》《ASP.NETMVC 5框架揭秘》等多部暢銷IT圖書作者,現(xiàn)就職于一家知名軟件公司擔(dān)任高級軟件顧問。擁有一個訪問量超過200萬的個人博客(http://www.cnblogs.com/artech),被評為2012年度51 CTO 十大杰出IT博客。2007~2013年被連續(xù)7次評為微軟MVP,同時也是少數(shù)幾個跨多領(lǐng)域(Solutions Architect、ConnectedSystem、Microsoft Integration和ASP.NET/IIS)的MVP之一。
致謝
本書得以出版,需要感謝本書的編輯張春雨和劉舫,他們的專業(yè)水準(zhǔn)和責(zé)任心為本書提供了質(zhì)量保證,多次合作產(chǎn)生的默契讓我對下次合作充滿期待。此外,最需要感謝的是我的妻子徐妍妍,只有我知道她在本書提交給出版社之前所做的校對工作有多么重要。
本書支持
本書針對最新版本的ASP.NET Web API,同時涉及太多底層實現(xiàn)的內(nèi)容,所以大部分內(nèi)容是找不到任何現(xiàn)成參考資料的,這些內(nèi)容大都來自于作者對源碼的分析和試驗的證明。本書的最初版本是根據(jù)ASP.NET MVC Web API 2 Beta撰寫的,后來微軟發(fā)布了正式版,然后作者根據(jù)正式版對原來的內(nèi)容進(jìn)行了大量改動。這些因素加上作者自身能力的限制,都可能造成一些無法避免的錯誤或者偏差,如果讀者在閱讀過程中發(fā)現(xiàn)了任何問題,希望能夠反饋給我。如果讀者遇到任何ASP.NET MVC、ASP.NET Web API或者WCF的問題,也歡迎與我通過以下方式進(jìn)行交流。
作者博客:http://www.cnblogs.com/artech
作者微博:http://www.weibo.com/artech
電子郵箱:jiangjinnan@gmail.com
微信公眾賬號:Artech2981
本書的每一章節(jié)都會提供一系列實例演示,讀者可以根據(jù)編號(如S101、S202 等)從下載的源代碼壓縮包中找到對應(yīng)的實例。本書的附錄列出了可供下載的所有實例演示的列表和相關(guān)描述。源代碼的下載地址為:www.broadview.com.cn。