REST風格
REST風格簡介
- REST(Representational State Transfer),表現形式抓狀態轉換
- 傳統風格資源描述形式
- http://localhost/user/getById?id=1
- http://localhost/user/saveUser
- REST風格描述形式
- http://localhost/user/1
- http://localhost/user
- 優點:
- 隱藏資源的訪問行為,無法通過地址得知對資源是何種操作
- 書寫簡化
- 按照REST風格訪問資源時使用行為動作區分對資源進行何種操作
- http://localhost/users ----查詢全部用户信息 ---- GET(查詢)
- http://localhost/users/1 ----查詢指定用户信息---- GET(查詢)
- http://localhost/users ----添加用户信息 ---- POST(新增/保存)
- http://localhost/users ----修改用户信息 ---- PUT(修改/更新)
- http://localhost/users/1 ----刪除用户信息 ----DELETE(刪除)
- 根據REST風格對資源進行訪問稱為RESTful
注意事項
上述行為是約定形式,約定不是規範,可以打破,所以稱REST風格,而不是REST規範
描述模塊的名稱通常使用複數,也就是加s的格式描述,表示此資源,而非單個資源,例如:users、books、accounts......
入門案例
步驟
- 設定http請求動作(動詞)
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/users/{id}",method = RequestMethod.GET)
@ResponseBody
public String save(@PathVariable int id) {
System.out.println("user save..." +id);
return "{'module':'save'}";
}
@RequestMapping(value = "/delete",method = RequestMethod.DELETE)
@ResponseBody
public String delete() {
System.out.println("user delete...");
return "{'module':'user delete'}";
}
@RequestMapping(value = "/users",method = RequestMethod.POST)
@ResponseBody
public String list(@RequestBody User user) {
System.out.println("user delete..."+ user);
return "{'module':'"+user+"'}";
}
}
- 設定請求參數(路徑變量)
@RequestMapping(value = "/users/{id}",method = RequestMethod.GET)
@ResponseBody
public String save(@PathVariable int id) {
System.out.println("user save..." +id);
return "{'module':'save'}";
}
@RequestBody @RequestParam @PathVariable
- 區別
- @RequestBody用於接收url地址傳參或表單傳參
- @RequestParam用於接收json數據
- @PathVariable用於接收路徑參數,使用{參數名稱}描述路徑參數
- 應用
- 後期開發中,發送請求參數超過一個時,以json格式為主,@RequestBody應用較廣
- 如果發送非json格式數據,選用@RequestParam接收請求參數
- 採用RESTful進行開發,當參數數量較少時,例如一個,可以採用@PathVariable接收請求路徑變量,通常用於傳遞id值
案例:基於RESTful頁面數據交互
- 製作SpringMVC控制器,並通過PostMan測試接口功能
@RestController
@RequestMapping("/books")
public class BookController {
@PostMapping
public String save(@RequestBody Book book){
System.out.println("book save==>" + book);
return "{'module':'book save success'}";
}
@GetMapping
public List<Book> getAll(){
System.out.println("book getAll is running ...");
List<Book> bookList=new ArrayList<>();
Book book = new Book();
book.setType("計算機");
book.setName("SpringMVC入門教程");
book.setDescription("小試牛刀");
Book book1 = new Book();
book1.setType("計算機");
book1.setName("SpringMVC實戰教程");
book1.setDescription("一代宗師");
bookList.add(book);
bookList.add(book1);
return bookList;
}
}
- 設置對靜態資源的訪問放行
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
//設置靜態資源訪問過濾,當前類需要設置為配置類,並被掃描加載
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//當訪問/pages/????時候,從/pages目錄下查找內容
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
}
}
- 前端頁面通過異步提交訪問後台控制器
// 彈出添加窗口
openSave() {
this.dialogFormVisible = true;
this.resetForm();
},
//添加
saveBook () {
axios.post("/books",this.formData).then((res)=>{
});
},
//主頁列表查詢
getAll() {
axios.get("/books").then((res)=>{
this.dataList = res.data;
});
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。