国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

restful接口設(shè)計(jì)規(guī)范[僅供參考]

這篇具有很好參考價(jià)值的文章主要介紹了restful接口設(shè)計(jì)規(guī)范[僅供參考]。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 域名

應(yīng)該盡量將API部署在專用域名之下。

https://api.example.com  

如果確定API很簡(jiǎn)單,不會(huì)有進(jìn)一步擴(kuò)展,可以考慮放在主域名下。

https://www.example.org/api/

2. 版本(Versioning)

應(yīng)該將API的版本號(hào)放入U(xiǎn)RL。

http://www.example.com/app/1.0/foo

http://www.example.com/app/1.1/foo

http://www.example.com/app/2.0/foo

另一種做法是,將版本號(hào)放在HTTP頭信息中,但不如放入U(xiǎn)RL方便和直觀。Github就采用了這種做法。

因?yàn)椴煌陌姹?,可以理解成同一種資源的不同表現(xiàn)形式,所以應(yīng)該采用同一個(gè)URL。版本號(hào)可以在HTTP請(qǐng)求頭信息的Accept字段中進(jìn)行區(qū)分(參見Versioning REST Services):

Accept: vnd.example-com.foo+json; version=1.0

Accept: vnd.example-com.foo+json; version=1.1

Accept: vnd.example-com.foo+json; version=2.0

3. 路徑(Endpoint)

路徑又稱"終點(diǎn)"(endpoint),表示API的具體網(wǎng)址,每個(gè)網(wǎng)址代表一種資源(resource)

(1) 資源作為網(wǎng)址,只能有名詞,不能有動(dòng)詞,而且所用的名詞往往與數(shù)據(jù)庫(kù)的表名對(duì)應(yīng)。

舉例來(lái)說(shuō),以下是不好的例子:

/getProducts
/listOrders
/retreiveClientByOrder?orderId=1

對(duì)于一個(gè)簡(jiǎn)潔結(jié)構(gòu),你應(yīng)該始終用名詞。 此外,利用的HTTP方法可以分離網(wǎng)址中的資源名稱的操作。

GET /products :將返回所有產(chǎn)品清單
POST /products :將產(chǎn)品新建到集合
GET /products/4 :將獲取產(chǎn)品 4
PATCH(或)PUT /products/4 :將更新產(chǎn)品 4

(2) API中的名詞應(yīng)該使用復(fù)數(shù)。無(wú)論子資源或者所有資源。

舉例來(lái)說(shuō),獲取產(chǎn)品的API可以這樣定義

獲取單個(gè)產(chǎn)品:http://127.0.0.1:8080/AppName/rest/products/1
獲取所有產(chǎn)品: http://127.0.0.1:8080/AppName/rest/products

3. HTTP動(dòng)詞

對(duì)于資源的具體操作類型,由HTTP動(dòng)詞表示。

常用的HTTP動(dòng)詞有下面四個(gè)(括號(hào)里是對(duì)應(yīng)的SQL命令)。

  • GET(SELECT):從服務(wù)器取出資源(一項(xiàng)或多項(xiàng))。
  • POST(CREATE):在服務(wù)器新建一個(gè)資源。
  • PUT(UPDATE):在服務(wù)器更新資源(客戶端提供改變后的完整資源)。
  • DELETE(DELETE):從服務(wù)器刪除資源。
CURD  Create、Update、Read、Delete 增刪查改,這四個(gè)數(shù)據(jù)庫(kù)的常用操作

還有三個(gè)不常用的HTTP動(dòng)詞。

  • PATCH(UPDATE):在服務(wù)器更新(更新)資源(客戶端提供改變的屬性)。
  • HEAD:獲取資源的元數(shù)據(jù)。
  • OPTIONS:獲取信息,關(guān)于資源的哪些屬性是客戶端可以改變的。

下面是一些例子。

GET /zoos:列出所有動(dòng)物園
POST /zoos:新建一個(gè)動(dòng)物園(上傳文件)
GET /zoos/ID:獲取某個(gè)指定動(dòng)物園的信息
PUT /zoos/ID:更新某個(gè)指定動(dòng)物園的信息(提供該動(dòng)物園的全部信息)
PATCH /zoos/ID:更新某個(gè)指定動(dòng)物園的信息(提供該動(dòng)物園的部分信息)
DELETE /zoos/ID:刪除某個(gè)動(dòng)物園
GET /zoos/ID/animals:列出某個(gè)指定動(dòng)物園的所有動(dòng)物
DELETE /zoos/ID/animals/ID:刪除某個(gè)指定動(dòng)物園的指定動(dòng)物

