APP數據接口開發的一些經驗

      剛接到這樣的任務時,沒有感受到任何壓力,不就是給移動端應用提供數據嗎?那邊發來參數,這邊處理數據,返回JSON。作網站開發時常用ajax請求後臺數據,不就是這麼回事嗎。因而,在確認完需求後就開始幹了,很快,進入聯調階段,這個時候各類問題來了,忙得不可開交。吃一塹,長一智,項目結束後總結了下,大體分爲如下幾點:程序員


      1、何時應該增長接口。
      通常一個頁面不存在二次請求的需求時,使用一個接口,像通常的詳情頁,我的信息頁等;頁面單一功能又須要二次請求的,像帶分頁功能的列表頁,使用一個接口;頁面含多個功能,其中有一個須要二次請求的,則須要定義多個接口了,好比我的信息頁下帶一個待辦事項的列表,又支持分頁,那若是一個接口返回所有信息的話,之後每次翻頁都要刷新我的信息內容,這樣就形成了沒必要要的信息傳遞。ajax


      2、 應該努力讓接口的URL看上去易懂又美觀。
      在建立接口時就應該考慮到接口地址,文件目錄不要太深,我的以爲不該超過三層,層次最好是和APP的菜單層次保持一致,這樣的好處起碼在之後維護也會方便不少。接口地址不該該輕易的改動,包括增長參數,由於這會致使APP從新打包,若是是已經上線,那意味着APP須要升級。數據庫


      3、參數與返回值。
      先說參數,筆者目前的作法是通常查詢採用URL傳參,增改採用POST傳遞JSON字符串提交數據,刪除一樣使用POST方式。再說返回值,咱們在項目中全部接口統一返回JOSN數據,而且約定一個格式,好比這個JSON對象含三個Key,分別是data,msg和status,分別表明了返回的數據,data多是對象或者數組,請求反饋信息和反饋狀態碼,這樣就不用每一個接口都說明一遍了。再談一些細節,在高級語言中,數據有多種類型,String,Int,DateTime等等。而序列化爲JSON後,所有變爲字符串,這個時候沒有給值的字段就須要注意一下,像值類型,爲可空時,序列化後值直接是null表示,沒有引號;爲不可空時,值爲默認值,一樣沒有引號,而DateTime則帶引號,"0001-01-01T00:00:00";而像引用類型String,無值時,序列化後也變成null,而不是空串"",要想用空串""表示,必須給一個默認值,如String.Empty,說這點是由於當時iOS告訴我說字段值返回null時,他們那邊報錯。還有一種狀況是以前遇到過的,就是數值類型的精度問題,當時接口返回一個價格字段,服務器端固然用decimal類型,而且保留兩位小數,可是iOS端接收到的值小數點後卻多出不少位,而Android沒有任何問題,最後只好在序列化前先轉成字符串類型。其它須要包含小數位的數值類型當小數點後全是0時,序列化變爲整型,這種狀況一樣須要先轉爲字符串再序列化。關於DateTime類型,在做爲增改參數接收時,就是反序列化後要插入到數據庫,若是你正好使用了Sql Server,又使用了DateTime類型,請注意它的範圍是1753-01-01 00:00:00 到9999-12-31 23:59:59,而空串轉爲時間爲"0001-01-01 00:00:00",會報異常。最後,筆者感受,是否是沒有特殊狀況,全部字段均可以給移動端返回字符串呢,像時間類型,手機上要顯示到日,我就不返回時分秒了,以字符串類型返回,這樣之後產品說要顯示時分秒,直接在後臺處理下就OK了,是否是這樣的?數組


      4、接口如何聯調。
      這裏的聯調包含兩層含義,一是VS環境下的遠程調試,這個具體方法在網上有不少,在這就很少說了。另外一個含義就是和移動端聯合測試軟件功能。此次項目並無真正遠程調試幾回,由於記錄了詳細的調試日誌,因此大部分問題都能很快的定位。調試日誌通常都包含了兩項內容:當前環境下的關鍵變量值及當前方法的信息。安全


      5、錯誤處理和返回錯誤碼。
      首先,切忌把異常直接拋給調用者。由於這樣不管是對體驗仍是定位錯誤都沒有任何益處,而是應該在後臺捕獲,並記錄詳細的日誌,而後定義一套全局的錯誤碼,返回對應的錯誤碼給接口調用者。關於異常的捕獲應該在哪裏處理,我的以爲但應該不是最佳,最外層應該用try catch包裹,並記錄日誌,保證異常不會拋出到調用方,其它位置若是有非託管資源的使用,應該捕獲,而後記錄日誌,釋放資源,並繼續把錯誤向上拋。服務器


      6、接口文檔。
      提到寫文檔,程序員貌似天生反感,可是開發接口,不寫文檔,彷佛是不可能的,而且還要寫得規範,別人能看懂。接口文檔寫得好,真的是件一勞永逸的事,寫一份好文檔省出的時間要遠遠大於寫文檔的時間,固然要作到及時更新,與程序同步。通常接口文檔包含了功能、請求方式(GET/POST)、 地址、參數、返回值、請求示例、返回示例以及全局的安全驗證方式、錯誤碼等。測試


      寫這篇文章的目的就是想把這幾個月的接口開發工做作個總結,結果拖拖拉拉寫了好幾天,寫完再讀時發現都有點變味了。文章中可能不少地方寫到的處理方法或者對知識的理解並非很正確,但願您不吝賜教,留下寶貴建議。網站

相關文章
相關標籤/搜索