【轉載】 做者:曾健生,公衆號ID:appbackend前端
比目科技程序員
常常有開發者問:app和後端通信是用http協議仍是私有的協議?是用長鏈接仍是短鏈接?經過閱讀本文,幫你解除上面的疑問。web
(1)是用http協議仍是私有的協議?編程
在間諜電視劇中,常常能看到間諜們的書信都是用暗號的,就算書信被敵人截取了不怕,須要耗費必定的時間,敵人才能解開書信中的祕密。json
在電影<阿凡達>, 爲提高故事真實性,詹姆斯卡梅隆甚至找到語言學家,專爲納美人創造了一種本身的語言。咱們看這部電影的時候,根本聽不懂潘多拉星球上的納美外星人到底說什麼?納美語共有大約1000個單詞,全球可以掌握其語法的人只有創造這門語言的PaulFrommer教授一人,並且就算他本人也仍然在學習如何更流暢的說納美語。後端
若是間諜們使用的都是你們都懂的中文,敵人截取到書信,就能馬上知道里面的內容。api
若是潘多拉星球上的納美外星人說的是中文,那麼不少人一聽就知道他們是說啥。服務器
一樣的,app和後端的通信,能夠分爲用通用的語言通信,仍是用暗語通信兩種方式。websocket
通用的語言有不少種,例如英語和中文,在網絡的通信中,通用的協議有不少,其中http是被最普遍使用的。若是是私有的協議,那就只能本身設計了。網絡
用http是最方便的,若是是私有協議,包含協議的封裝和拆解,工做量大,前端程序員和後端程序員都要增長不少額外的工做量。並且私有協議對程序員的要求高,不適合從web網站轉過來的開發者。除非是手遊,否則用http就行了。
(2)app和服務器通信使用長鏈接仍是短鏈接?
假設如今經過手機撥打另一我的的手機,手機通話費用很是便宜(甚至能夠忽略),可是有兩個注意的地方:
1。一臺手機同一時間只能接聽一個電話。
2。一臺手機接聽電話前很是麻煩,要撥號啦,要等接聽,這須要一段時間。
app和服務器通信使用長鏈接仍是短鏈接這個問題,能夠等同於上面電話模型,是一直保持着通話,仍是有須要時才撥號通話這個問題?
當app和服務器通信使用長鏈接,就至關於一直保持着通話,服務器能保持的通信數量有限,若是通信滿了,那其餘app就不能和服務端通信了。這種通信方式,多數是使用socket或websocket鏈接長時間鏈接,對程序員的要求比較高,開發比較困難,除了手遊和聊天推送服務外,不建議使用。
當app和服務器通信使用短鏈接,就至關於須要時才撥號通話。這種通信方式,配合http協議,是如今主流的通信方式,開發效率高,有大量的第三方資源,使用很是普遍,推薦使用這種方式。
(3)app和後端是怎麼通信的?
相信你們都用過銀行的櫃員機(ATM)的查詢餘額,轉賬,取款等操做。
當在櫃員機取款的時候,咱們輸入要取款的金額,隔一會錢就出來了,若是由於有什麼問題不能取款(例如超過取款金額的限制),屏幕上也會顯示出錯誤的信息。
在整個過程當中,咱們只要輸入金額,得到結果(取款成功或不成功),就好了,至於櫃員機內部是怎麼處理,咱們不須要理會。
櫃員機這種把內部的處理遮蔽的作法極大方便了咱們的使用。
一樣的,在後端,也只提供了一系列的功能給app使用,這系列的功能以api的形式提供。
api的定義:API(ApplicationProgramming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工做機制的細節。
當app調用api的時候,只須要明確下面3點:
1。這個api是幹啥的(櫃員機例子中,是取款功能,仍是查詢餘額,仍是轉帳)
2。知道要輸入什麼(櫃員機例子中,取款要輸入金錢)
3。知道結果是什麼(櫃員機例子中,取款是成功仍是失敗)
至於api內部是怎麼處理的,app根本無需理會。
api,通常是以http的形式調用的,經過http傳入參數,返回結果。其中,結果通常是以json格式返回的,由於json格式被衆多計算機語言支持,並且省流量。