<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                因為這次開發要遵循restful進行開發,所以在學習http的各種請求時,插入對restful知識的學習。哎~生命不息。學習不止啊~ 累且堅強啊~ 廢話不多說進入正題... ... **安全方法**是指不修改資源的HTTP方法,更準備的說法是其不改變資源表示形式的HTTP方法。但是仍然可能改變服務器上的內容或資源,但這必須導致有不同的表現形式。 | 方法 | 安全性 | | --- | --- | | get | yes | | put | no | | post | no | | delete | no| | head| yes | | patch| yes | | options| yes | 詳細解釋: **GET**:用于獲取一個具體的資源或者一個資源列表 **POST**:創建一個新的資源 **PUT**:以整體的方式更新服務器上的一個資源(客戶端提供改變后的完整資源) **PATCH**:只更新服務器上的一個資源的一個屬性(客戶端提供改變的屬性) **DELETE**:刪除一個資源 **HEAD**:獲取一個資源的元數據,例如,指向了解一個資源文件的大小、修改日期等; **OPTIONS**:用于獲取資源支持的所有http方法(獲取信息,關于資源的哪些屬性是客戶端可以改變的) ***** ## **restful與前端** RESTful 是一種遵守 REST 設計的架構風格。REST 既不是標準,也不是協議,而是一組架構約束條件和設計指導原則,一種基于HTTP、URI、XML 等現有協議與標準的開發方式。 ### **一、REST** REST它是 Representational State Transfer的縮寫,表示**表述性狀態轉移**, “表述性”:是“資源”的“表述性” * **資源**:REST是面向資源的,資源是網絡上的一個實體,可以是一個文件、一張圖像、一首歌曲、甚至是一種服務。資源可以設計得很抽象,但只要是具體信息,就可以是資源,因為資源的本質是**一串二進制數據**。并且每個資源必須有URL,通過URL來找到資源。 * **表述**:資源在某個特定時刻的狀態說明被稱為表述(representation),表述由數據和描述數據的元數據(例如HTTP報文)組成。資源的表述有多種格式,這些格式也被稱為MIME類型,例如文本的txt格式、圖像的png格式、視頻的mk格式等。一個資源可以有多種表述,例如服務器響應一個請求返回的資源可以是JSON格式的數據,也可以是XML格式的數據。 * **表述性狀態轉移**:表述性狀態轉移的目的是操作資源,通過轉移和控制資源的表述就能實現此目的。例如客戶端可以向服務器發送GET請求,服務器將資源的表述轉移到客戶端;客戶端也可以向服務器發送POST請求,傳遞表述改變服務器中的資源狀態。 ### **二、約束條件** REST給出了6種約束條件,通信兩端在遵循這些約束后,就能提高工作效率,改善系統的**可伸縮性**、**可靠性**和**交互的可見性**,還能**促進服務解耦**。 **客戶端-服務器**:客戶端與服務器分離關注點,客戶端關注用戶接口,服務器關注數據存儲客戶端向服務器發起接口請求(獲取數據或提交數據),服務器返回處理好的結果給客戶端,客戶端再根據這些數據渲染界面,同一個接口可以應用于多個終端(例如Web、iOs或 Android)大大改善了接口的可移植性,并且只要接口定義不變,客戶端和服務器可以獨立開發、互不影響。 **無狀態**:兩端通信必須是無狀態的,服務器不會保存上一次請求的會話狀態,會話狀態要全部保存在客戶端,從客戶端到服務器的每個請求都要附帶一些用于理解該請求的信息,例如在后臺管理系中,大部分都是需要身份認證的請求,所以都會附帶用戶登錄狀態。 **緩存**:響應的資源可以被標記為可緩存或禁止緩存,如果可以緩存,那么客戶端可以減少與服務器通信的次數,降低延遲、提高效率。 **統一接口**:統一接口是REST區別于其他架構風格的核心特征,接口定義包括4個部分 1. 資源的識別(identification of resources)也就是用一個URL指向資源,要獲取這個資源,只要訪問它的URL即可,URL就是資源的地址或標識符。REST對URL的命名也有要求,**在URL中不能有動詞,只能由名詞組成**。 2. 通過表述對資源執行操作(manipulation of resources through representations)在表述中包含了操作該資源的指令,例如用HTTP的請求首部 n/firb4, l kn http airhs accept tw&it, HTTP hiit(tn get,指定需要的表述格式,用HTTP方法(如get、POST等)完成對數據的增刪改查工作,用HTTP響應狀態碼表示請求結果。 3. 自描述的消息(self-deive messages)包含如何處理該消息的信息,例如消息所使用的表述格式、能否被緩存等。 4. 作為應用狀態引擎的超媒體(hypermedia as the engine of application state)超媒體并不是一種技術,而是一種策略,建立一種客戶端與服務器之間的對話方式。超媒體可以將資源互相連接,并能描述它們的能力,告訴客戶端如何構建HTTP請求。 **分層系統:**將架構分解為若干層,降低層之間的耦合性。每個層只能和與它相鄰的層進行通信。 **按需代碼:**這是一條可選的約束,支持客戶端下載并執行一些代碼(例如 Java AppletJava或 Flash)進行功能擴展。 ### **三、設計 RESTful API需要考慮的幾個方面** 1. 通信用HTPS安全協議。 2. 在URL中加入版本號,例如“vl/animals's 3. URL中的路徑(endpoint)不能有動詞,只能用名詞。 4. 用HTTP方法對資源進行增刪改查的操作。 5. 用HTTP狀態碼傳達執行結果和失敗原因。 6. 為集合提供過濾、排序、分頁等功能。 7. 用查詢字符串或HTTP首部 (7)AifF*f* HTTP # accpet i1tw#t,ti& pETiT.進行內容協商,指定返回結果的數據格式。 8. 及時更新文檔,每個接口都有對應的說明。 ``` ### 請求方式的舉例: * GET /zoos:列出所有動物園 * POST /zoos:新建一個動物園 * GET /zoos/ID:獲取某個指定動物園的信息 * PUT /zoos/ID:更新某個指定動物園的信息(提供該動物園的全部信息) * PATCH /zoos/ID:更新某個指定動物園的信息(提供該動物園的部分信息) * DELETE /zoos/ID:刪除某個動物園 * GET /zoos/ID/animals:列出某個指定動物園的所有動物 * DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物 ``` ``` ### 一些狀態碼: * 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 - [*]:服務器發生錯誤,用戶將無法判斷發出的請求是否成功 ``` ### **四、傳統接口寫法與Restful API區別** * [ ] 一個文件操作接口,傳統模式: * api/getfile.php - 獲取文件信息,下載文件 * api/uploadfile.php - 上傳創建文件 * api/deletefile.php - 刪除文件 * [ ] RESTfu,api/file 只需要這一個接口: * GET 方式請求 api/file - 獲取文件信息,下載文件 * POST 方式請求 api/file - 上傳創建文件 * DELETE 方式請求 api/file - 刪除某個文件
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看