什麼是 RESTFUL 風格?
REST(英文:Representational State Transfer,簡稱REST)描述了一個架構樣式的網絡系統,指的是一組架構約束條件和原則,滿足這些約束條件和原則的應用程序或設計就是 RESTful。REST並沒有一個明確的標準,而更像是一種設計的風格。
Representational(表述性) : REST 資源實際上可以用各種形式來進行表述,包括 XML、JSON 甚至 HTML——最適合資源使用者的任意形式。
State(狀態):當使用 REST 的時候,我們更關注資源的狀態而不是對資源採取的行爲。
Transfer(轉義)*:REST 涉及到轉移資源數據,它以某種表述性形式從一個應用轉移到另一個應用。
RESTFUL特點
1、每一個URI代表1種資源;
2、客戶端使用GET、POST、PUT、DELETE4個表示操作方式的動詞對服務端資源進行操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源;
3、通過操作資源的表現形式來操作資源;
4、資源的表現形式是XML或者HTML;
5、客戶端與服務端之間的交互在請求之間是無狀態的,從客戶端到服務端的每個請求都必須包含理解請求所必需的信息。
CRUD動作 | HTTP方法 |
---|---|
add(新增) | POST |
update(修改) | PUT |
delete(刪除) | DELETE |
get(查詢) | GET |
一般來說,我們平常都是用的是GET和POST請求,實際上還有很多其他請求方式。在RESTFUL風格里一般就是用上訴這四種對應的關係,但是也不是約定死了的。POST同樣也可以用來做查詢請求,當我們做某些查詢時,希望帶的條件是不要暴露出來時。POST也可以用來做修改操作。
RESTFUL在Java中怎麼使用
一、傳統與REST
方法 | 傳統風格URL | REST風格URL |
---|---|---|
查詢(GET) | /getAllStudent | /sutdent |
新增(POST) | /addStudent?name=關羽 | /student |
修改(PUT) | /updateStudent?id=1&&name=張飛 | /student |
刪除(DELETE) | /deleteStudent?id=1 | /student/1 |
二、Java(Spring)中使用示例
1、創建Student類
使用lombok生成get/set/構造方法
@Data
@AllArgsConstructor
public class Student {
private Long id;
private String name;
private String sex;
}
2、創建Controller類
RESTFUL風格的增刪改查。
@RestController
@RequestMapping("/api/v1")
public class TestController {
/**
* 查詢所有Student
*/
@GetMapping("/student")
public List<Student> getStudents(){
List<Student> students = new ArrayList<>();
students.add(new Student(1L,"曹操","男"));
students.add(new Student(2L,"劉備","男"));
students.add(new Student(3L,"孫權","男"));
students.add(new Student(4L,"小喬","女"));
return students;
}
/**
* 分頁查詢Student
* @param page 當前頁
* @param pageSize 一頁多少條數據
*/
@GetMapping("/student/{page}/{pageSize}")
public List<Student> getStudents(@PathVariable Integer page,@PathVariable Integer pageSize){
List<Student> students = new ArrayList<>();
students.add(new Student(1L,"第" + page + "頁","男"));
students.add(new Student(2L,"一頁查" + pageSize + "條數據","男"));
return students;
}
/**
* 新增Student
* @param student 要新增的Student
*/
@PostMapping("/student")
public Student addStudent(@RequestBody Student student){
return student;
}
/**
* 修改Student
* @param student 要修改的Student
*/
@PutMapping("/student")
public Student updateStudent(@RequestBody Student student){
return new Student(student.getId(),"修改","男");
}
/**
* 刪除Student
* @param id 要刪除Student的id
*/
@DeleteMapping("/student/{id}")
public Student deleteStudent(@PathVariable Long id){
return new Student(id,"刪除","女");
}
}
3、使用POST查看結果
1、查詢全部
2、分頁查詢
3、修改
4、新增
5、刪除
我以前理解的REST風格就是使用GET\POST\DELETE\PUT請求就行了,即在Java中使用對應的@RequestMapping即可,後來才發現,RESTFUL風格在URL地址上就和傳統不一樣。
本文具體參考:使用RESTful風格開發Java Web
原文講的很好,更詳細,本文只是大概演示了一下用法。