目錄
flask 部署:
nginx + gunicorn + flask
介紹:
WSGI:全稱是Web Server Gateway Interface(web服務器網關接口),它是一種規范,它是web服務器和web應用程序之間的接口。它的作用就像是橋梁,連接在web服務器和web應用框架之間。
uwsgi:是一種傳輸協議,用於定義傳輸信息的類型。
uWSGI:是實現了uwsgi協議WSGI的web服務器。
使用Gunicorn:
前端代理使用Nginx主要是為了實現分流、轉發、負載均衡,以及分擔服務器的壓力。Nginx部署簡單,內存消耗少,成本低。Nginx既可以做正向代理,也可以做反向代理
正向代理:請求經過代理服務器從局域網發出,然后到達互聯網上的服務器。
特點:服務端並不知道真正的客戶端是誰。
反向代理:請求從互聯網發出,先進入代理服務器,再轉發給局域網內的服務器。
特點:客戶端並不知道真正的服務端是誰。
區別:正向代理的對象是客戶端。反向代理的對象是服務端。
配置:
pip install gunicorn
#直接運行,默認啟動的127.0.0.1::8000
gunicorn 運行文件名稱:Flask程序實例名
指定進程和端口號: -w: 表示進程(worker)。 -b:表示綁定ip地址和端口號(bind)
$gunicorn -w 4 -b 127.0.0.1:5001 運行文件名稱:Flask程序實例名 # 加 -d 守護進程
Nginx配置:
默認安裝到/usr/local/nginx/目錄,進入目錄
#啟動
sudo sbin/nginx
#查看
ps aux | grep nginx
#停止
sudo sbin/nginx -s stop
打開/usr/local/nginx/conf/nginx.conf文件
server {
# 監聽80端口
listen 80;
# 本機
server_name localhost;
# 默認請求的url
location / {
#請求轉發到gunicorn服務器
proxy_pass http://127.0.0.1:5001;
#設置請求頭,並將頭信息傳遞給服務器端
proxy_set_header Host $host;
}
}
Restful:
REST是設計風格而不是標准。是指客戶端和服務器的交互形式
REST的特點:
具象的。一般指表現層,要表現的對象就是資源。比如,客戶端訪問服務器,獲取的數據就是資源。比如文字、圖片、音視頻等。
表現:資源的表現形式。txt格式、html格式、json格式、jpg格式等。瀏覽器通過URL確定資源的位置,但是需要在HTTP請求頭中,用Accept和Content-Type字段指定,這兩個字段是對資源表現的描述。
狀態轉換:客戶端和服務器交互的過程。在這個過程中,一定會有數據和狀態的轉化,這種轉化叫做狀態轉換。其中,GET表示獲取資源,POST表示新建資源,PUT表示更新資源,DELETE表示刪除資源。HTTP協議中最常用的就是這四種操作方式。
RESTful架構:
每個URL代表一種資源;
客戶端和服務器之間,傳遞這種資源的某種表現層;
客戶端通過四個http動詞,對服務器資源進行操作,實現表現層狀態轉換。
設計:
將api部署在專用域名下:
http://api.example.com
或者將api放在主域名下:
http://www.example.com/api/
將API的版本號放在url中。
http://www.example.com/app/1.0/info
http://www.example.com/app/1.2/info
路徑:
路徑:
路徑表示API的具體網址。每個網址代表一種資源。 資源作為網址,網址中不能有動詞只能有名詞,一般名詞要與數據庫的表名對應。而且名詞要使用復數。
#獲取單個商品
http://www.example.com/app/goods/1
#獲取所有商品
http://www.example.com/app/goods
對於資源的具體操作類型,由HTTP動詞表示。 常用的HTTP動詞有四個。
GET SELECT :從服務器獲取資源。
POST CREATE :在服務器新建資源。
PUT UPDATE :在服務器更新資源。
DELETE DELETE :從服務器刪除資源。
過濾信息:
資源數據較多,服務器不能將所有數據一次全部返回給客戶端。API應該提供參數,過濾返回結果
#指定返回數據的數量
http://www.example.com/goods?limit=10
#指定返回數據的開始位置
http://www.example.com/goods?offset=10
#指定第幾頁,以及每頁數據的數量
http://www.example.com/goods?page=2&per_page=20
狀態碼:
服務器向用戶返回的狀態碼和提示信息,常用的有:
200 OK :服務器成功返回用戶請求的數據
201 CREATED :用戶新建或修改數據成功。
202 Accepted:表示請求已進入后台排隊。
400 INVALID REQUEST :用戶發出的請求有錯誤。
401 Unauthorized :用戶沒有權限。
403 Forbidden :訪問被禁止。
404 NOT FOUND :請求針對的是不存在的記錄。
406 Not Acceptable :用戶請求的的格式不正確。
500 INTERNAL SERVER ERROR :服務器發生錯誤。
錯誤信息:
服務器返回的錯誤信息,以鍵值對的形式返回。
{
error:'Invalid API KEY'
}
響應結果:
針對不同結果,服務器向客戶端返回的結果應符合以下規范。
#返回商品列表
GET http://www.example.com/goods
#返回單個商品
GET http://www.example.com/goods/cup
#返回新生成的商品
POST http://www.example.com/goods
#返回一個空文檔
DELETE http://www.example.com/goods
使用鏈接關聯相關的資源:
在返回響應結果時提供鏈接其他API的方法,使客戶端很方便的獲取相關聯的信息。
服務器返回的數據格式,應該盡量使用JSON,避免使用XML。