# restful
## 1. restful開發風格
### 1.1 原因
1. 網絡程序分為前端和后端兩部分,前端設備多種多樣(筆記本,手機,其他專用設備)。
2. 為了解決多種前端設備與后端服務的信息(數據)交換,所以要同一開發規范
### 1.1 restful特點
> 1. 在RESTful架構中,每個網址代表一種資源(resource),所以網址中不能有動詞,只能有名詞,而且所用的名詞往往與數據庫的表格名對應。一般來說,數據庫中的表都是同種記錄的"集合"(collection),所以API中的名詞也應該使用復數。
舉例來說,有一個API提供動物園(zoo)的信息,還包括各種動物和雇員的信息,則它的路徑應該設計成下面這樣。
```
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
```
> 1. 一般資源操作只有新增、刪除、查詢、更新,對應HTTP協議中四類請求:POST、DELETE、GET、PUT。其中,后三個操作是冪等的。(什么是冪等?)
> 2. 查詢資源時,更多的參數,比如分頁、排序、過濾條件,一般都會放在URL的查詢部分(Query String)。
> 3. 新增、更新資源,關于資源實體的內容,一般放在請求體(Request Body)中。
**實際發送請求,還需要有動詞,表示對該資源執行什么樣的操作。那么超出這個范圍的操作該如何擴展?**
REST操作返回什么內容?對于刪除、新增、更新等操作,通常是返回操作是否成功的標識;如果失敗,需要返回錯誤代碼和消息,方便客戶端做進一步處理。如果是查詢操作,通常包含實體或者實體列表。
在最佳實踐中,應當還應該返回與此操作相關的其他操作。比如,查詢得到實體的響應中,應包含該實體的刪除、更新操作的地址。
請求和返回的Body,采用什么格式?常見的格式包括XML/JSON/HTML。
### 1.2 資源操作
于資源的具體操作類型,由HTTP動詞表示。常用的HTTP動詞有下面五個(括號里是對應的SQL命令)。
```
GET(SELECT):從服務器取出資源(一項或多項)。
POST(CREATE):在服務器新建一個資源。
PUT(UPDATE):在服務器更新資源(客戶端提供改變后的完整資源)。
PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
DELETE(DELETE):從服務器刪除資源。
```
REST的核心在于,當你設計一個系統的時候,資源是第一位的考慮,你首先從資源的角度進行系統的拆分、設計,而不是像以往一樣以操作為角度來進行設計
我們平時搞系統是這樣的:
> 1. 有新建用戶功能
> 2. 新建用戶需要一個URL
> 3. 往這個URL發送的數據要定義好
> 4. 開始寫后端和前端
### 1.3 URI
可以用一個URI(統一資源定位符)指向資源,即每個URI都對應一個特定的資源。要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或識別符。一般的,每個資源至少有一個URI與之對應,最典型的URI即URL。(uri是資源定位的總稱包括url,file,ftp)
### 1.4 無狀態
1. 所謂無狀態的,即所有的資源,都可以通過URI定位,而且這個定位與其他資源無關,也不會因為其他資源的變化而改變。
2. 有狀態和無狀態的區別,舉個簡單的例子說明一下。如查詢員工的工資,如果查詢工資是需要登錄系統,進入查詢工資的頁面,執行相關操作后,獲取工資的多少,則這種情況是有狀態的,因為查詢工資的每一步操作都依賴于前一步操作,只要前置操作不成功,后續操作就無法執行;**如果輸入一個url即可得到指定員工的工資,則這種情況是無狀態的,因為獲取工資不依賴于其他資源或狀態,且這種情況下,員工工資是一個資源,由一個url與之對應,可以通過HTTP中的GET方法得到資源,這是典型的RESTful風格。**
- 計算機網絡
- 基礎_01
- tcp/ip
- http轉https
- Let's Encrypt免費ssl證書(基于haproxy負載)
- what's the http?
- 網關
- 網絡IO
- http
- 工具
- Git
- 初始本地倉庫并上傳
- git保存密碼
- Gitflow
- maven
- 1.生命周期命令
- 聚合與繼承
- 插件管理
- assembly
- 資源管理插件
- 依賴范圍
- 分環境打包
- dependencyManagement
- 版本分類
- 找不到主類
- 無法加載主類
- 私服
- svn
- gradle
- 手動引入第三方jar包
- 打包exe文件
- Windows
- java
- 設計模式
- 七大原則
- 1.開閉原則
- 2. 里式替換原則
- 3. 依賴倒置原則
- 4. 單一職責原則
- 單例模式
- 工廠模式
- 簡單工廠
- 工廠方法模式
- 抽象工廠模式
- 觀察者模式
- 適配器模式
- 建造者模式
- 代理模式
- 適配器模式
- 命令模式
- json
- jackson
- poi
- excel
- easy-poi
- 規則
- 模板
- 合并單元格
- word
- 讀取
- java基礎
- 類路徑與jar
- 訪問控制權限
- 類加載
- 注解
- 異常處理
- String不可變
- 跨域
- transient關鍵字
- 二進制編碼
- 泛型1
- 與或非
- final詳解
- Java -jar
- 正則
- 讀取jar
- map
- map計算
- hashcode計算原理
- 枚舉
- 序列化
- URLClassLoader
- 環境變量和系統變量
- java高級
- java8
- 1.Lambda表達式和函數式接口
- 2.接口的默認方法和靜態方法
- 3.方法引用
- 4.重復注解
- 5.類型推斷
- 6.拓寬注解的應用場景
- java7-自動關閉資源機制
- 泛型
- stream
- 時區的正確理解
- StringJoiner字符串拼接
- 注解
- @RequestParam和@RequestBody的區別
- 多線程
- 概念
- 線程實現方法
- 守護線程
- 線程阻塞
- 筆試題
- 類加載
- FutureTask和Future
- 線程池
- 同步與異步
- 高效簡潔的代碼
- IO
- ThreadLocal
- IO
- NIO
- 圖片操作
- KeyTool生成證書
- 壓縮圖片
- restful
- 分布式session
- app保持session
- ClassLoader.getResources 能搜索到的資源路徑
- java開發規范
- jvm
- 高并發
- netty
- 多線程與多路復用
- 異步與事件驅動
- 五種IO模型
- copy on write
- code style
- 布隆過濾器
- 筆試
- 數據庫
- mybatis
- mybatis與springboot整合配置
- pagehelper
- 分頁數據重復問題
- Java與數據庫之間映射
- 攔截器
- 攔截器應用
- jvm
- 堆內存測試
- 線程棧
- 直接內存
- 內存結構
- 內存模型
- 垃圾回收
- 調優
- 符號引用
- 運行參數
- 方法區
- 分帶回收理論
- 快捷開發
- idea插件
- 注釋模板
- git
- pull沖突
- push沖突
- Excel處理
- 圖片處理
- 合并單元格
- easypoi
- 模板處理
- 響應式編程
- reactor
- reactor基礎
- jingyan
- 規范
- 數據庫