淺析前后端數(shù)據(jù)交互

13 評論 27231 瀏覽 235 收藏 9 分鐘

想要做好互聯(lián)網(wǎng)產(chǎn)品的設計,就要對一些基本的技術實現(xiàn)原理有所了解,本文將對互聯(lián)網(wǎng)產(chǎn)品的前后臺數(shù)據(jù)交互做一個小的總結。(技術大神輕噴)

HTTP協(xié)議

前后臺交互的協(xié)議不只有HTTP協(xié)議,本文僅以HTTP協(xié)議為例。

HTTP協(xié)議即超文本傳輸協(xié)議,是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議。HTTP是一個客戶端和服務器端請求和應答的標準。

HTTP協(xié)議簡單(屬于TCP協(xié)議族),使得HTTP服務器的程序規(guī)模小,因而通信速度很快??蛻粝蚍掌髡埱蠓諘r,只需傳送請求方法和路徑。而且,HTTP允許傳輸任意類型的數(shù)據(jù)對象。

關于HTTP協(xié)議只做簡單介紹,知道互聯(lián)網(wǎng)產(chǎn)品的前后端數(shù)據(jù)交互是通過一個通訊協(xié)議(不僅限于HTTP)完成的即可。

接口

在互聯(lián)網(wǎng)領域里面,這個詞在不同場景下都會出現(xiàn)?,經(jīng)常聽到工程師說“ 讓后臺給我提供一個接口,我直接調用這個接口 ”“ 這里你設計一個接口,我來實現(xiàn) ”,接口就是提供具體能力的一個標準和抽象,是一些預先定義的函數(shù),包括接口地址、傳入?yún)?shù)和返回參數(shù)和數(shù)據(jù)。可以簡單理解為,當需要訪問某些數(shù)據(jù),正常狀態(tài)下傳入合格參數(shù),會收到該數(shù)據(jù)范圍內的返回參數(shù)。前后臺的交互基本都是通過程序接口實現(xiàn)的。

數(shù)據(jù)交互的過程可簡單理解為,前臺想要獲得某些數(shù)據(jù),將傳入?yún)?shù)通過URL接口地址,傳遞給服務器,服務器根據(jù)傳入的參數(shù)了解到前臺要獲得什么數(shù)據(jù),去數(shù)據(jù)庫查詢獲取數(shù)據(jù),然后將所需數(shù)據(jù)返回給前臺,前臺拿到數(shù)據(jù)做相應的頁面展示。

JSON

JSON(JavaScript?Object Notation,) 是一種輕量級的數(shù)據(jù)交換格式,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結構使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于閱讀和編寫,同時也易于機器解析和生成,并有效地提升網(wǎng)絡傳輸效率。

前后端交互時傳遞數(shù)據(jù)的格式,就是JSON格式的,當然也有XML格式。JSON數(shù)據(jù)格式很好理解,舉個例子:

{
“姓名”:”流年”

“性別”:”男”

“興趣愛好”:”聽音樂”

}

這就是 JSON鍵/值對。

實例解析1

這是一個APP的頁面,前端會把它分為3個部分去分別請求數(shù)據(jù),即:

  1. banner部分
  2. 課程種類部分
  3. 熱門好課部分

(1)banner部分

前臺需要今天產(chǎn)品的最新圖片地址。URL中的參數(shù)主要是根據(jù)后臺需要,如果后臺需要前端傳遞一個時間戳才能夠查詢到具體的圖片信息,那么前端在數(shù)據(jù)請求時請求參數(shù)就應該包含時間的參數(shù),代碼如下:

前臺部分:

#前端得到的URL
URL:http://www.heiheihei.com/GetPicture.php
#需要傳遞給后端帶參數(shù)的URL
或者http://www.heiheihei.com/GetPicture.php?time=”2017-11-23 00:00:00″

代碼解析:

  1. http: #協(xié)議頭,跟后臺交互需要基于HTTP協(xié)議。
  2. www.heiheihei.com ?#域名也叫主機名(heiheihei是我亂起的)。
  3. /GetPicture.php ?#路徑,也就是能給前臺數(shù)據(jù)的路徑。
  4. ?time=”2017-11-23 00:00:00″ ?#參數(shù),帶著這個參數(shù)給服務器,服務器就會把2017年11月23日零時0分0秒的banner查詢到并且返給前端。

后端部分:

select “輪播圖片” from picture where time = “2017-11-23 00:00:00”

代碼解析:

數(shù)據(jù)庫查詢語句,去數(shù)據(jù)庫里面去查找相應的數(shù)據(jù)表,查詢條件就是前端傳遞過來的URL參數(shù)time。

(2)課程種類部分

此部分包含兩部分內容,即圖片和標題。這些內容在后臺數(shù)據(jù)庫表中,后臺只需要設計個URL給前端,讓前端直接發(fā)訪問就可以了:

URL:http://www.heiheihei.com/LessonType.php

(3)熱門好課部分

此部分也是包含圖片和標題。前端把這些信息告知后臺,后臺看到這些信息后,會去相對應的數(shù)據(jù)庫去查詢,如果這些數(shù)據(jù)后臺很容易獲取到,會直接給個URL給前端。否則就需要前端通過URL來傳遞一些參數(shù)。比如:

#前端得到的URL
URL:http://www.heiheihei.com/goodLesson.php
#需要傳遞給后端帶參數(shù)的URL
或者http://www.heiheihei.com/goodLesson.php?time=”2017-11-23 00:00:00&clases=””

總結來說:所有前端請求的URL后面的參數(shù),都是輔助后臺數(shù)據(jù)查詢的。如果不需要參數(shù),那么后臺就會直接給個URL給前端。

實例解析2

這是一個網(wǎng)站的登錄功能,我們通過ajax(可以在不重新加載整個頁面的情況下,與服務器交換數(shù)據(jù)并更新部分網(wǎng)頁)加載服務器數(shù)據(jù)的過程再來體驗一下前后臺數(shù)據(jù)交互的過程。

我們先給登錄名和登錄密碼的文本框起兩個名字,即UserName,PassWord。

前端代碼(解析)如下:

$.ajax({

‘url’:’login.php’, ?#和之前的URL一樣,前端把參數(shù)傳遞到什么位置

‘data’:{“username”:$(‘#UserName’).val(),”PassWord”:$(‘#password’).val(),}, ?#前端傳遞給后端的數(shù)據(jù)(用戶名和密碼)

‘success’:function(data){

} ??#服務器返回數(shù)據(jù)成功的時候,前端需要如何操作(data中存的就是服務器返回的數(shù)據(jù))

‘type’:’post’ ?#數(shù)據(jù)傳輸?shù)姆椒?/strong>

‘dataType’:’json’ ?#傳遞數(shù)據(jù)的類型,JSON

});

我們不用關心function(data)函數(shù)中具體的代碼,無非就是:前端頁面展示用戶的用戶名、頁面狀態(tài)變?yōu)橐训卿?、展示用戶相關數(shù)據(jù)等。

后端代碼過于復雜,我就不展示了,總之后端要做的處理就是:拿到前端傳遞過來的數(shù)據(jù)(用戶名和密碼)和數(shù)據(jù)庫中用戶信息做比對,如果一致則返回給前臺一個狀態(tài),并且返回用戶的相關數(shù)據(jù)(昵稱、個人信息、購物車信息、收藏的商品等等),這些數(shù)據(jù)同樣是以JSON的形式傳回給前端。如果用戶名或密碼不一致,也返回給前端一個狀態(tài)。前端根據(jù)得到的狀態(tài)做出頁面的相應效果:登錄按鈕變?yōu)橥顺?、顯示用戶昵稱、顯示購物車信息、顯示收藏信息、登錄框隱藏等,如果用戶名密碼不匹配則顯示相應的提示信息。

以上就是網(wǎng)站通過ajax技術完成的前后端數(shù)據(jù)交互過程。

你學會了嗎?

 

作者:流年,互聯(lián)網(wǎng)產(chǎn)品設計師,4年互聯(lián)網(wǎng)產(chǎn)品設計經(jīng)驗。

本文由 @流年 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉載。

更多精彩內容,請關注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 對我?guī)椭艽?/p>

    回復
  2. 不錯

    回復
  3. 學習了

    來自北京 回復
  4. 寫的很好,點個贊。建議把名稱統(tǒng)一規(guī)范一下,前臺,前端,后臺,后端其實是不同的概念,文中有點混淆了。你文章里講的是前端,后端的交互,其實是網(wǎng)站表現(xiàn)層與計算層、數(shù)據(jù)層的交互。前端是指表現(xiàn)層,就是我們常說的html,css,js,后端指的是計算層,數(shù)據(jù)層。

    前臺,后臺是不一樣的概念。前臺指的是面向用戶的界面和系統(tǒng),后臺指的是面向管理員的界面和系統(tǒng)。比如,天貓商城就有前臺,后臺之分,前臺是我們普通消費者看到的網(wǎng)購頁面,后臺是阿里巴巴天貓團隊對天貓商城進行管理的后臺系統(tǒng),可能涉及到用戶管理,商品/品類管理,dns解析,流量調度,流量監(jiān)控及報警等。前臺,后臺又分別都會有前端和后端。

    來自福建 回復
    1. 來自廣東 回復
    2. 6

      來自廣東 回復
    3. 贊!

      來自菲律賓 回復
    4. 感謝,終于理清了前端/后端、前臺/后臺關系

      來自北京 回復
  5. 灰常感謝 受益匪淺

    來自上海 回復
  6. 不錯不錯,很受用

    回復
  7. 感謝分享

    來自北京 回復
  8. 講的挺好的,通俗易懂,點個贊,補充2點:
    1.后臺返回給前端的除了數(shù)據(jù)通常還會帶一個狀態(tài)碼(200,500)
    2.照片通常是前端給后端發(fā)個用戶id(其他參數(shù)也可以,如:時間),用這個用戶id在數(shù)據(jù)庫可以查到這個用戶圖片在服務器的相對路徑,而不是直接通過id去查找圖片
    不過還是很感謝作者分享,謝謝哈

    來自江蘇 回復
    1. 非常感謝您的補充!

      來自天津 回復