4. 過(guò)濾信息(Filtering)

如果記錄數(shù)量很多,服務(wù)器不可能都將它們返回給用戶。API應(yīng)該提供參數(shù),過(guò)濾返回結(jié)果。

下面是一些常見的參數(shù)。query_string 查詢字符串,地址欄后面問(wèn)號(hào)后面的數(shù)據(jù),格式: name=xx&sss=xxx

完整的URL地址格式:
協(xié)議://域名(IP):端口號(hào)/students/?查詢字符串#錨點(diǎn)

查詢字符串: query_srting
格式與請(qǐng)求體類型:
    username=xiaoming&class=301
?limit=10:指定返回記錄的數(shù)量
?offset=10:指定返回記錄的開始位置。
?page=2&per_page=100:指定第幾頁(yè),以及每頁(yè)的記錄數(shù)。
?sortby=name&order=asc:指定返回結(jié)果按照哪個(gè)屬性排序,以及排序順序。
?animal_type_id=1:指定篩選條件

參數(shù)的設(shè)計(jì)允許存在冗余,即允許API路徑和URL參數(shù)偶爾有重復(fù)。比如,

GET /zoos/ID/animals 與 GET /animals?zoo_id=ID 的含義是相同的。

6. 狀態(tài)碼(Status Codes)

1xx 表示當(dāng)前本次請(qǐng)求還是持續(xù),沒(méi)結(jié)束
2xx 表示當(dāng)前本次請(qǐng)求成功/完成了
3xx 表示當(dāng)前本次請(qǐng)求成功,但是服務(wù)器進(jìn)行代理操作/重定向
4xx 表示當(dāng)前本次請(qǐng)求失敗,主要是客戶端發(fā)生了錯(cuò)誤
5xx 表示當(dāng)前本次請(qǐng)求失敗,主要是服務(wù)器發(fā)生了錯(cuò)誤

服務(wù)器向用戶返回的狀態(tài)碼和提示信息,常見的有以下一些(方括號(hào)中是該狀態(tài)碼對(duì)應(yīng)的HTTP動(dòng)詞)。

  • 101 Switching Protocols - [*] 協(xié)議進(jìn)行中,一般在http升級(jí)到websocket協(xié)議的時(shí)候就看到
  • 200 OK - [GET]:服務(wù)器成功返回用戶請(qǐng)求的數(shù)據(jù)
  • 201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數(shù)據(jù)成功。
  • 202 Accepted - [*]:表示一個(gè)請(qǐng)求已經(jīng)進(jìn)入后臺(tái)排隊(duì)(異步任務(wù))
  • 204 NO CONTENT - [DELETE]:用戶刪除數(shù)據(jù)成功。
  • 301 Moved Permanently - [*]: 永久重定向
  • 302 Move Temporarily - [*]: 臨時(shí)重定向
  • 304 Not Modified - [*]: 命中緩存
  • 400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發(fā)出的請(qǐng)求有錯(cuò)誤,服務(wù)器沒(méi)有進(jìn)行新建或修改數(shù)據(jù)的操作
  • 401 Unauthorized - [*]:表示用戶沒(méi)有權(quán)限(令牌、用戶名、密碼錯(cuò)誤)。
  • 403 Forbidden - [*] 表示用戶得到授權(quán)(與401錯(cuò)誤相對(duì)),但是訪問(wèn)是被禁止的。
  • 404 NOT FOUND - [*]:用戶發(fā)出的請(qǐng)求針對(duì)的是不存在的記錄,服務(wù)器沒(méi)有進(jìn)行操作,該操作是冪等的。
  • 406 Not Acceptable - [GET]:用戶請(qǐng)求的格式不可得(比如用戶請(qǐng)求JSON格式,但是只有XML格式)。
  • 410 Gone -[GET]:用戶請(qǐng)求的資源被永久刪除,且不會(huì)再得到的。
  • 422 Unprocesable entity - [POST/PUT/PATCH] 當(dāng)創(chuàng)建/修改一個(gè)對(duì)象時(shí),發(fā)生一個(gè)驗(yàn)證錯(cuò)誤。
  • 500 INTERNAL SERVER ERROR - [*]:服務(wù)器發(fā)生錯(cuò)誤,用戶將無(wú)法判斷發(fā)出的請(qǐng)求是否成功。
  • 507 Insufficient Storage [POST/PUT/PATCH] 數(shù)據(jù)存儲(chǔ)出錯(cuò),往往數(shù)據(jù)庫(kù)操作錯(cuò)誤出錯(cuò),服務(wù)器就返回這個(gè)

