1. 程式人生 > >APP資料介面開發的一些經驗

APP資料介面開發的一些經驗

      剛接到這樣的任務時,沒有感覺到任何壓力,不就是給移動端應用提供資料嗎?那邊發來引數,這邊處理資料,返回JSON。做網站開發時經常使用ajax請求後臺資料,不就是這麼回事嗎。於是,在確認完需求後就開始幹了,很快,進入聯調階段,這個時候各種問題來了,忙得不可開交。吃一塹,長一智,專案結束後總結了下,大致分為以下幾點:


      一、什麼時候應該增加介面。
      一般一個頁面不存在二次請求的需求時,使用一個介面,像一般的詳情頁,個人資訊頁等;頁面單一功能又需要二次請求的,像帶分頁功能的列表頁,使用一個介面;頁面含多個功能,其中有一個需要二次請求的,則需要定義多個介面了,比如個人資訊頁下帶一個待辦事項的列表,又支援分頁,那如果一個介面返回全部資訊的話,以後每次翻頁都要重新整理個人資訊內容,這樣就造成了不必要的資訊傳遞。


      二、 應該努力讓介面的URL看上去易懂又美觀。
      在建立介面時就應該考慮到介面地址,檔案目錄不要太深,個人覺得不應超過三層,層次最好是和APP的選單層次保持一致,這樣的好處起碼在以後維護也會方便很多。介面地址不應該輕易的改動,包括增加引數,因為這會導致APP重新打包,如果是已經上線,那意味著APP需要升級。


      三、引數與返回值。
      先說引數,筆者目前的做法是一般查詢採用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了,是不是這樣的?


      四、介面如何聯調。
      這裡的聯調包含兩層含義,一是VS環境下的遠端除錯,這個具體方法在網上有很多,在這就不多說了。另一個含義就是和移動端聯合測試軟體功能。這次專案並沒有真正遠端除錯幾次,因為記錄了詳細的除錯日誌,所以大部分問題都能很快的定位。除錯日誌一般都包含了兩項內容:當前環境下的關鍵變數值及當前方法的資訊。


      五、錯誤處理和返回錯誤碼。
      首先,切忌把異常直接拋給呼叫者。因為這樣不論是對體驗還是定位錯誤都沒有任何益處,而是應該在後臺捕獲,並記錄詳細的日誌,然後定義一套全域性的錯誤碼,返回對應的錯誤碼給介面呼叫者。關於異常的捕獲應該在哪裡處理,個人覺得但應該不是最佳,最外層應該用try catch包裹,並記錄日誌,保證異常不會丟擲到呼叫方,其它位置如果有非託管資源的使用,應該捕獲,然後記錄日誌,釋放資源,並繼續把錯誤向上拋。


      六、介面文件。
      提到寫文件,程式設計師貌似天生反感,但是開發介面,不寫文件,似乎是不可能的,並且還要寫得規範,別人能看懂。介面文件寫得好,真的是件一勞永逸的事,寫一份好文件省出的時間要遠遠大於寫文件的時間,當然要做到及時更新,與程式同步。一般介面文件包含了功能、請求方式(GET/POST)、 地址、引數、返回值、請求示例、返回示例以及全域性的安全驗證方式、錯誤碼等。

相關推薦

APP資料介面開發一些經驗

      剛接到這樣的任務時,沒有感覺到任何壓力,不就是給移動端應用提供資料嗎?那邊發來引數,這邊處理資料,返回JSON。做網站開發時經常使用ajax請求後臺資料,不就是這麼回事嗎。於是,在確認完需求後就開始幹了,很快,進入聯調階段,這個時候各種問題來了,忙得不可開交。

APP地推的一些經驗

移動互 接下來 有一個 比較 家裏 入口 我們 負責人 時間 移動互聯網時代,app市場越來越擁擠,企業面臨的最大難題就是APP的推廣問題!然而,面對線上流量入口日益縮小,推廣費用的不斷增加的局面,企業通常會選擇推廣效果最明顯的地推作為其推廣的方式之一。那麽app地推都有哪

Spring Boot 整合Spring Data JPA 資料介面開發測試(二)

核心介面程式碼: 1.實體類 package com.weichai.SpringDataJpaQuery.entity; import java.io.Serializable; import javax.persistence.Entity; import jav

抖音APP資料介面加密演算法分析

抖音作為一款日活超過1億的優秀APP,其客戶端與服務端的通訊方式很值得APP開發者去研究和學習,為了保護其資料,客戶端請求資料的介面都進行了加密,未經過加密處理的url,請求的時候不會返回資料,這裡以最新的3.0版本為例,分析一下加密演算法。 https://

安卓App耗電量優化的一些經驗總結

1、準備工作 磨刀不誤砍柴工。開始優化工作之前,一定要確定“測試場景”和“測試用例” (1)應用後臺 ——滅屏 ——亮屏 (2)應用後臺 分析埋點資料 -> 找出高頻頁面 -> 頁面分類歸納 -> 總結出一系列場景 【備註】 <1>

Hybrid APP混合開發一些經驗和總結

後臺 機制 獲取 功能 前端 如果 導致 接口 編寫 寫在前面: 由於業務需要,接觸到一個Hybrid APP混合開發的項目。當時是第一次接觸混合開發,有一些經驗和總結,歡迎各位一起交流學習~ 1、混合開發概述 Hybrid App主要以JS+Native兩者

