1. 程式人生 > >移動App的REST API設計實踐

移動App的REST API設計實踐

通訊協議

一些只是對伺服器資料進行CRUD操作的App,通常採用HTTP協議,為了安全也可以採用HTTPS協議。IM軟體可以選擇使用XMPP協議。

其他一些特有場景的App可能基於Socket自定義協議。

SOCKET是實現傳輸層協議的一種程式設計API,可以是TCP,也可以是UDP。

TCP --- 傳輸控制協議,提供的是面向連線、可靠的位元組流服務。TCP提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。

UDP --- 使用者資料報協議,是一個無連線的簡單的面向資料報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的資料報傳送出去,但是並不能保證它們能到達目的地。

在需要保證需要傳輸資料到對方的時候應該選擇TCP協議,比如檔案傳輸。而像線上視訊播放這些,可以不用保證資料100%被接受的,可以用UDP,因為丟失一幀畫面資料沒什麼影響,而且用UDP速度會更快。

最近也有聽說用WebSocket做通訊的,可以在Web端和App端共用一個介面。

資料格式

比較通用的資料互動格式是JSON和XML。在現在,JSON格式使用的更為廣泛,因為結構簡單而且解析方便。

iOS5之後的SDK提供了NSJSONSerialization類解析JSON,而Android SDK本身就自帶了org.json 的相關包來提供JSON解析的功能。如果在Android裡面對JSON的解析或者序列化效能有要求,可以考慮使用android.utils包裡面的JsonReader 和  JsonWriter類。它們是用流式解析的方式,不過使用更加繁瑣。也可以考慮使用Google的Gson,阿里巴巴的fastjson,以及Jackson這些開源JSON處理的庫,它們提供了更多的功能,也有更好的效能。

XML設計目標是“Extensible Markup Language”,可擴充套件的標記語言,而不是JSON的只是作為一個數據序列化的語言。XML格式也有自己的優點,比如你可以用通用的XPath查詢特定的資料而不用用一個個巢狀的迴圈或者分支語句從一個複雜的資料中拿到一個特定的值。

REST架構的API設計

本文其餘內容基本都是在談REST架構的API

一些感想:

  1. API請求中應該加入API版本號,比如在URL中加入版本號,如
    https://api.example.com/v1/, 這樣當API升級的或者改動的時候,可以保留舊的API伺服器,把新的API伺服器mount到https://api.example.com/v2/
    上,這樣使用舊的API的App也不會出現問題
  2. API返回的資料量小的時候,沒太多必要進行zip壓縮。API返回資料大的時候,要考慮API設計是否適當。
    4.寫API要方便使用這些API開發的人員測試,比如寫好文件,使用https://helloreverb.com/developers/swagger  這樣的工具生成除錯頁面。

效能

要避免寫API Server的時候出現一些低階的錯誤,比如資料庫查詢用了N+1 Query。

其他效能的問題其實和Web開發大同小異,無非是橫向和縱向的幾種不同方式的擴充套件。

安全性和使用者認證

如果使用第三方的API,通常採用Oauth協議或者SSO登入。

如果是自己開發,因為自己寫HTTP請求不會和瀏覽器傳送的時候自動維護一個Cookie,所以可以自己手動維護一個Token,代替Cookie的作用來進行使用者驗證。

對於Token等關鍵的資料,不要明文儲存在裝置本地,可以用iOS提供的Keychain這樣的機制進行加密儲存。

也有用Xauth協議的,類似Oauth的簡化版。

安全方便,和Web開發一樣,不要相信使用者的任何資料,伺服器端都應該做對應的認證。

此外,如果對一些資料有較高的安全需求,那麼應該避免把祕密的資料用明文寫在程式碼裡,比如一些第三方Acess Key,可以在啟動的時候動態請求,否則很容易被反編譯獲取。

Android一定要做好反編譯工作。

學習

此外,可以用Charles這些抓包工具,學習和參考別人的App與伺服器的資料互動內容,Charles甚至可以在你的開發的移動裝置上安裝自簽名證書,採用類似中間人攻擊的方式來獲取App採用HTTPS協議互動的資料的明文。

如果你不想寫API

你可以使用Parse.com 或者 AVOSCloud 這些BASS平臺提供的服務。這些服務很適合一些不需要在伺服器端提供複雜操作,以及前期的原型開發。

相關推薦

移動App的REST API設計實踐

通訊協議一些只是對伺服器資料進行CRUD操作的App,通常採用HTTP協議,為了安全也可以採用HTTPS協議。IM軟體可以選擇使用XMPP協議。其他一些特有場景的App可能基於Socket自定義協議。SOCKET是實現傳輸層協議的一種程式設計API,可以是TCP,也可以是UD

RESTful API 設計最佳實踐

並不是 要求 關於 bin 是我 最好 實用 link keep 數據模型已經穩定,接下來你可能需要為web(網站)應用創建一個公開的API(應用程序編程接口)。需要認識到這樣一個問題:一旦API發布後,就很難對它做很大的改動並且保持像先前一樣的正確性。現在,網絡上有很

11. RESTful API 設計最佳實踐

API 設計規範 API 設計規範 URI 的設計 過濾、排序和搜尋等資訊 響應和錯誤處理 版本控制(delete) 認證 快取 未完待續… 其他規範可參考

RESTful API 設計指南——最佳實踐

RESTful API 設計指南——最佳實踐 Facebook、谷歌、Github、Netflix 和幾個其他的科技巨頭已經允許開發者和其產品通過 API 呼叫他們的資料,併為他們提供平臺。即使你不是寫 API 的專業人士,擁有精美的 API 也對你的應用程式有好處。 關於設計 API 的最