狀態(tài)碼的完全列表參見這里或這里。

7. 錯(cuò)誤處理(Error handling)

如果狀態(tài)碼是4xx或者5xx,服務(wù)器就應(yīng)該向用戶返回出錯(cuò)信息。一般來(lái)說(shuō),返回的信息中將error作為鍵名,出錯(cuò)信息作為鍵值即可。一般格式都是json格式。

{
    error: "Invalid API key"
}

8. 返回結(jié)果

restful針對(duì)不同操作,服務(wù)器向用戶返回的結(jié)果應(yīng)該符合以下規(guī)范。

  • GET /collections:返回資源對(duì)象的列表(數(shù)組)
  • GET /collections/ID:返回單個(gè)資源字典(json)
  • POST /collections:返回新生成的資源字典(json)
  • PUT /collections/ID:返回修改后的資源字典(json)
  • DELETE /collections/ID:返回一個(gè)空文檔(空字符串,空字典)

9. 超媒體(Hypermedia API)

RESTful API最好做到Hypermedia(即返回結(jié)果中提供鏈接,連向其他API方法),使得用戶不查文檔,也知道下一步應(yīng)該做什么。

比如,Github的API就是這種設(shè)計(jì),訪問(wèn)api.github.com會(huì)得到一個(gè)所有可用API的網(wǎng)址列表。

{
"current_user_url": "https://api.github.com/user",
"authorizations_url": "https://api.github.com/authorizations",
// ...
}

從上面可以看到,如果想獲取當(dāng)前用戶的信息,應(yīng)該去訪問(wèn)api.github.com/user,然后就得到了下面結(jié)果。

{
  "message": "Requires authentication",
  "documentation_url": "https://developer.github.com/v3"
}

上面代碼表示,服務(wù)器給出了提示信息,以及文檔的網(wǎng)址。

10. 其他

服務(wù)器返回的數(shù)據(jù)格式,應(yīng)該盡量使用JSON,避免使用XML。

XML(eXtend Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)是W3C為了替換HTML研發(fā)出來(lái)的,但是現(xiàn)在很明顯失敗了。

語(yǔ)法:

1. xml常用場(chǎng)景:配置文件 微信開發(fā)  小程序  安卓

2. xml就是網(wǎng)頁(yè)文檔,文件以 .xml結(jié)尾

3. xml文檔必須以文檔聲明開頭,所有的xml文檔內(nèi)容都必須寫在自定義的根標(biāo)簽內(nèi),xml文檔有且只有1個(gè)根標(biāo)簽。
<xml version="1.0" charset="utf-8">
<根標(biāo)簽>
    ..... xml文檔內(nèi)容
</根標(biāo)簽>

4. xml里面也是由標(biāo)簽組成頁(yè)面的。標(biāo)簽分單標(biāo)簽和雙標(biāo)簽。其中,
   單標(biāo)簽寫法: <標(biāo)簽名/>
   雙標(biāo)簽寫法: <標(biāo)簽名></標(biāo)簽名>

5. xml標(biāo)簽名除了文檔聲明,其他標(biāo)簽名和屬性全部是開發(fā)人員自己自定義的。

6. 標(biāo)簽有0個(gè)或多個(gè)屬性,屬性必須有屬性值。而且屬性值必須使用引號(hào)圈起來(lái)。
<標(biāo)簽名 屬性名="屬性值" .../>
<標(biāo)簽名 屬性名="屬性值" ...>標(biāo)簽內(nèi)容</標(biāo)簽名>

xml文檔舉例:

<?xml version="1.0" encoding="utf-8" ?>
<student-list>
<!-- 	<student>
	   <name>小紅</name>
	   <age>17</age>
	   <sex>女</sex>
	   <class>301</class>
	</student>
	<student>
	   <name>小紅</name>
	   <age>17</age>
	   <sex>女</sex>
	   <class>301</class>
	</student> -->
	<student age="17" sex="" class="301">小明</student>
	<student age="17" sex="" class="301">小明</student>
	<student age="17" sex="" class="301">小明</student>
	<student age="17" sex="" class="301">小明</student>
	<student age="17" sex="" class="301">小明</student>