基於MVC4+EasyUI的Web開發框架經驗總結(10)--在Web介面上實現資料的匯入和匯出

資料的匯入匯出,在很多系統裡面都比較常見,這個匯入匯出的操作,在Winform裡面比較容易實現,我曾經在之前的一篇文章《Winform開發框架之通用資料匯入匯出操作》介紹了在Winform裡面的通用匯入匯出模組的設計和開發過程,但在Web上我們應該如何實現呢?本文主要介紹利用MVC4+EasyUI的特點,並結

記錄開發Nodejs c++ addon的一些經驗(一、技術棧)

c++編寫 fstream href ren http lan www. 記錄 ref Nodejs c++ addon 是用c++去編寫Nodejs的插件 技術棧: 1、node-gyp   一個用於把c++文件編譯成node可執行文件的庫 2、v8   google

讀《Android電視機(機頂盒)初次開發一些經驗分享》後的筆記

方便 實現 radi 麻煩 lamp 順時針 焦點控制 href ott 原文: http://blog.csdn.net/tanghongchang123/article/details/52982818 一、基本命令: 1、adb connect [ip] 2、 a

我個人對於 iOS 開發基於經驗一些總結與規劃【4年開發經歷】

離職 能力 實現 京東 騰訊雲 行業 有理 面試題 發展 前言: 18年快過去了一半,半年下來感覺自己還是很菜,突然想起之前和朋友聊天,朋友本身技術實力極強,業界認可度也較高。但是還是認為自己很菜。我認為這很大一部分是對於知識的敬畏心,作為程序員就需要不斷的涉獵新知識,學習

短視頻app源碼開發經驗分享——功能機制篇(上)

簡單 人工 轉化 2018年 完整 推薦 shadow 識別 後臺 繼直播平臺爆紅之後,短視頻APP也在2018年“重獲新生”,在快手短視頻低調運營的同時,今日頭條旗下的抖音APP,西瓜視頻等持續發力,目前抖音短視頻已成為國內“超好玩的短視頻APP”,隨後騰訊也布局短視頻市

AndroidStudio SDK開發APP開發混淆經驗整理

SDK層混淆 SDK開發者不能把你對開發者提供的介面進行混淆混淆     APP層混淆 程式中用到的所有第三方的庫都不能混淆 資料庫操作的對應類也不能混淆     出錯記錄 Error:Execution fail

阿里App支付服務端介面開發(含後臺非同步回撥,退款)

1.引入相關包檔案 maven匯入方式: <dependency> <groupId>com.alipay</groupId> <artifactId>sdk-java</artifactId> <version>

開發富文字編輯器的一些經驗教訓

此文已由作者劉詩川授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 最近我們的產品有一個需求是要在PC端做一個面向使用者的書評編輯器,讓使用者和編輯在蝸牛讀書上能方便快捷的編輯和產出一些優質的文章,它的主要難點就是富文字編輯器部分。 這雖然是個業務需求,但是做業務的同時也要兼顧技術,

PHP對接APP介面類,可返回json資料,xml資料

<?php /* * APP資料處理類 * 作 者:永樂開發 * 日 期:2017.7.31 * 郵 箱:[email protected] * 博 客:http://www.isu5.cn http://it.alipea.com */ class R

Hybrid APP混合模式應用開發經驗和總結

寫在前面: 由於業務需要,接觸到一個Hybrid APP混合開發的專案。當時是第一次接觸混合開發,有一些經驗和總結,歡迎各位一起交流學習~ 1、混合開發概述 Hybrid App主要以JS+Native兩者相互呼叫為主,從

關於App海外推廣的一些總結:需要重視的經驗or教訓

當前,我們似乎已經迎來了中國移動網際網路企業出海的最佳時期。 2016年,中國移動網際網路企業的全球化市場拓展,正由此前的個體性試探,轉變為集體性的”淘金運動”,這已成為大勢所趨。 但問題是,並不是所有的企業和產品都適合出海,海外的市場也一樣波詭雲譎,充滿危

利用神州靈雲apptrace抓取到的APP資料反向給做Jmeter介面測試

前提:準備一款手機APP,嵌入神州靈雲公司sdk,使其操作產生的資料傳送到神州靈雲apptrace平臺上;本文就以開源的月光茶人APP(ios)程式為例,講述如何用sdk採集到資料提供給jmeter做介面或壓力測試; 1,首先操作手機月光茶人app執行一個完整

開發時寫TestCase的一些經驗

今天修復完一個業務程式碼的 bug,手動測試沒有問題,但寫測試用例出錯,在對程式碼很自信的情況下(因為手動測試過了),我乾脆省略了這個步驟,然而偷懶的事情早晚會暴露出來:用 Git 提交到遠端時在 Code Review 那裡的系統整合測試老是失敗,檢視日誌檔

利用神州靈雲AppTrace抓取到的APP資料反向給做Jmeter介面測試(二)

用jmeter模擬登入月光茶人APP選購支付流程(或者大量併發,實現壓測效果) 現實中APP對登入都有限制,同一賬號只能同時登入一次,且手裡沒有多餘的賬號如何進行併發測試呢,這個時候只需單獨對登入http請求進行控制即可;其他請求操作可以放在一塊進行併發測試;