web是怎么工作的?
URL:https://www.google.com 域名
首先訪問(wèn)最近的DNS服務(wù)器 domain name service
DNS記錄了這個(gè)域名的ip地址是什么
瀏覽器向該ip地址發(fā)送http/https(傳輸協(xié)議)請(qǐng)求。每臺(tái)服務(wù)器/計(jì)算機(jī)聯(lián)網(wǎng)都需要一個(gè)ip地址。通過(guò)ip地址就能找到該服務(wù)器/計(jì)算機(jī)。
服務(wù)器收到請(qǐng)求,將請(qǐng)求遞交給80端口監(jiān)聽到http server(apache, unicorn, gunicorn, uwsgi)
http server將請(qǐng)求轉(zhuǎn)發(fā)給web application(web application framework: Django, Ruby on Rails, Nodejs, Flask)
web application處理請(qǐng)求
-
根據(jù)當(dāng)前路徑找到邏輯處理模塊
-
根據(jù)用戶請(qǐng)求(GET + POST)決定如何獲取/存放數(shù)據(jù)
-
從數(shù)據(jù)存儲(chǔ)服務(wù)(數(shù)據(jù)庫(kù)或者文件系統(tǒng))中讀取數(shù)據(jù)
-
組織數(shù)據(jù)成一張html網(wǎng)頁(yè)作為返回結(jié)果
瀏覽器得到結(jié)果展示給用戶
瀏覽器 <--> DNS web server
<--------------> [http server <--> web application] <--> database
瀏覽器 <--> DNS
<--> firewall <--> load balancer<-->web server <--> database
<-->web server <--> database
async server(message queue) memcache
什么是API? application programming interface
提供一些方法函數(shù)功能給別人用,別人通過(guò)直接函數(shù)調(diào)用或者h(yuǎn)ttp等方式進(jìn)行調(diào)用,得到了返回結(jié)果,這就是API。
api設(shè)計(jì)
https://www.xx.com/api... 目標(biāo)獲得當(dāng)前登陸用戶在某給某個(gè)題的所有提交記錄
/api/submissions/?problem_id=1000 #后臺(tái)用當(dāng)前用戶去篩選
不能帶user_id,可以被篡改,別人可以登陸
Restful API, 你要獲取的數(shù)據(jù)是什么,一級(jí)目錄就是什么。使用HTTP的四個(gè)動(dòng)作(POST,DELETE,GET,PUT)來(lái)代表對(duì)數(shù)據(jù)的增刪查改
所有的篩選條件,創(chuàng)建參數(shù),都放在http的參數(shù)里
Design News Feed API
設(shè)計(jì)news feed list的web api請(qǐng)求格式
GET https://www.facebook.com/api/newsfeed/
GET https://api.facebook.com/newsfeed/
設(shè)計(jì)API的返回格式:structured data(json / xml)
返回界面:html
設(shè)計(jì)翻頁(yè)pagination:
方法1:/api/newsfeed/?page=1
缺點(diǎn):如果有新數(shù)據(jù)被插入,翻到下一頁(yè)可能會(huì)看到上一頁(yè)的內(nèi)容
方法2:/api/newsfeed/?max_id=xxx (最新的xxx個(gè),id<=max_id的數(shù)據(jù))
如何判斷有沒有下一頁(yè)?每次多取一個(gè)數(shù)據(jù),如果取到,把這個(gè)數(shù)據(jù)作為next_max_id返回給前端
mentions的數(shù)據(jù)格式?<a href="/users/someone/">@someone</a>
缺點(diǎn)1:需要預(yù)防javascript injection attack
缺點(diǎn)2: api無(wú)法被mobile端共享
mobile顯示鏈接不用<a>
缺點(diǎn)3:url可能會(huì)改動(dòng)
<user username="someone">Hello World</user>
浙公網(wǎng)安備 33010602011771號(hào)