</student-list>

json是目前市面上最流行的數(shù)據(jù)傳輸格式。JavaScript Object Notation js對(duì)象表示法

語(yǔ)法:

# 1. json文件以 .json結(jié)尾,一個(gè)json文件中只能保存一個(gè)json對(duì)象或者一個(gè)json數(shù)組
# 2. json中的屬性類型:
  數(shù)組    []                       # python->列表
  對(duì)象    {}                       # python->字典
  數(shù)值    整型,浮點(diǎn)型,布爾值   
  字符串  雙引號(hào)圈起來(lái)的文本內(nèi)容
  null    空

# 3. 數(shù)組和對(duì)象的成員之間必須以英文逗號(hào)隔開,并且最后一個(gè)子成員后面不能出現(xiàn)逗號(hào)
# 4. json對(duì)象只能有屬性不能出現(xiàn)方法,而且屬性名必須以字符串格式來(lái)編寫

舉例1:

{
    "name": "張三",
    "sex": true,
    "age": 38,
    "money": 88.5,
    "child":{
        "name": "張思",
        "sex": false,
        "age": 4
    },
    "lve":["code","TV","swimming"]
}

舉例2:

[
    {
        "name":"小明",
        "sex":true,
    },{
        "name":"小灰",
        "sex":true,
    }
]

使用xml和json表述一本書的內(nèi)容信息,書的字段:

name varchar

price float

author varchar

pub_data date

word_total int

xml

<?xml version="1.0" encoding="utf-8" ?>
<book>
	<name>金瓶梅</name>
	<price>9999</price>
	<author>內(nèi)容~~~適合多看</author>
	<pub_data>2020-9-8</pub_data>
	<word_total>999</word_total>
</book>

json文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-617849.html

{
	"name":"三國(guó)演義",
	"price":1,
	"author":"諸葛亮草船借箭。。。",
	"pub_data":"2000-1-1",
	"word_total":50
}
http://www.xx.com:80/students?username=xiaoming&pwd=123

協(xié)議名://域名:端口/路徑?查詢字符串

