摘要:設(shè)計風(fēng)格協(xié)議與用戶的通信協(xié)議,總是使用協(xié)議域名應(yīng)該盡量將部署在專用域名之下,如果確定很簡單,不會有進(jìn)一步的擴(kuò)展,可以考慮放在主域名之下。數(shù)據(jù)庫中的表示記錄同種數(shù)據(jù)的集合,所以中的名詞也應(yīng)該使用復(fù)數(shù)。
RESTful Api設(shè)計風(fēng)格
協(xié)議:API與用戶的通信協(xié)議,總是使用HTTPS協(xié)議
域名:應(yīng)該盡量將API部署在專用域名之下,如果確定API很簡單,不會有進(jìn)一步的擴(kuò)展,可以考慮放在主域名之下。
版本:
應(yīng)該將API的版本放在URL中:https://www.sunck.wang/api/v1.0
將版本號放在HTTP頭信息中:https://www.sunck.wang/students
路徑:表示API的具體網(wǎng)址,每個網(wǎng)址代表一種資源,所以網(wǎng)址中不能有動詞,只能有名詞,并且所用的名詞往往與數(shù)據(jù)庫的表名對應(yīng)。數(shù)據(jù)庫中的表示記錄同種數(shù)據(jù)的集合,所以API中的名詞也應(yīng)該使用復(fù)數(shù)。
獲取所有學(xué)生:
https://www.sunck.wang/api/v1... 錯誤寫法
https://www.sunck.wang/api/v1... 正確寫法
使用正確的HTTP請求方法方式 | 解釋 |
---|---|
GET select | 從服務(wù)器獲取資源(一項或者多項) |
POST create | 在服務(wù)器新建一個資源 |
PUT update | 在服務(wù)器更新資源(客戶端提供改變后的完整資源) |
PATCH update | 在服務(wù)器更新資源(客戶端提供改的屬性) |
DELETE delete | 從服務(wù)器刪除資源 |
HEAD | 獲取資源的元數(shù)據(jù) |
OPTIONS | 獲取信息,關(guān)于資源的哪些屬性是客戶端可以改變的 |
描述 | 方式 |
---|---|
列出所有班級 | GET /grades/ |
獲取某個指定班級編號的信息 | GET /grades/id |
列出某個指定編號的班級的所有學(xué)生 | GET /grades/id/students/ |
獲取某個指定編號的學(xué)生信息 | GET /students/id |
創(chuàng)建一個學(xué)生 | POST /students/ |
更新某個指定學(xué)生的信息(信息全部由客戶端提供) | PUT /students/id |
刪除某個指定編號的學(xué)生 | DELETE /students/id |
刪除某個指定班級的下的所有學(xué)生 | DELETE /grades/id/students/ |
如果資源數(shù)較多,服務(wù)器不能將所有數(shù)據(jù)一次全部返回給客戶端,API應(yīng)該提供參數(shù),過濾返回結(jié)果
例子描述 | 方式 |
---|---|
指定返回記錄的數(shù)量 | GET /students/?limit= |
指定返回記錄的開始位置 | GET /students/?offset= |
指定返回第幾頁數(shù)據(jù),以及每頁的記錄數(shù) | GET /students/?page=&per_page= |
指定返回結(jié)果按照哪個屬性排序,以及排序的順序 | GET /students/?sortby=&order= |
指定篩選條件 | GET /students/?student_age_gt= |
注意:參數(shù)的設(shè)計允許存在冗余,即允許API路徑和URL參數(shù)偶爾有重復(fù)
狀態(tài)碼服務(wù)器向客戶端返回的狀態(tài)碼和提示信息
錯誤處理如果錯誤碼是4xx,就應(yīng)該向用戶返回錯誤信息,一般來說,返回的信息中將error作為鍵名,出錯的信息作為鍵值即可
{ error:"Invalid API KEY", }響應(yīng)結(jié)果
針對不同的操作,服務(wù)器向用戶返回結(jié)果應(yīng)該符合規(guī)范
方式 | 描述 |
---|---|
GET /students/ | 返回資源對象的列表 |
GET /students/id/ | 返回單個資源對象 |
POST /students/ | 返回新生成的資源對象 |
PUT /students/ | 返回完整的資源對象 |
PATCH /students/ | 返回完整的資源對象 |
DELETE /students/id/ | 返回一個空文檔 |
返回結(jié)果中提供了鏈接,鏈向了其他的API方法,使得用戶不查看文檔,也知道下一步應(yīng)該做什么
示例{ link:"www.sunck.wang/grades/" } { "link":{ "rel":"collection www.sunck.wang/index/", "href":"www.sunck.wang/grades/", "title":"List of Grades", "type":"application/json", } }鍵
rel:表示這個API與當(dāng)前網(wǎng)址的關(guān)系
href:表示API路徑
title:表示API的標(biāo)題
type:表示返回的類型
其他:服務(wù)器返回的數(shù)據(jù)盡量使用JSON格式,避免使用XML格式
API文檔規(guī)范要求一、 寫明該接口的功能是什么
二、 請求的URL是什么
三、 請求方式是什么(POST、GET、 DELETE、PUT、 PATCH等)
四、 參數(shù)是什么,此處還需說明你的參數(shù)名、參數(shù)類型、是否必填、參數(shù)的簡單解釋
五、 請求成功時的響應(yīng)內(nèi)容(實際開發(fā)中,要與前端同事溝通使用什么樣的數(shù)據(jù)結(jié)構(gòu)),并且對其中的字段做出說明(包括含義、數(shù)據(jù)類型,數(shù)據(jù)結(jié)構(gòu)<字符串,數(shù)組,字典等>)
六、 請求失敗時的響應(yīng)內(nèi)容,并且對其中的字段做出說明(包括含義、數(shù)據(jù)類型,數(shù)據(jù)結(jié)構(gòu)<字符串,數(shù)組,字典等>)包括多帶帶的對錯誤碼的說明
七、 請求樣例(返回結(jié)果部分要包括成功的情況和失敗的情況)
八、 最好寫上文檔的編寫人和編寫時間(可不寫)
Demo:
? 功能:獲取某人的下屬
? URL:”people/api/v1/ subordinate”
請求參數(shù)說明:
參數(shù)名 | 類型 | 是否必填 | 備注 |
---|---|---|---|
uid | int | 是 | 用戶的id |
請求成功參數(shù)說明
參數(shù)名 | 類型 | 說明 |
---|---|---|
code | Int | 響應(yīng)狀態(tài)碼1代表成功 |
msg | string | 響應(yīng)信息 |
data | 數(shù)組 | 數(shù)組內(nèi)是字典類型,詳情見下表 |
data內(nèi)的響應(yīng)參數(shù)說明
參數(shù)名 | 類型 | 說明 |
---|---|---|
uid | int | 下屬的用戶ID |
name | string | 下屬的用戶名 |
position | string | 下屬的崗位 |
?請求失敗參數(shù)說明
參數(shù)名 | 類型 | 說明 |
---|---|---|
code | Int | 響應(yīng)狀態(tài)碼非1值 |
msg | string | 錯誤提示信息 |
code值說明
Code | 說明 |
---|---|
1 | 成功 |
2 | 該人已經(jīng)離職 |
3 | 請求參數(shù)不完整 |
4 | 參數(shù)類型錯誤 |
樣例:
? 請求參數(shù) uid 1
# 請求成功樣例 { "code": 1, "msg": "ok", "data":[ { "uid":2, "name": "Tom", "position": "教師" }, { "uid":3, "name’: "Lucy", "position": "助教" } ] } # 請求失敗樣例 { "data": 2, "msg": "該人已離職" }
10-django——RESTful API 之序列化
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42023.html
摘要:但是遠(yuǎn)遠(yuǎn)不僅是指的風(fēng)格,它是一種網(wǎng)絡(luò)應(yīng)用的架構(gòu)風(fēng)格。參考用定位資源在架構(gòu)風(fēng)格中,用來指定一個資源。完整狀態(tài)碼列表如何設(shè)計在過去不使用架構(gòu)風(fēng)格的時候,如果我們要設(shè)計一個系統(tǒng),會以操作為出發(fā)點,然后圍繞它去建設(shè)其他需要的東西。 引言 作為Web開發(fā)者,你可能或多或少了解一些REST的知識,甚至已經(jīng)非常習(xí)慣于它,以至于在正式地學(xué)習(xí)REST的時候,你可能心里會想:本來就是這樣做的啊,不然還能怎...
摘要:廢話不多講,下面就說說風(fēng)格到底是個神馬東東。一個資源可能會隨著需求的變化而經(jīng)歷一個資源創(chuàng)建修改查詢刪除等過程,風(fēng)格正是基于協(xié)議運(yùn)行的,協(xié)議又被稱為無狀態(tài)協(xié)議,所以資源的變化需要在服務(wù)端完成。 現(xiàn)如今微服務(wù)如日中天,那么大家有沒有想過各個微服務(wù)之間是怎么調(diào)用數(shù)據(jù)亦或是怎么交互的呢?當(dāng)然方式有很多,但今天所說的REST風(fēng)格被業(yè)界推薦為微服務(wù)之間交互的首選方式(小編還是非常喜歡這種方式的)。...
摘要:通過增刪查改,引起資源狀態(tài)的改變,稱為狀態(tài)轉(zhuǎn)移。用于獲取資源的元信息。方法與方法類似,都可以查詢資源的元信息放在的,但不會返回資源的表述。表示請求有問題,如參數(shù)錯誤等。表示當(dāng)前請求的某前置條件不符合。網(wǎng)關(guān)錯誤,從上游服務(wù)器收到無效響應(yīng)。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實踐干貨哦~ 本文由sammyshen 發(fā)表于云+社區(qū)專欄 最近幾年REST API越來越流行,特別是...
摘要:其他交互一般會遵循一些數(shù)據(jù)結(jié)構(gòu)協(xié)議或者狀態(tài)值,比如不同的操作結(jié)果對應(yīng)不同的狀態(tài)值,且出錯會返回指定的錯誤信息方便前端進(jìn)行提示等。 RESTful這種架構(gòu)已經(jīng)具有很長的時間和歷程了,但似乎最近restful這個詞出現(xiàn)的頻率特別高,目前不是很清楚是因為我自個兒現(xiàn)在是以restful風(fēng)格寫程序產(chǎn)生的孕婦效應(yīng),還是單頁面程序開發(fā)的流行造成的。 其實一開始我也是不想寫這篇文章的,因為網(wǎng)絡(luò)上與re...
摘要:前言關(guān)于的設(shè)計目前比較流行的是風(fēng)格的設(shè)計譬如阮一峰的這篇設(shè)計指南中的介紹也有很多支持風(fēng)格的框架具體請自己谷歌之但是實際開發(fā)中很對公司采用的并不是支持風(fēng)格的框架而且是在實際的開發(fā)過程中接口分為不同的版本實現(xiàn)接口管理按照官網(wǎng)教程搭建項目配置默認(rèn) 前言 關(guān)于Api的設(shè)計目前比較流行的是 restful 風(fēng)格的Api設(shè)計,譬如阮一峰的這篇RESTful API 設(shè)計指南中的介紹,PHP也有很多...
閱讀 2343·2021-11-11 16:54
閱讀 2595·2021-09-26 09:47
閱讀 3977·2021-09-08 09:36
閱讀 2727·2021-07-25 21:37
閱讀 926·2019-08-30 15:54
閱讀 2540·2019-08-30 14:22
閱讀 3245·2019-08-30 13:57
閱讀 2558·2019-08-29 17:17