用于使用統(tǒng)一規(guī)則集合來驗(yàn)證輸入的多個(gè)方法的方法和系統(tǒng)的制作方法
【專利說明】用于使用統(tǒng)一規(guī)則集合來驗(yàn)證輸入的多個(gè)方法的方法和系 統(tǒng)
[0001] 相關(guān)申請(qǐng)的交叉引用 本申請(qǐng)要求在2013年5月20日提交的美國臨時(shí)申請(qǐng)?zhí)?1/825, 330的權(quán)益,通過引用 其全部將其并入本文中。
【背景技術(shù)】
[0002] 系統(tǒng)(諸如web應(yīng)用服務(wù)器)可以通過多個(gè)部件接受用戶輸入,諸如通過用戶接口 或應(yīng)用編程接口(API)。驗(yàn)證該用戶輸入確保該輸入匹配應(yīng)用的數(shù)據(jù)模型以幫助保護(hù)應(yīng)用 數(shù)據(jù)免受用戶輸入錯(cuò)誤并且免受具有惡意意圖的用戶。例如,驗(yàn)證可以發(fā)生在用戶將輸入 送入(enter)到具有若干字段的在線表格中時(shí)。這些字段中的一個(gè)或多個(gè)可以要求例如某 種格式的或一定數(shù)量(asetnumberof)的字母數(shù)字的字符。如果用戶的輸入不滿足針對(duì) 該字段的指定要求,則該輸入將被認(rèn)為是無效的。
[0003] 在這樣的環(huán)境中,存在許多方式來合并輸入驗(yàn)證??梢钥缦到y(tǒng)的多個(gè)部件獨(dú)立地 實(shí)現(xiàn)這些輸入驗(yàn)證。當(dāng)跨多個(gè)部件獨(dú)立地實(shí)現(xiàn)輸入驗(yàn)證規(guī)則時(shí),可以產(chǎn)生驗(yàn)證中的不一致 性。
【附圖說明】
[0004] 現(xiàn)在將參考示出本公開的示例實(shí)施例的附圖。在附圖中: 圖1是與本公開的實(shí)施例一致的示例性系統(tǒng)的框圖。
[0005] 圖2是與本公開的實(shí)施例一致的圖1的示例性系統(tǒng)的示例性框圖。
[0006] 圖3a和3b是圖示了與本公開的實(shí)施例一致的用于定義驗(yàn)證規(guī)則的示例性方法的 圖。
[0007] 圖4是與本公開的實(shí)施例一致的用于交互式地送入輸入的示例性圖形用戶接口。
[0008] 圖5是示出了與本公開的實(shí)施例一致的針對(duì)圖2的示例性系統(tǒng)中的交互式輸入和 驗(yàn)證的示例性數(shù)據(jù)通信流的框圖。
[0009] 圖6是示出了與本公開的實(shí)施例一致的針對(duì)圖2的示例性系統(tǒng)中的非交互式輸入 和驗(yàn)證的示例性數(shù)據(jù)通信流的框圖。
[0010] 圖7是表示與本公開的實(shí)施例一致的用于驗(yàn)證通過用戶接口獲取的輸入數(shù)據(jù)的 示例性方法的流程圖。
[0011] 圖8是表示與本公開的實(shí)施例一致的用于驗(yàn)證通過非交互式源獲取的輸入數(shù)據(jù) 的示例性方法的流程圖。
【具體實(shí)施方式】
[0012] 通過用戶接口、API和其他方法接受輸入的系統(tǒng)可以需要用于驗(yàn)證該輸入的多個(gè) 獨(dú)立的方法。
[0013] 例如,用于送入輸入的一個(gè)方式是在用戶提供交互式輸入時(shí)通過將數(shù)據(jù)送入到用 戶接口中。在這樣的場景中,用戶可能在犯錯(cuò)時(shí)期待關(guān)于正被送入到字段中的輸入的立即 反饋。例如,如果用戶送入范圍外的數(shù)字、使需要的字段遺留空白或提供已經(jīng)在使用中的用 戶名稱,則用戶可能期望立即的錯(cuò)誤通知。在該場景中正在對(duì)用戶接口做出的改變可以是 暫時(shí)的并且可以不被保存直到用戶明確對(duì)請(qǐng)求保存或提交改變。盡可能接近用戶地執(zhí)行驗(yàn) 證是有利的,因?yàn)樵谟脩糨斎肱c驗(yàn)證規(guī)則評(píng)估之間的每個(gè)額外的網(wǎng)絡(luò)通信可以導(dǎo)致在無效 的輸入與例如向用戶示出錯(cuò)誤消息之間的增加的延遲。
[0014] 在另一示例中,送入輸入還可以涉及交付輸入以做出對(duì)存儲(chǔ)在系統(tǒng)中的數(shù)據(jù)的改 變。這可以例如發(fā)生在提交表格時(shí)。在該場景中,跨越多個(gè)字段的輸入的整個(gè)集合可以作 為整體被驗(yàn)證。如果驗(yàn)證錯(cuò)誤發(fā)生,則所述驗(yàn)證錯(cuò)誤可以在發(fā)現(xiàn)了錯(cuò)誤的字段旁邊示出,允 許用戶在嘗試再次交付輸入之前糾正錯(cuò)誤。
[0015] 在另一示例中,諸如在用戶直接調(diào)用API時(shí)經(jīng)由非交互式方法獲取輸入。在這樣 的場景中,由于調(diào)用API,用戶可以期待接收所有無效輸入的完全報(bào)告。在該示例中,當(dāng)提交 到系統(tǒng)的輸入被確定是無效的時(shí),不將該輸入交付到系統(tǒng)。
[0016] 某些示例性系統(tǒng)是復(fù)雜的并且可以具有使用多個(gè)不同的技術(shù)實(shí)現(xiàn)的部件,所述多 個(gè)不同的技術(shù)可以共享數(shù)據(jù)但不是實(shí)施。例如,可以使用C#來實(shí)現(xiàn)用于訪問數(shù)據(jù)的API,而 可以使用JavaScript來實(shí)現(xiàn)用戶接口。在某些實(shí)施例中,可以使用使可以由不同的部件執(zhí) 行的驗(yàn)證規(guī)則統(tǒng)一的方法來執(zhí)行輸入驗(yàn)證,其中使用不同的技術(shù)實(shí)現(xiàn)不同的部件。
[0017] 在另一示例中,API可以提供針對(duì)某些性質(zhì)的缺省值,并且那些缺省值可以影響驗(yàn) 證。在某些實(shí)施例中,API(包括例如用戶接口和其他中間層)的調(diào)用者獲取缺省值來確保 用戶可以送入將成功地驗(yàn)證的數(shù)據(jù)。
[0018] 與本公開一致的實(shí)施例允許使用一個(gè)技術(shù)在一個(gè)部件中實(shí)現(xiàn)驗(yàn)證規(guī)則,而仍慮及 將被應(yīng)用在多個(gè)部件中以及將被應(yīng)用在用于接收和驗(yàn)證輸入的多個(gè)輸入方法中的那些驗(yàn) 證規(guī)則。
[0019] 現(xiàn)在將詳細(xì)參考根據(jù)本公開實(shí)現(xiàn)的示例性實(shí)施例,其示例被圖示在附圖中。無論 什么可能,相同的參考數(shù)字將貫穿附圖被用來指相同的或類似的部分。
[0020] 圖1是示例性聯(lián)網(wǎng)系統(tǒng)100的框圖。示例性系統(tǒng)100可以是驗(yàn)證輸入數(shù)據(jù)并且通 過網(wǎng)絡(luò)120傳送該數(shù)據(jù)的任何類型的系統(tǒng)。輸入數(shù)據(jù)可以來自任何遠(yuǎn)程輸入源,包括諸如 例如電話102、膝上型計(jì)算機(jī)104、計(jì)算機(jī)106或平板計(jì)算機(jī)108之類的交互式設(shè)備。輸入 數(shù)據(jù)還可以來自非交互式源,諸如例如不具有圖形用戶接口(⑶I)的任何遠(yuǎn)程程序,其包括 遠(yuǎn)程非交互式程序110或者(未示出的)遠(yuǎn)程守護(hù)(daemon)或自動(dòng)調(diào)度的程序。在系統(tǒng)100 中,經(jīng)由網(wǎng)絡(luò)120從輸入源向服務(wù)器130傳達(dá)輸入數(shù)據(jù)并且從服務(wù)器130傳達(dá)輸入數(shù)據(jù)。服 務(wù)器130可以涉及一個(gè)或多個(gè)機(jī)器,其包括(未示出的)一個(gè)或多個(gè)處理器和存儲(chǔ)器。一個(gè) 或多個(gè)處理器可以是能夠執(zhí)行存儲(chǔ)在存儲(chǔ)器中的指令的特定集合的單個(gè)或多個(gè)微處理器、 現(xiàn)場可編程門陣列(FPGA)或數(shù)字信號(hào)處理器(DSP)。存儲(chǔ)器包括有形非瞬時(shí)計(jì)算機(jī)可讀介 質(zhì),諸如柔性盤、硬盤、CD-ROM(壓縮盤只讀存儲(chǔ)器)、M0 (磁光)驅(qū)動(dòng)器、DVD-ROM(數(shù)字通用 盤只讀存儲(chǔ)器)、DVD-RAM(數(shù)字通用盤隨機(jī)訪問存儲(chǔ)器)或半導(dǎo)體存儲(chǔ)器。
[0021] 圖2是示例性系統(tǒng)100的示例性框圖,其圖示了系統(tǒng)內(nèi)的部件的類型和示例性通 信流。在該示例性框圖中,系統(tǒng)100可以經(jīng)由交互式用戶接口 202接受輸入,所述交互式用 戶接口 202諸如例如交互式設(shè)備102、104、106或108的接口。系統(tǒng)100還可以從遠(yuǎn)程非交 互式程序110 (或任何其他非交互式源,諸如不具有GUI的程序、遠(yuǎn)程命令行程序或者遠(yuǎn)程 守護(hù)或自動(dòng)調(diào)度的程序)接受輸入。在某些實(shí)施例中,示例性系統(tǒng)100可以從本地交互式或 非交互式程序接受輸入,所述程序諸如例如本地非交互式程序210,使得沒有輸入從本地程 序經(jīng)由網(wǎng)絡(luò)120傳達(dá)。
[0022] 在某些實(shí)施例中,服務(wù)器130包括HTTP服務(wù)器220。雖然圖2提到HTTP服務(wù)器 220,但應(yīng)理解服務(wù)器130可以包括任何類型的數(shù)據(jù)服務(wù)器,諸如例如web服務(wù)器、FTP服務(wù) 器、應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器、媒體服務(wù)器、云服務(wù)器和/或郵件服務(wù)器。在某些實(shí)施例 中,HTTP服務(wù)器220經(jīng)由網(wǎng)絡(luò)120向和從用戶接口 202和/或遠(yuǎn)程非交互式程序110接受 輸入并傳輸數(shù)據(jù)。
[0023] 在某些實(shí)施例中,服務(wù)器130包括本地非交互式程序210 (或任何其他本地非交互 式源,諸如守護(hù)或非-GUI程序),其經(jīng)由API230提供輸入并訪問輸入驗(yàn)證規(guī)則的統(tǒng)一集合 235〇
[0024] 服務(wù)器130包括API230,所述API230是從系統(tǒng)100讀數(shù)據(jù)并且提交對(duì)數(shù)據(jù)的改 變的進(jìn)入點(diǎn)。API230包括由系統(tǒng)100使用的輸入驗(yàn)證規(guī)則的統(tǒng)一集合235的定義。在某 些實(shí)施例中,可以在API230的外部定義輸入驗(yàn)證規(guī)則的統(tǒng)一集合235。API進(jìn)入點(diǎn)可以由 HTTP服務(wù)器220 (或任何其他本地?cái)?shù)據(jù)服務(wù)器)使用并且由任何非交互式程序(諸如遠(yuǎn)程非 交互式程序110或本地非交互式程序210)或(未示出的)本地交互式程序使用。
[0025]API230向應(yīng)用240提供接口,所述應(yīng)用240可以訪問數(shù)據(jù)庫250并向數(shù)據(jù)庫250 交付數(shù)據(jù)。在某些實(shí)施例中,應(yīng)用240不從任何數(shù)據(jù)庫讀數(shù)據(jù)和/或向任何數(shù)據(jù)庫交付數(shù) 據(jù)。數(shù)據(jù)庫250對(duì)應(yīng)用240而言可以是本地的或可以位于遠(yuǎn)程機(jī)器上。應(yīng)用240可以是處 理輸入的任何程序或程序的組。
[0026] 在某些實(shí)施例中,HTTP服務(wù)器220可以是本地軟件框架的部分,其包括使用常見 技術(shù)將輸入驗(yàn)證規(guī)則的統(tǒng)一集合235中的一個(gè)或多個(gè)規(guī)則變換成一個(gè)或多個(gè)規(guī)則的本地 的特定于部件的(component-specific)實(shí)現(xiàn)的功能。例如,在某些實(shí)施例中,基于.Net的 HTTP服務(wù)器可以與C#的、經(jīng)由API230訪問輸入驗(yàn)證規(guī)則的統(tǒng)一集合235的本地方法交 互,并且使用輸入驗(yàn)證規(guī)則的統(tǒng)一集合235來參數(shù)化(parameterize)輸入驗(yàn)證規(guī)則的C#實(shí) 現(xiàn),所述輸入驗(yàn)證規(guī)則的C#實(shí)現(xiàn)因此基于輸入驗(yàn)證規(guī)則的統(tǒng)一集合235并且與輸入驗(yàn)證規(guī) 則的統(tǒng)一集合235 -致。輸入驗(yàn)證規(guī)則的那些C#實(shí)現(xiàn)可以繼而被用來生成輸入驗(yàn)證規(guī)則 的JavaScript實(shí)現(xiàn),所述輸入驗(yàn)證規(guī)則的JavaScript實(shí)現(xiàn)被嵌入在繼而將由遠(yuǎn)程設(shè)備上 的web瀏覽器再現(xiàn)(render)的web頁面代碼中。
[0027] 圖3a和3b是圖示了用于定義輸入驗(yàn)證規(guī)則的統(tǒng)一集合235的示例性方法的圖。 輸入驗(yàn)證規(guī)則的統(tǒng)一集合235可以是可以被應(yīng)用于輸入值的驗(yàn)證規(guī)則的集合中的任何一 個(gè)或多個(gè),包括例如:最小和最大值、最小和最大串長、輸入值必須匹配的需要的正則表達(dá) 式模式、輸入值需要