国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Restful 表述性狀態(tài)傳遞

Eirunye / 1775人閱讀

摘要:表述性狀態(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

HTTP方法

GET 獲取數(shù)據(jù)
PUT 用于更新和添加數(shù)據(jù)
DELETE 用于刪除數(shù)據(jù)
POST 添加數(shù)據(jù)

RESTful

一種基于http的架構(gòu)方式

資源與URL

REStful全稱為表述性狀態(tài)轉(zhuǎn)移。任何事物只要有被引用的必要都為資源。資源可以為實體,可以為抽象的概念。

資源舉例

用戶的手機號
用戶的個人信息
用戶手機潛在的價值
資源要被識別,要有唯一的標(biāo)識。
URL可以看成資源的地址,可以看成資源的名稱。
以github舉例
倉庫地址 https://github.com/mySoul8012...
個人信息地址 https://github.com/mySoul8012
看URL可知倉庫是在那個用戶名下的

一些設(shè)計技巧

使用-或者_來進行資源的分割
使用/來表示資源的層級關(guān)系
使用?將資源進行過濾 /pulls?state=closed 表示已經(jīng)關(guān)閉的推送請求,URL對應(yīng)的是一種特定的查詢結(jié)果。
.或者:表示同級的資源關(guān)系

統(tǒng)一的資源接口 冪等

指一次或者多次請求一個資源的時候,應(yīng)該具有相同的副作用。屬于語義化的一個詞
HTTP協(xié)議是一種面向資源的應(yīng)用層協(xié)議
GET用于獲取資源,不應(yīng)該有副作用,所以稱為其冪等性,例如請求一個資源的時候,不會改變其狀態(tài),此時說明GET具有冪等性
HTTP的DELETE,會刪除資源,此時具有副作用,但是多次的副作用是相同的,還是具有其冪等性
POST為創(chuàng)建一個資源,每次副作用都是不同的,即沒有冪等性
PUT為更新資源,對于同一個URL一次和多次的是相同的,此時具有冪等性

GET

安全且冪等,表示一種獲取的表示,會有緩存

POST

不安全且不冪等,使用服務(wù)器端的管理的實例號生成資源,創(chuàng)建子資源,用于部分更新資源,如果沒有修改則不會更新資源(一種樂觀鎖的表示)

PUT

PUT不安全且冪等。用客戶端管理的實例,創(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ā)。

應(yīng)用

Github
推特
basecamp
Groupon
yellowpages

POST和PUT

為博客增加一個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)的轉(zhuǎn)移 應(yīng)用狀態(tài)和資源狀態(tài)

狀態(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)即可依賴的信息。

應(yīng)用狀態(tài)的轉(zhuǎn)移

會話狀態(tài)不是作為資源狀態(tài)保存在服務(wù)器端的,而是被客戶端作為應(yīng)用狀態(tài)進行跟蹤的。客戶端的應(yīng)用在服務(wù)器端指引的超鏈接指引下發(fā)生變遷。
為一種架構(gòu)模式

創(chuàng)建RESTful

創(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

相關(guān)文章

  • 那些年,我們一起誤解過的REST

    摘要:通過增刪查改,引起資源狀態(tài)的改變,稱為狀態(tài)轉(zhuǎn)移。用于獲取資源的元信息。方法與方法類似,都可以查詢資源的元信息放在的,但不會返回資源的表述。表示請求有問題,如參數(shù)錯誤等。表示當(dāng)前請求的某前置條件不符合。網(wǎng)關(guān)錯誤,從上游服務(wù)器收到無效響應(yīng)。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實踐干貨哦~ 本文由sammyshen 發(fā)表于云+社區(qū)專欄 最近幾年REST API越來越流行,特別是...

    DesGemini 評論0 收藏0
  • Spring Boot 2.x(十):構(gòu)建優(yōu)雅的RESTful接口

    摘要:滿足這些約束條件和原則的應(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)約...

    nevermind 評論0 收藏0
  • 理解RESTful架構(gòu)與json-server模擬REST api的使用

    摘要:一什么是架構(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博...

    Atom 評論0 收藏0
  • SpringMVC+RestFul詳細示例實戰(zhàn)教程(實現(xiàn)跨域訪問)

    摘要:方法和對應(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年的博士論文中提出...

    U2FsdGVkX1x 評論0 收藏0
  • RESTful API 實踐

    摘要:實現(xiàn)與它們所提供的服務(wù)是解耦的,這促進了獨立的可進化性。正確的情況返回與響應(yīng)碼,在錯誤的情況下他們通常返回或。示例用于刪除由標(biāo)識的資源。成功刪除返回及響應(yīng)正文或沒有正文響應(yīng)??蛻舨淮嬖?,不合法資源命名一切在工藝軟件開發(fā)的命名是成功的關(guān)鍵。 什么是 REST? REST 即表述性狀態(tài)傳遞(英文:Representational State Transfer,簡稱REST)是Roy Fie...

    dayday_up 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<