API設計的十大最差和五大最佳實踐

那麼作為開發者,除了要學會呼叫API外,是否想過設計自己的API呢?這不,國外媒體給大家總結了10條最差API實踐與開發API的五個最佳實踐,希望各位能在以後的開發道路上少走一些彎路。 十大最差實踐 錯誤處理不完善或者比較差 Rest API忽視HTTP規則 暴露原始底層資料模型 安全複雜性 意

阿里研究員谷樸:API 設計最佳實踐的思考

API是軟體系統的核心,而軟體系統的複雜度Complexity是大規模軟體系統能否成功最重要的因素。但複雜度Complexity並非某一個單獨的問題能完全敗壞的,而是在系統設計尤其是API設計層面很多很多小的設計考量一點點疊加起來的(也即John Ousterhout老爺子說的Complexity is in

移動APP測試用例設計實踐經驗分享

一、前言雜談 在聊移動APP測試用例設計之前,我請大家先思考如下2個問題: 第一,我們為什麼要做好測試用例設計?——why? 第二,好的測試用例設計有什麼共性? ——what? 深入思考這2個問題的答案是一件很有意義的事情,作為移動網際網路時代的產品質量守衛軍,我們必須提升自己的測試設計能力,必須清楚的知道要

[轉] 阿里研究員谷樸:API 設計最佳實踐的思考

API是軟體系統的核心,而軟體系統的複雜度Complexity是大規模軟體系統能否成功最重要的因素。但複雜度Complexity並非某一個單獨的問題能完全敗壞的,而是在系統設計尤其是API設計層面很多很多小的設計考量一點點疊加起來的(也即John Ousterhout老爺子說的Complexity is in

今日頭條移動 APP 廣告啟用資料API對接實踐

作為最火的新聞app,今日頭條有這很大的活躍使用者群和日訪問量。大流量決定了今日頭條會位商品做廣告。 1.如下為今日頭條的廣告收費方案(來自官方開發文件): 啟用數是 APP 廣告主衡量轉化效果的重要指標之一,為滿 今日頭條(以下簡稱頭條)廣告主 對廣告效果的監測需求,本文

RESTful規範Api最佳設計實踐

RESTful是目前比較流行的介面路徑設計規範,基於HTTP,一般使用JSON方式定義,通過不同HttpMethod來定義對應介面

Uber的API生命週期管理平臺邊緣閘道器(Edge Gateway)的設計實踐

設計邊緣閘道器(Edge Gateway),一個高可用和高可擴充套件的自助服務閘道器,用於配置、管理和監控 Uber 每個業務領域的 API。 Uber 的 API 閘道器的演進 2014 年 10 月,優步開始了規模之旅,最終將成為該公司最令人印象深刻的增長階段之一。隨著時間的推移,我們每個月都在以非線性方

RESTful API 設計指南

head 簡單 option eat set 取出 tro 其他 first   網絡應用程序,分為前端和後端兩個部分。當前的發展趨勢,就是前端設備層出不窮(手機、平板、桌面電腦、其他專用設備……)。   因此,必須有一種統一的機制,方便不同的前端設備與後端進行通信。這

API設計規範 ----Restful

creat cif created 排序 href use 服務 如果 pat    Restful API設計指南 接下來我將介紹RESTful API的設計細節,探討如何設計一套合理、好用的API 一、協議 API與用戶的通信協議,總是使用HTTPs協議。

Restful API設計

rfc mage erro art 狀態 存在 asc tar 區分 理解RESTful架構 越來越多的人開始意識到,網站即軟件,而且是一種新型的軟件。 這種"互聯網軟件"采用客戶端/服務器模式,建立在分布式體系上,通過互聯網通信,具有高延時(high latency

loadrunner提高篇-場景設計實踐

start ref 由於 www 對話 彈出 場景 功能 fff 集合點設置 一、為什麽要進行集合點設置?   因為在測試過程中,並不能保證所有的Vuser都在同一時刻進行操作,這樣就達不到並發

API開發實踐(四) 返回HTML

acea 指定 win filename static box 拖動地圖 ive let 分為兩個部分:生成HTML和返回HTML 生成HTML: 最終想要的時顯示地圖,不可避免的使用高德地圖的API。 【地圖API】地址錄入時如何獲得準確的經緯度?淘寶收貨地址詳解 改變幾

JavaScript 的 API 設計原則

rst 執行 creat 錯誤 htm ora 大小 閱讀 fontsize 前言 本篇博文來自一次公司內部的前端分享,從多個方面討論了在設計接口時的原則,總共包含了七個大塊。系鹵煮自己總結的一些經驗教訓。同時也參考了一些文章,地址會在後面貼出來。很難做到詳盡充實,如果

api-gateway實踐(3)Linux環境啟動

iad system 啟動mysql lin edi sql 查看 redis mysq 1、啟動、查看mysql 1.1、啟動mysql systemctl status mariadb 1.2、查看mysql systemctl status m

XMU C語言程序設計實踐(3)

col stdio.h 元素 ans hide wap 出口 b- 二維 問題描述: 以一個n的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙,設計一個程序,對任意設定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結論。 對於本問題需用棧實現“窮舉求解”算法,即:

api-gateway實踐(4)網關服務集成驗證

pig server 服務集 blank 網關 ces ron ken localhost 原始服務地址: http://10.110.17.20:7070/spring-oauth-server/m/user_info?access_token=8d671613-da31