摘要:表述性狀態(tài)傳遞通?;谑褂?,,,。使用的數(shù)據(jù)格式為方法獲取數(shù)據(jù)用于更新和添加數(shù)據(jù)用于刪除數(shù)據(jù)添加數(shù)據(jù)一種基于的架構(gòu)方式資源與全稱為表述性狀態(tài)轉(zhuǎn)移??蛻舳司S護應(yīng)用狀態(tài)。是保存一些服務(wù)器不依賴于會話狀態(tài)即可依賴的信息。
Restful
REST表述性狀態(tài)傳遞
REST通?;谑褂肏TTP,URL,XML,HTML。
REST使用的數(shù)據(jù)格式為JSON
GET 獲取數(shù)據(jù)
PUT 用于更新和添加數(shù)據(jù)
DELETE 用于刪除數(shù)據(jù)
POST 添加數(shù)據(jù)
一種基于http的架構(gòu)方式
資源與URLREStful全稱為表述性狀態(tài)轉(zhuǎn)移。任何事物只要有被引用的必要都為資源。資源可以為實體,可以為抽象的概念。
資源舉例用戶的手機號
用戶的個人信息
用戶手機潛在的價值
資源要被識別,要有唯一的標(biāo)識。
URL可以看成資源的地址,可以看成資源的名稱。
以github舉例
倉庫地址 https://github.com/mySoul8012...
個人信息地址 https://github.com/mySoul8012
看URL可知倉庫是在那個用戶名下的
使用-或者_來進行資源的分割
使用/來表示資源的層級關(guān)系
使用?將資源進行過濾 /pulls?state=closed 表示已經(jīng)關(guān)閉的推送請求,URL對應(yīng)的是一種特定的查詢結(jié)果。
.或者:表示同級的資源關(guān)系
指一次或者多次請求一個資源的時候,應(yīng)該具有相同的副作用。屬于語義化的一個詞
HTTP協(xié)議是一種面向資源的應(yīng)用層協(xié)議
GET用于獲取資源,不應(yīng)該有副作用,所以稱為其冪等性,例如請求一個資源的時候,不會改變其狀態(tài),此時說明GET具有冪等性
HTTP的DELETE,會刪除資源,此時具有副作用,但是多次的副作用是相同的,還是具有其冪等性
POST為創(chuàng)建一個資源,每次副作用都是不同的,即沒有冪等性
PUT為更新資源,對于同一個URL一次和多次的是相同的,此時具有冪等性
安全且冪等,表示一種獲取的表示,會有緩存
POST不安全且不冪等,使用服務(wù)器端的管理的實例號生成資源,創(chuàng)建子資源,用于部分更新資源,如果沒有修改則不會更新資源(一種樂觀鎖的表示)
PUTPUT不安全且冪等。用客戶端管理的實例,創(chuàng)建一個資源,通過替換的方式更新資源
DELETE不安全但是冪等
四種總結(jié)四種tcp方式,都是不安全,因為都是明文傳輸,需要使用https,完成加密,防止被抓包
一些問題 一個框架 rails官方網(wǎng)站 https://rubyonrails.org/
或者名為 Ruby on Rails
一種基于Ruby語言即面向?qū)ο螅钍剑瘮?shù)式,動態(tài)的通用編程語言,由日本科學(xué)家發(fā)明。特點是函數(shù)式編程
這是一個開源的web應(yīng)用框架,嚴(yán)格按照MVC架構(gòu)開發(fā)。
Github
推特
basecamp
Groupon
yellowpages
為博客增加一個Java分類,生成的路徑名為/categories/java 采用PUT方法,完成更新,因為此時是由客戶端決定的
客戶端不一定支持HTTP方法rails 框架是通過隱藏參數(shù)的方法,達到傳遞真實請求的方式
資源的表述客戶端獲取的只是資源的表述。即資源的外在表現(xiàn)。
資源的表述包括數(shù)據(jù)和描述數(shù)據(jù)的元數(shù)據(jù)。
通過HTTP內(nèi)容的協(xié)商,客戶端通過頭部信息達到
以github為例,JSON表述如下
URL里帶上版本號
URL后綴區(qū)分表述格式
超鏈接即狀態(tài)引擎。
在表述格式里加入連接引導(dǎo)客戶端。即這種鏈接稱為流通性
以github為例
狀態(tài)應(yīng)該區(qū)分應(yīng)用狀態(tài)和資源狀態(tài)。
客戶端維護應(yīng)用狀態(tài)。
服務(wù)端維護資源狀態(tài)。
客戶端和服務(wù)端交互必須是無狀態(tài)的。
Cookie是保存一些服務(wù)器不依賴于會話狀態(tài)即可依賴的信息。
會話狀態(tài)不是作為資源狀態(tài)保存在服務(wù)器端的,而是被客戶端作為應(yīng)用狀態(tài)進行跟蹤的。客戶端的應(yīng)用在服務(wù)器端指引的超鏈接指引下發(fā)生變遷。
為一種架構(gòu)模式
創(chuàng)建一個JSON數(shù)據(jù)資源文件
{ "user1": { "name": "mahesh", "password": "password", "profession": "teacher", "id": 1 }, "user2": { "name": "suresh", "password": "password2", "profession": "libraian", "id": 2 }, "user3": { "name": "ramesh", "password": "password3", "profession": "clerk", "id": 3 }, }
即根據(jù)JSON文件有以下api
序號 | Url | Http方法 | 發(fā)送內(nèi)容 | 結(jié)果 |
---|---|---|---|---|
1 | listUsers | GET | 空 | 顯示所有用戶列表 |
2 | addUser | POST | JSON字符串 | 添加新用戶 |
3 | deleteUsers | DELETE | JSON字符串 | 刪除用戶 |
4 | id | GET | 空 | 顯示用戶詳細信息 |
http://127.0.0.1:1937/listUsers
/*server.js*/ var express = require("express"); // 引入express框架 var app = express(); var fs = require("fs"); // 引入文件模塊 // 創(chuàng)建get請求 app.get("/listUsers", (req, res) => { fs.readFile(__dirname + "/" + "users.json", "utf8", (err, data) => { // 讀取文件 console.log( data ); res.end(data); // 將讀取到的內(nèi)容返回給客戶端 }); }); // 啟動server var server = app.listen(1937, () => { console.log(server.address()); })
查看一下JSON數(shù)據(jù)
這樣暫時完成了一部分
JSON.parse有個小坑,最后不允許使用,作為結(jié)尾
/*server.js*/ var express = require("express"); // 引入express框架 var app = express(); var fs = require("fs"); // 引入文件模塊 // 添加用戶的數(shù)據(jù) var user = { "user4": { "name":"mohit", "password":"password4", "profession":"teacher", "id":4 } } // 創(chuàng)建get請求 app.get("/addUser", (req, res) => { // 讀取已存在的數(shù)據(jù) fs.readFile( __dirname + "/" + "users.json", "utf8", (err, data) => { if (err) { return console.log(err); }; data = JSON.parse(data); // 將傳入的JSON轉(zhuǎn)換為對象格式 data["user4"] = user["user4"]; console.log(data); res.end( JSON.stringify(data) ); // 將對象轉(zhuǎn)換成為JSON格式 }); }); // 啟動server var server = app.listen(1937, () => { console.log(server.address()); })
{ "user1": { "name": "mahesh", "password": "password", "profession": "teacher", "id": 1 }, "user2": { "name": "suresh", "password": "password2", "profession": "libraian", "id": 2 }, "user3": { "name": "ramesh", "password": "password3", "profession": "clerk", "id": 3 } }
訪問 http://127.0.0.1:1937/addUser
返回的JSON數(shù)據(jù)
此時本地的JSON數(shù)據(jù)仍舊未發(fā)生改變,如果要其發(fā)生改變需要fs的寫模塊,將JSON數(shù)據(jù)寫入JSON文件中
/*server.js*/ var express = require("express"); // 引入express框架 var app = express(); var fs = require("fs"); // 引入文件模塊 // 添加用戶的數(shù)據(jù) var user = { "user4": { "name":"mohit", "password":"password4", "profession":"teacher", "id":4 } } // 創(chuàng)建獲取用戶列表路由 app.get("/listUsers", function (req, res) { fs.readFile( __dirname + "/" + "users.json", "utf8", function (err, data) { console.log( data ); res.end( data ); }); }) // 創(chuàng)建添加用戶路由請求 app.get("/addUser", (req, res) => { // 讀取已存在的數(shù)據(jù) fs.readFile( __dirname + "/" + "users.json", "utf8", (err, data) => { if (err) { return console.log(err); }; data = JSON.parse(data); // 將傳入的JSON轉(zhuǎn)換為對象格式 data["user4"] = user["user4"]; console.log(data); res.end( JSON.stringify(data) ); // 將對象轉(zhuǎn)換成為JSON格式 }); }); // 添加顯示用戶詳情路由 app.get("/:id", (req, res) => { // 首先讀取已存在的用戶 fs.readFile( __dirname + "/" + "users.json", "utf8", (err, data) => { data = JSON.parse( data ); var user = data["user" + req.params.id] // 獲取get得到的值 console.log( user ); res.end( JSON.stringify(user) ); }) }) // 啟動server var server = app.listen(1937, () => { console.log(server.address()); })
查看瀏覽器得到的JSON數(shù)據(jù)
/*server.js*/ var express = require("express"); // 引入express框架 var app = express(); var fs = require("fs"); // 引入文件模塊 // 創(chuàng)建獲取用戶列表路由 app.get("/listUsers", (req, res) => { fs.readFile( __dirname + "/" + "users.json", "utf8", (err, data) => { console.log( data ); res.end( data ); }); }) // 創(chuàng)建添加用戶路由請求 app.get("/addUser", (req, res) => { // 讀取已存在的數(shù)據(jù) fs.readFile( __dirname + "/" + "users.json", "utf8", (err, data) => { if (err) { return console.log(err); }; // 添加用戶 var user = { "user4": { "name":"mohit", "password":"password4", "profession":"teacher", "id":4 } } data = JSON.parse(data); // 將傳入的JSON轉(zhuǎn)換為對象格式 data["user4"] = user["user4"]; console.log(data); res.end( JSON.stringify(data) ); // 將對象轉(zhuǎn)換成為JSON格式 }); }); // 添加顯示用戶詳情路由 app.get("/:id", (req, res) => { // 首先讀取已存在的用戶 fs.readFile( __dirname + "/" + "users.json", "utf8", (err, data) => { data = JSON.parse( data ); var user = data["user" + req.params.id] // 獲取get得到的值 console.log( user ); res.end( JSON.stringify(user) ); }) }) var app = express(); // 不清楚為什么這里要重新定義? // 刪除用戶 app.get("/deleteUser", (req, res) => { // 首先獲取用戶信息 fs.readFile( __dirname + "/" + "users.json", "utf8", (err, data) => { data = JSON.parse( data ); delete data["user" + 2]; console.log( data ); res.end( JSON.stringify(data)); }); }) // 啟動server var server = app.listen(1937, () => { console.log(server.address()); })
不清楚為什么要重新定義一個類。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96400.html
摘要:通過增刪查改,引起資源狀態(tài)的改變,稱為狀態(tài)轉(zhuǎn)移。用于獲取資源的元信息。方法與方法類似,都可以查詢資源的元信息放在的,但不會返回資源的表述。表示請求有問題,如參數(shù)錯誤等。表示當(dāng)前請求的某前置條件不符合。網(wǎng)關(guān)錯誤,從上游服務(wù)器收到無效響應(yīng)。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實踐干貨哦~ 本文由sammyshen 發(fā)表于云+社區(qū)專欄 最近幾年REST API越來越流行,特別是...
摘要:滿足這些約束條件和原則的應(yīng)用程序或設(shè)計就是。需要注意的是,是設(shè)計風(fēng)格而不是標(biāo)準(zhǔn)。同一個路徑,因為請求方式的不同,而去找尋不同的接口,完成對資源狀態(tài)的轉(zhuǎn)變。一個符合風(fēng)格的就可以稱之一個的接口。 RESTful 相信在座的各位對于RESTful都是略有耳聞,那么RESTful到底是什么呢? REST(Representational State Transfer)表述性狀態(tài)轉(zhuǎn)移是一組架構(gòu)約...
摘要:一什么是架構(gòu)即的縮寫,我們把他翻譯為表述性狀態(tài)傳遞,是博士在年他的博士論文中提出來的一種軟件架構(gòu)風(fēng)格。是個無狀態(tài)的協(xié)議,所以狀態(tài)就保存在服務(wù)器端。只要少量的數(shù)據(jù)就可使用,支持和。同時支持,同時提供一系列的查詢方法如。 一、什么是RESTful架構(gòu)? REST即Representational State Transfer的縮寫,我們把他翻譯為表述性狀態(tài)傳遞,是Roy Fielding博...
摘要:方法和對應(yīng)的方法定義定義重啟服務(wù)器,運行上面的程序。五添加支持實現(xiàn)跨域訪問當(dāng)訪問時,你可能需要面對同源策略問題。錯誤如下一般來說,在服務(wù)器端,我們在響應(yīng)中返回額外的訪問控制頭,實現(xiàn)跨域鏈接。 一、理解 REST REST(Representational State Transfer),中文翻譯叫表述性狀態(tài)轉(zhuǎn)移。是 Roy Thomas Fielding 在他2000年的博士論文中提出...
摘要:實現(xiàn)與它們所提供的服務(wù)是解耦的,這促進了獨立的可進化性。正確的情況返回與響應(yīng)碼,在錯誤的情況下他們通常返回或。示例用于刪除由標(biāo)識的資源。成功刪除返回及響應(yīng)正文或沒有正文響應(yīng)??蛻舨淮嬖?,不合法資源命名一切在工藝軟件開發(fā)的命名是成功的關(guān)鍵。 什么是 REST? REST 即表述性狀態(tài)傳遞(英文:Representational State Transfer,簡稱REST)是Roy Fie...
閱讀 3221·2021-11-23 09:51
閱讀 3564·2021-11-09 09:46
閱讀 3671·2021-11-09 09:45
閱讀 2947·2019-08-29 17:31
閱讀 1865·2019-08-26 13:39
閱讀 2724·2019-08-26 12:12
閱讀 3622·2019-08-26 12:08
閱讀 2242·2019-08-26 11:31