到了這里,關(guān)于restful接口設(shè)計(jì)規(guī)范[僅供參考]的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分布式計(jì)算----期末復(fù)習(xí)題(僅供參考)

    一.單選題,每個(gè)2分 1.Hadoop 之父 是下面的哪一位?(B) A. James Gosling ???? ??B.Doug Cutting ? ?C.Matei Zaharia ??D.Linus Benedict Torvalds 2.Hadoop中,用于 處理或者分析海量數(shù)據(jù) 的組件是哪一個(gè)?( ?B ??) A.HDFS ?? ?B.MapReduce ????C.Yarn ??D.以上選項(xiàng)都不是 3.HDFS中 存儲(chǔ)和管理元數(shù)據(jù)

    2024年02月10日
    瀏覽(32)
  • 有關(guān) Rust 交叉編譯的一些思路 (僅供參考)

    近來(lái), 使用 Rust 語(yǔ)言開發(fā)的應(yīng)用程序, 漸漸融入了開發(fā)者以及普通用戶的日常生活. 它們不僅出現(xiàn)在我們常用的工作平臺(tái)上, 不少嵌入式設(shè)備或者云服務(wù)器上也多見它們的身影. Rust 是一種需要編譯的語(yǔ)言, 且一些 crate 仍需要 C/C++ 的構(gòu)建環(huán)境. 大多數(shù)時(shí)候, 在 Rust 工具鏈 (toolchai

    2024年02月09日
    瀏覽(31)
  • halcon不能連接海康相機(jī)解決方法(僅供參考)

    halcon不能連接??迪鄼C(jī)解決方法(僅供參考)

    halcon不能連接相機(jī)有很多原因,這里作者給出其中一種的解決方法。 首先需要自行先下載??弟浖?? 1.首先點(diǎn)開Development, 2.根據(jù)圖片的路徑,點(diǎn)開以下文件夾 ?3.根據(jù)自己電腦安裝的halcon版本打開對(duì)應(yīng)文件夾 ? ? 4.我的電腦是win64位的,根據(jù)自己的電腦打開對(duì)應(yīng)的文件夾。

    2024年02月12日
    瀏覽(60)
  • uniapp獲取手機(jī)號(hào)(前端部分,僅供參考~)

    html部分 js部分 api部分

    2024年02月09日
    瀏覽(25)
  • 軸承故障診斷系統(tǒng)的需求說(shuō)明,僅供參考使用

    項(xiàng)目名稱:軸承故障診斷系統(tǒng) 項(xiàng)目目標(biāo) 開發(fā)一個(gè)自動(dòng)化系統(tǒng),用于測(cè)試和診斷工業(yè)軸承的潛在故障。系統(tǒng)將通過(guò)分析從軸承收集的振動(dòng)數(shù)據(jù)來(lái)檢測(cè)異常模式,以預(yù)測(cè)故障并提供維護(hù)建議。 硬件需求 傳感器 :高精度振動(dòng)傳感器,型號(hào):Honeywell 78628/1NC。 數(shù)據(jù)采集卡 :NI PXI-

    2024年01月23日
    瀏覽(33)
  • 【Software Testing】【期末習(xí)題庫(kù)】【2023年春】【僅供參考】

    【Software Testing】【期末習(xí)題庫(kù)】【2023年春】【僅供參考】

    類型 總分占比 平時(shí)成績(jī) 40% 考試/考查 60% 題型 題量×分值 備注 單選 20×1’ 多選 10×3’ 全對(duì)=3’,錯(cuò)1個(gè)=0’,少選=-1’ 填空 10×2’ 判斷 5×2’ 大題 2×10’ 平時(shí)習(xí)題(3次): ①軟件測(cè)試概述 ②黑盒測(cè)試 ③白盒測(cè)試和性能測(cè)試 期中考試(1次) 大題1:平時(shí)課上練習(xí)過(guò)的習(xí)題

    2024年02月10日
    瀏覽(27)
  • 刪除文件后磁盤空間未釋放,只能重啟進(jìn)程?(僅供參考)

    刪除文件后磁盤空間未釋放,只能重啟進(jìn)程?(僅供參考)

    很多運(yùn)維同學(xué)都遇到過(guò)“磁盤告警”,遇到這種情況就需要去清理磁盤。 這時(shí)候,很多同學(xué)通過(guò)各種途徑、手段、命令找到了占用磁盤比較大的文件,然后大手一揮,? 以為這樣任務(wù)就完成了,誰(shuí)知道,一查詢磁盤使用量還是居高不下,完全沒(méi)有釋放。 這是因?yàn)樵贚inux中,如

    2024年02月11日
    瀏覽(34)
  • gamit10.71解算教程(入門級(jí)別,僅供參考)

    gamit10.71解算教程(入門級(jí)別,僅供參考)

    數(shù)據(jù)準(zhǔn)備 1.1 數(shù)據(jù)下載 本次實(shí)例擬使用aira bjnm chan cmum hkws mizu twtf ulab等IGS站數(shù)據(jù)進(jìn)行解算,計(jì)算日本的兩個(gè)站mizu, aira的位置,解算時(shí)間為2019年129天。 在主目錄下創(chuàng)建工程文件目錄 mkdir test 鏈接tables文件夾下中的文件 sh_setup -yr 2019 -apr igs14_comb.apr (注:igs14_comb.apr文件中保存

    2024年01月25日
    瀏覽(29)
  • Python爬取MidJourney歷史圖片【僅供參考學(xué)習(xí)使用】

    使用MidJourney時(shí), 在https://www.midjourney.com/app/這里有接口https://www.midjourney.com/api/app/recent-jobs/?amount=35dedupe=truejobStatus=completedjobType=upscaleorderBy=newpage=3prompt=undefinedrefreshApi=0searchType=advancedservice=nulltoDate=2023-06-16+09%3A50%3A17.379092type=alluserId=b12e169c-f609-4fd6-b917-11c2deaa8cffuser_id_ranked_score=n

    2024年02月13日
    瀏覽(34)
  • 運(yùn)維系列(僅供參考):官方文檔翻譯 -- 開始 Elasticsearch 入門

    想快速入門,來(lái)看 官方文檔吧!??! 個(gè)人翻譯版 Github地址,英語(yǔ)水平有限,有錯(cuò)誤或遺漏的歡迎留言指正。 準(zhǔn)備好如何使用 Elasticsearch 來(lái)測(cè)試驅(qū)動(dòng)使用 REST APIs 來(lái)存儲(chǔ)、查詢、分析數(shù)據(jù)了嗎? 遵循如下開始教程: 獲取一個(gè) Elasticsearch 實(shí)例并啟動(dòng)運(yùn)行 添加索引實(shí)例文檔 使用

    2024年04月27日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包