網(wǎng)絡(luò)API接口設(shè)計

from------------------jackfrued

網(wǎng)絡(luò)API接口設(shè)計

手機App以及使用了Ajax技術(shù)或做了前后端分離的頁面都需要通過網(wǎng)絡(luò)API(Application Programming Interface)和后臺進行交互,所謂API,指的應(yīng)用程序的編程接口;而網(wǎng)絡(luò)API通暢指的是基于HTTP或HTTPS協(xié)議的一個URL(統(tǒng)一資源定位符)幕庐,通過這個URL我們可以讓服務(wù)器對某個資源進行操作并返回操作的結(jié)果闸餐〈衙螅基于HTTP(S)協(xié)議最大的好處就在于訪問起來非常的簡單方便,而且沒有編程語言和應(yīng)用環(huán)境上的差別械哟。

設(shè)計原則

關(guān)鍵問題

為移動端或者PC端設(shè)計網(wǎng)絡(luò)API接口一個非常重要的原則是:根據(jù)業(yè)務(wù)實體而不是用戶界面或操作來設(shè)計恶复。如果API接口的設(shè)計是根據(jù)用戶的操作或者界面上的功能設(shè)置來設(shè)計怜森,隨著需求的變更,用戶界面也會進行調(diào)整寂玲,需要的數(shù)據(jù)也在發(fā)生變化,那么后端開發(fā)者就要不停的調(diào)整API梗摇,或者給一個API設(shè)計出多個版本拓哟,這些都會使項目的開發(fā)和維護成本增加。

下面是某個網(wǎng)站開放API的接口伶授,可以看出API的設(shè)計是圍繞業(yè)務(wù)實體來進行的断序,而且都做到了“見名知意”。

評論
comments/show 獲取某條微博的評論列表
comments/by_me 自己的評論列表
comments/to_me 收到的評論列表
comments/mentions @了自己的評論列表
comments/create 創(chuàng)建一條評論
comments/destroy 刪除一條評論
comments/reply 回復(fù)一條評論

注意:上面的API接口并不是REST風(fēng)格的糜烹,關(guān)于REST的知識违诗,可以閱讀阮一峰老師的《理解RESTful架構(gòu)》以及《RESTful API設(shè)計指南》

API接口返回的數(shù)據(jù)通常都是JSON或XML格式疮蹦,我們這里不討論后者诸迟。對于JSON格式的數(shù)據(jù),我們需要做到不要返回null這的值愕乎,因為這樣的值一旦處置失當(dāng)阵苇,會給移動端的開發(fā)帶來麻煩(移動端可能使用強類型語言)。要解決這個問題可以從源頭入手感论,在設(shè)計數(shù)據(jù)庫的時候绅项,盡量給每個字段都加上“not null”約束或者設(shè)置合理的默認值約束。

其他問題

  1. 更新提示問題:設(shè)計一個每次使用系統(tǒng)首先要訪問的API比肄,該API會向移動端返回系統(tǒng)更新的相關(guān)信息快耿,這樣就可以提升用戶更新App了。
  2. 版本升級問題:API版本升級時應(yīng)該考慮對低版本的兼容芳绩,同時要讓新版本和舊版本都能夠被訪問掀亥,可以在URL中包含版本信息或者在將版本號放在HTTP(S)協(xié)議頭部,關(guān)于這個問題有很多的爭論妥色,有興趣的可以看看stack overflow上面對這個問題的討論铺浇。
  3. 圖片尺寸問題:移動端對于一張圖片可能需要不同的尺寸,可以在獲取圖片時傳入尺寸參數(shù)并獲取對應(yīng)的資源;更好的做法是直接使用云存儲或CDN(直接提供了圖片縮放的功能)鳍侣,這樣可以加速對資源的訪問丁稀。

文檔撰寫

下面以設(shè)計評論接口為例,簡單說明接口文檔應(yīng)該如何撰寫倚聚。

評論接口

全局返回狀態(tài)碼

返回碼 返回信息 說明
10000 獲取評論成功
10001 創(chuàng)建評論成功
10002 無法創(chuàng)建評論 創(chuàng)建評論時因違反審核機制而無法創(chuàng)建
10003 評論已被刪除 查看評論時評論因不和諧因素已被刪除
10004 …… ……
  1. GET /comments/{article-id}

    開發(fā)者:王大錘

    最后更新時間:2018年8月10日

    標(biāo)簽:v 1.0

    接口說明:獲取指定文章的所有評論

    使用幫助:默認返回20條數(shù)據(jù)线衫,需要在請求頭中設(shè)置身份標(biāo)識(key)

    請求參數(shù):

    參數(shù)名 類型 是否必填 參數(shù)位置 說明
    page 整數(shù) 查詢參數(shù) 頁碼,默認值1
    size 整數(shù) 查詢參數(shù) 每次獲取評論數(shù)量(10~100)惑折,默認值20
    key 字符串 請求頭 用戶的身份標(biāo)識

    響應(yīng)信息:

    {
        "code": 10000,
        "message": "獲取評論成功",
        "page": 1,
        "size": 10,
        "totalPage": 35,
        "contents": [
            {
                "userId": 1700095,
                "nickname": "王大錘",
                "pubDate": "2018年7月31日",
                "content": "小編是不是有病呀",
                /* ... */
            },
            {
             "userId", 1995322,
                "nickname": "白元芳",
                "pubDate": "2018年8月2日",
                "content": "樓上說得好",
                /* ... */
            }
        ]
        /* ... */
    }
    
  2. POST /comments/{article-id}

    開發(fā)者:王大錘

    最后更新時間:2018年8月10日

    標(biāo)簽:v 1.0

    接口說明:為指定的文章創(chuàng)建評論

    使用幫助:暫無

    請求參數(shù):

    參數(shù)名 類型 是否必填 參數(shù)位置 說明
    userId 字符串 消息體 用戶ID
    key 字符串 請求頭 用戶的令牌
    content 字符串 消息體 評論的內(nèi)容

    響應(yīng)信息:

    {
        "code": 10001,
        "message": "創(chuàng)建評論成功",
        "comment": {
            "pubDate": "2018年7月31日",
            "content": "小編是不是有病呀"
            /* ... */
        }
        /* ... */
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末授账,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惨驶,更是在濱河造成了極大的恐慌白热,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粗卜,死亡現(xiàn)場離奇詭異屋确,居然都是意外死亡,警方通過查閱死者的電腦和手機续扔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門攻臀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纱昧,你說我怎么就攤上這事刨啸。” “怎么了识脆?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵设联,是天一觀的道長。 經(jīng)常有香客問我灼捂,道長仑荐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任纵东,我火速辦了婚禮粘招,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偎球。我一直安慰自己洒扎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布衰絮。 她就那樣靜靜地躺著袍冷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猫牡。 梳的紋絲不亂的頭發(fā)上胡诗,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音,去河邊找鬼煌恢。 笑死骇陈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瑰抵。 我是一名探鬼主播你雌,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼二汛!你這毒婦竟也來了婿崭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤肴颊,失蹤者是張志新(化名)和其女友劉穎氓栈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婿着,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡授瘦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了祟身。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奥务。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡物独,死狀恐怖袜硫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挡篓,我是刑警寧澤婉陷,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站官研,受9級特大地震影響秽澳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戏羽,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一担神、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧始花,春花似錦妄讯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浇垦,卻和暖如春炕置,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工朴摊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留默垄,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓仍劈,卻偏偏與公主長得像厕倍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贩疙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353