寫給產品經理們的技術分享——后端篇
在上一篇文章中,筆者分享了web前端的相關知識與應用(寫給產品經理的技術分享–前端篇),這篇文章是對上一篇文章的補充,主要分享后端、以及前后端交互相關知識及其在產品工作中的應用。
一、簡單談一下API
1. API的種類以及定義
API這個詞,我想所有的產品經理都聽過無數次。
上一篇分享中,我們提及了一種用于前后端通信的API,其作用方式之一是:前端隨請求將要傳遞的數據打包并發送到服務器,服務器執行相應處理程序,并將程序的輸出發回前端。
前端通常使用這種方式從服務器請求最新數據,因為這些工作涉及到前后端配合,因而在實際工作中還需要產出相應的API文檔(甚至于在一些公司是由產品經理去輸出API文檔),指明隨請求發送的參數、請求方法,傳回的參數等。
除了這種用于前后端通信的API,還有很多其他類型的API,例如:我們調用支付寶、微信等第三方應用的API,從而為自己的應用增加支付、分享等功能。
在《headfirst python》這本書中,通過一個具體的例子,更加透徹的講解了API的由來:
在編程中,通過定義函數,可以減少重復代碼;將函數保存在一個腳本文件中,使之轉化為模塊;將模塊放入文件夾,同時增加元數據文件,就可以將模塊打包準備發布;在web上發布你的文件(也就是API),以供他人下載、安裝和使用,其他開發者可以使用API所提供的函數為產品增加功能。
為了讓更多人以不同方式更加靈活的調用API,我們在定義函數時可以使用可選參數(也就是為參數提供默認值),通過使用參數控制函數的行為與表現。
2. 在產品工作中的應用
即便不需要寫API文檔,產品經理對于API及其調用方式也需要有基本的認知,進行考慮并體現在產品設計方案或者PRD中。
以調用QQ分享接口為例進行說明:我們需要查看QQ開放平臺API調用說明,明確各種API調用的效果以最終確定要選取的API,以及該API需要自定義哪些參數。
下圖是我的PRD的截圖,指明了調用的API、調用效果以及需要自定義的參數值。
二、web開發
1. web應用如何工作
在上一篇講前后端通信的時候,已經初步提及了web應用的工作方式。
這里再大概陳述一下:
- 用戶在瀏覽器執行操作,比如輸入URL或者點擊一個跳轉鏈接。
- 瀏覽器將用戶動作轉換為一個web請求,通過互聯網發送到服務器。
- 服務器收到請求并進行處理。在這里,如果請求的是靜態內容,服務器會找到相應資源并把它作為響應返回給瀏覽器;如果請求的是動態內容(也就是需要運行程序才能輸出),那么服務器會找到并運行相應服務端程序,并將程序的輸出作為響應發給瀏覽器。這個生成動態內容的過程稱為通用網關接口(CGI),符合這個標準的服務端程序稱之為CGI腳本。
- 瀏覽器接收到web響應,通過改變DOM將之顯示在用戶的屏幕上。
2. 采用MVC設計web應用
MVC即模型-視圖-控制器(model-view-controller),這是一種常用的開發模式,有助于將代碼分解為易于管理、維護、擴展的功能模塊。
其中:
- 模型(model):用于封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法;
- 視圖(view):代碼提供直接與用戶交互的界面;
- 控制器(controller):代碼起到組織協調作用,將模型代碼和視圖代碼粘合起來,用于處理響應,控制應用程序的流程。
在互聯網早期,后端做了絕大部份工作,也就是模型、視圖、控制器代碼都由后端完成。
后端會建立數據模型,通過視圖代碼對HTML標記進行拼接,通過控制器代碼將模型數據填充到頁面視圖中并打印出來,這些輸出作為響應發回瀏覽器,瀏覽器再將頁面顯示出來。
這種模式的缺點在于:每次請求都要返回一個新頁面,這會降低瀏覽器的響應性;另外,許多前端頁面存在大量重復代碼,但是還要一遍一遍重復生成。
而現在,這一情況已經改變,視圖代碼和部分控制器代碼已經運行在前端,模型和部分控制器代碼則運行在后端。
在這種模式下,后端不再需要每次都返回一個完整頁面,只需傳送數據(通常為JSON格式);前端定義好頁面樣式,從服務端獲取數據并根據業務邏輯填充到頁面中。這可以提高頁面的響應速度,并且高效利用了不同頁面的重復代碼。
舉個例子:比如我們的網站有一個這樣的頁面,用戶輸入某一個歌手,我們的網站就為其展示該歌手的所有歌曲名。那么前后端分別需要編寫哪些代碼模塊呢?
前端需要編寫視圖(View)相關代碼,提供一個表單頁面讓用戶輸入歌手名;前端還需要編寫一部分控制器(controller)代碼,用于創建請求,隨請求將用戶的輸入以鍵值對的形式(例如 singer:“周杰倫”)發送到服務端,另外還需要編寫數據到達時的處理程序,在服務端數據到達時,對歌曲數據進行處理并以一定的結構增加到頁面中。
后端需要有一個數據模型(model),該模型以一定的結構存儲了許多歌手及其歌曲數據,還定義了獲取業務所需數據的方法或者說函數(在這個例子中就是通過歌手的名字,獲取該歌手的所有歌曲);后端還需要有一個控制層(controller),用于處理前端發來的請求并進行響應,在這里就需要獲取用戶輸入的歌手名(同樣是使用鍵獲取對應的值),調用數據模型及相應函數,并將歌手名傳入函數。該函數會獲取模型數據并進行處理,最終輸出該歌手對應的歌曲列表,作為響應發回前端。
3. 在產品工作中的應用
通過以上的例子,我們就可以看出:前后端在軟件開發中角色的分工與配合方式,知道了目前前后端的分工原則后,我們在和前后端的溝通中就應該相應有所側重。
著重像前端展示頁面的結構、樣式、交互,指明頁面數據來源;著重向后端展示,哪些數據來源于后端,這些數據的計算規則(如上文所言,復雜的數據邏輯運算一般發生在服務端),和現有數據的關聯等。
了解前后端的分工不僅可以幫助我們更好的推動產品方案落地,還有助于在出現bug時,更加快速定位到問題來源與對應開發人員。
在這里還要強調一下:無論是“模型-視圖-控制器”這一開發模式,還是上述的前后端的分工方式,都不是唯一正確答案,這種劃分也不是非黑即白的。我們要明確其間的區別,但更要知道其中的聯系。
三、關于數據庫
1. 簡介
前面已經提到了數據在前后端之間的傳遞,在上一篇講本地存儲的時候也提及了可以使用local storage(本地存儲)、session storage(會話存儲)將數據存儲在瀏覽器本地。但是,絕大多數用戶數據、內容信息是存儲在服務端的數據庫中。
數據庫的類型主要有關系型數據庫和非關系型數據庫。
關系型數據庫是一種基于關系模型的數據庫,這種關系模型是對現實中實體關系的抽象表達。非關系型數據庫,在存儲的數據結構上沒有那么嚴格的約束和規范,以更加靈活的方式定義數據存儲。
常用的數據庫管理系統(軟件)包括:Oracle、MySQL、MongoDB等。
可以這樣理解數據庫和數據庫管理軟件的關系,數據庫就是一個類似Excel文件的數據文件,里面包含很多的數據表,這些文件會放在web應用的根文件夾下,以便在運行程序時進行訪問;數據庫管理系統類似于Excel軟件,可以可視化的查看并管理數據庫文件。
在這里我們僅對關系型數據庫進行講解。
2. 如何與數據庫交互
這里以python編程為例,講解服務端程序與數據庫如何進行交互。python的數據庫API提供了一種操作數據庫的標準機制,如下圖(注意這并不是與數據庫進行交互的唯一方式)
以上流程翻譯成python代碼是這樣的:
3. 設計并建立數據庫
關系型數據庫是由一張張相互關聯的數據表構成的,對數據庫的設計也就是設計數據表的結構和關聯。我們現在來設計一個數據庫,并使用python真正建立這個數據庫。
現在我們設計了一個名為runningdata的數據庫,里面包含兩張數據表,一張表記錄每個用戶的基本信息(姓名和出生日期),另一張表記錄每個用戶的跑步時間數據。
兩張數據表分別如下:
可以看到,這兩張表通過用戶ID進行關聯,這種表的結構和關聯應該是具有邏輯意義、現實意義、業務導向、支持擴展的。
上面是對數據表的設計,那么如何通過python建立上面的數據表,并進行數據插入和查詢等操作呢?
首先套用3.2中的流程,建立與數據庫的連接、創建數據游標,然后使用create語句創建兩個數據表。使用SELECT語句對數據表進行查詢并獲取結果,使用INSERT語句分別向表增加數據(其中用戶ID可以自動生成,我們使用第一個表生成的用戶ID填充第二個表,使之關聯起來),然后提交修改并關閉連接。
建立后的數據庫一般長這個樣子:
4. 將數據庫集成到web應用
上面講MVC(模型-視圖-控制器)時我們提到,模型代碼用來存儲并提供數據。所以,我們只需在模型(model)中編寫上述代碼,讓其幫助我們創建數據庫,并定義相關的數據處理方法。這樣在控制器代碼進行響應時就可以調用該方法,使之返回我們需要的數據。
5.?在產品工作中的應用
產品經理對于數據庫的設計方式、作用方式有一定的了解,有助于評估產品功能的實現對現有數據庫的影響,以及新的設計對原有數據的兼容性問題。
另一方面,現在的產品設計往往需要參考大量的用戶行為數據,進行下一步優化。這些用戶數據往往存儲在數據庫中,產品經理有時需要使用SQL語句對數據庫進行查詢,因而對于數據庫的了解也是大有幫助的。
寫在后面
本文主要講解了三個方面的內容:
- 關于API的基本知識
- web應用的工作方式、開發模式
- 數據庫的簡介、操作方法、應用方式
通過這些內容簡單介紹了服務端的基本知識,以及與產品工作的聯系。
我個人對于服務端技術的學習是通過《Head First Python》這本書,因此寫這篇文章,也算是拋磚引玉。后端的內容非常之龐大,我雖誠惶誠恐,還是大膽把自己有所感悟的寫了下來,歡迎大家與我探討或者批評指正。
這兩篇文章講解了web應用開發所涉及的基本知識,希望大家看完之后有所收獲,也建議產品經理們去看一下技術相關的書籍,甚至于寫一個自己的應用,體會一下開發的過程,思考產品設計與技術實現的關系,思考產品經理與開發人員的協作方式。
本文由 @lemon 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
view和html/css是什么關系,view包含html和css這樣嘛
感覺寫的我讀不下去,可以更通俗易懂點嗎
view不是前端寫的,不誤導人好么
視圖層就是前端寫的啊……書里也是這樣教的。
這位同行,首先view前后端都可以寫,我也具體指明了過去MVC往往都由后端來寫,現在view往往由前端來寫。我所看的書里是這樣教的,我也和大多數開發溝通過,他們也是這樣理解的。不知你還有什么疑問?
說的沒錯啊,是這樣的
贊,作者是自學Python嗎
嗯,對的,不過學的比較淺