總覽
1. 博客網站應該具有的基本能力
- 個人介紹 對於個人博客來說,它首先要支持展示博主的個人介紹。這個個人介紹裏面可能包括了暱稱、聯繫方式、相關經歷等基本內容,能夠讓讀者能夠對這個博客的主人有一個基本的認識。
- 文章的撰寫與展示 對一個博客來說,最重要的就是它的內容,也就是裏面的文章。一個好用的博客平臺應該具備易於讓博主撰寫文章的能力,讓夠讓博主毫無負擔地撰寫、編輯自己的文章。此外,還必須能夠有層次,條理的展示文章的信息,比如展示標題、節選、封面,創建 /修改時間,評論點贊數等等。
- 歸檔能力 一篇文章的撰寫時間、內容標籤 /分類等都是不同的,如何按照不同的要求對這些文章進行歸檔整理,也是考驗博客平臺的能力之一。而當文章數量較多的時候,添加一個搜索的功能也能大大方便讀者對某博主博客的瀏覽。
- 博主與讀者互動的能力 僅僅只有博主一個人自嗨可能難以激發寫作的動力,如果博客能夠提供博主與讀者互動的能力,將能有效激勵博主持續創作,更能提升文章的傳播度——點贊和評論功能則是互動能力中最重要的功能之一。
2. RESTful風格
- RESTFUL是一種網絡應用程序的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用於移動互聯網廠商作爲業務使能接口的場景,實現第三方OTT調用移動網絡資源的功能,動作類型爲新增、變更、刪除所調用資源。
- 特點:
a. 每一個URI代表1種資源;
b. 客戶端使用GET、POST、PUT、DELETE4個表示操作方式的動詞對服務端資源進行操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源;
c. 通過操作資源的表現形式來操作資源;
d. 資源的表現形式是XML或者HTML;
e. 客戶端與服務端之間的交互在請求之間是無狀態的,從客戶端到服務端的每個請求都必須包含理解請求所必需的信息。
3. 基本規則
1)通信協議:API與用戶的通信協議,總是使用HTTPs協議。
2)數據格式:統一採用JSON。
3)URI格式統一:同一作者發佈另一篇博文,則僅僅改變URI後面的部分,URI的前面部分不應改變。
4)狀態碼:統一根據HTTP協議:
- 200 OK - [GET]:服務器成功返回用戶請求的數據,該操作是冪等的(Idempotent)。
- 201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。
- 202 Accepted - [*]:表示一個請求已經進入後臺排隊(異步任務)
- 204 NO CONTENT - [DELETE]:用戶刪除數據成功。
- 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作,該操作是冪等的。
- 401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
- 403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。
- 404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。
- 406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是隻有XML格式)。
- 410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。
- 422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。
- 500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將無法判斷髮出的請求是否成功。
4. 設計博客網站的REST API
4.1 查看當前版本
默認情況下,所有https://api.weblog.com接收當前版本(V1)的REST API的請求。
Accept:application/vnd.weblog.v1+json
注:所有的時間戳都以ISO 8601格式返回:
YYYY-MM-DDTHH:MM:SSZ
4.2 用戶登錄
curl -u username -p password https://weblog.com/v1
登錄成功:返回狀態碼爲:2xx
登錄失敗:返回狀態碼爲:4xx
注:以下API均在登錄的情況下使用。
4.3 查看用戶信息
GET /username
curl -u https://weblog.com/v1/huangshim23
響應:
{
Status:200 OK
----------------
"username":huangshim23.
"age":20,
"gender": man,
"fans":null,
"coin":0,
"interestring field":Computing Service,3D,
"created_at":2017-10-01T14:20:35+08:00
}
4.4 修改用戶信息
PUT /user
data //修改用戶的參數
{
"age": 21,
...
}
curl -u -d {"age": 21, ...} https://weblog.com/v1/huangshim23
響應:
{
Status:200 OK
----------------
"username":huangshim23.
"age":21,
"gender": man,
"fans":null,
"coin":0,
"interestring field":Computing Service,3D,
"created_at":2017-10-01T14:20:35+08:00
}
4.5 查看文章
1)查看用戶發表的所有文章
GET /username/articles
curl -a https://weblog.com/v1/huangshim23/articles
響應:
{
"username":"huangshim23"
"total_num":20,
"articles":[
{
"title":"title1",
"id": 1,
"href":"https://weblog.com/v1/huangshim23/articles/1",
"action":"GET",
"status":"original"
"created_time": "2010-11-11T17:31:50Z",
"updated_time": "2014-11-11T17:58:47Z",
"words": 3000,
"visits": 1000
},
{
"title":"title2",
"id": 1,
"href":"https://weblog.com/v1/huangshim23/articles/2",
"action":"GET",
"status":"reproduced"
"created_time": "2016-11-21T17:31:50Z",
"updated_time": "2018-08-11T17:58:47Z",
"words": 5000,
"visits": 10
},
...
]
}
2)查看特定的文章
GET /username/articles/{id}
GET /username/articles/{title}
curl -u https://weblog.com/v1/huangshim23/articles/1
curl -u https://weblog.com/v1/huangshim23/articles/hello-world
響應:
{
"username": huangshim23,
"title":"hello-world",
"id": 1,
"href":"https://weblog.com/v1/huangshim23/articles/1",
"action":"GET",
"status":"original"
"created_time": "2016-11-21T17:31:50Z",
"updated_time": "2018-08-11T17:58:47Z",
"words": 3000,
"visits": 1000
}
4.6 發佈文章
POST /user/articles
data //發佈文章的數據參數
{
"title":
"content":
"description":
"visibility":
"status":
}
curl -u -p -d '{"title":"xxx","content":"xxx","description":"xxxx","visibility":true, "status": "orginal"}' https://weblog.com/v1/huangshim23/articles
響應:
Status:200 OK
--------------------------
"isPublished":true ,
"article":{
"id": 3,
"title": "articleTitle",
"owner": {
"name": "haungshim23",
"id": 123,
"url": "https://weblog.com/v1/huangshim23",
"type": "User"
},
"article_url": "https://weblog.com/v1/huangshim23/articles/3",
"private": false,
"description": "...",
"reading number": 1,
"created_at": "2016-11-11T17:31:50Z",
"updated_at": "2016-11-11T17:31:50Z",
"words": 1502,
"language": "Chinese",
"content":"article contents...."
}
}
4.7 刪除文章
DELETE /user/articles/id
curl -d -i https://weblog.com/v1/huangshim23/articles/1
響應:
Status:200 OK
--------------------------
{
"successed": "true",
"article_id": "1",
"created_at":"2019-09-01T11:30:50Z",
"deleted_at": "2019-11-20T10:30:50Z"
}
4.8 查看文章評論
GET /user/articles/id/comments
curl -u https://weblog.com/v1/huangshim23/articles/1/comments
響應:
{
Status:200 OK
--------------------------
"comments":[
{
"userName":"user1",
"comment": "...",
"comment_time":"2019-11-11T10:30:50Z",
"stars": 100
},
{
"userName":"user2",
"comment": "...",
"comment_time":"2019-11-21T12:30:20Z",
"stars": 1
},
...
]
}
4.9 發佈文章評論
POST /user/articles/id/comments
curl -c '評論內容' https://weblog.com/v1/huangshim23/articles/1/comments
響應:
{
"comment_status": "succeeded",
"comment": "評論內容",
"userName": "huangshim23",
"comment_time": "2019-11-21T12:30:20Z"
}