Java中用RestFul風格開發JavaWeb
什么是RESTful風格?
REST是REpresentational State Transfer的縮寫(一般中文翻譯為表述性狀態轉移),REST 是一種體系結構,而 HTTP 是一種包含了 REST 架構屬性的協議,為了便于理解,我們把它的首字母拆分成不同的幾個部分:
- 表述性(REpresentational): REST 資源實際上可以用各種形式來進行表述,包括 XML、JSON 甚至 HTML——最適合資源使用者的任意形式;
- 狀態(State): 當使用 REST 的時候,我們更關注資源的狀態而不是對資源采取的行為;
- 轉義(Transfer): REST 涉及到轉移資源數據,它以某種表述性形式從一個應用轉移到另一個應用。
簡單地說,REST 就是將資源的狀態以適合客戶端或服務端的形式從服務端轉移到客戶端(或者反過來)。在 REST 中,資源通過 URL 進行識別和定位,然后通過行為(即 HTTP 方法)來定義 REST 來完成怎樣的功能。
實例說明:
在平時的 Web 開發中,method 常用的值是 GET 和 POST,但是實際上,HTTP 方法還有 PATCH、DELETE、PUT 等其他值,這些方法又通常會匹配為如下的 CRUD 動作:
| CRUD 動作 | HTTP 方法 |
|---|---|
| Create | POST |
| Read | GET |
| Update | PUT 或 PATCH |
| Delete | DELETE |
盡管通常來講,HTTP 方法會映射為 CRUD 動作,但這并不是嚴格的限制,有時候 PUT 也可以用來創建新的資源,POST 也可以用來更新資源。實際上,POST 請求非冪等的特性(即同一個 URL 可以得到不同的結果)使其成一個非常靈活地方法,對于無法適應其他 HTTP 方法語義的操作,它都能夠勝任。
在使用 RESTful 風格之前,我們如果想要增加一條商品數據通常是這樣的:
但是使用了 RESTful 風格之后就會變成:
這就變成了使用同一個 URL ,通過約定不同的 HTTP 方法來實施不同的業務,這就是 RESTful 風格所做的事情了,為了有一個更加直觀的理解,引用一下來自how2j.cn的圖:
參考鏈接:http://www.rzrgm.cn/wmyskxz/p/9104368.html
SpringBoot 中使用 RESTful
實體類
@Data @AllArgsConstructor @NoArgsConstructor public class Payment implements Serializable { private Long id; private String serial; }
先試下不采用RestFul風格的情況
@Controller @RestController @Slf4j public class PaymentController { @Autowired private PaymentService paymentService; @PostMapping(value = "/payment/create") public CommonResult create(Payment payment) { int result = paymentService.create(payment); log.info("*****插入結果:" + result); if (result > 0) { return new CommonResult(200, "插入數據庫成功", result); }else{ return new CommonResult(444, "插入數據庫失敗", null); } } @GetMapping(value = "/payment/get") public CommonResult getPaymentById( Long id) { Payment payment = paymentService.getPaymentById(id); log.info("*****插入結果:" + payment); if (payment != null) { return new CommonResult(200, "查詢成功", payment); }else{ return new CommonResult(444, "沒有對應記錄,查詢ID:"+id, null); } }
這不是RestFul風格的情況 我們可以看下路徑

再試下采用RestFul風格
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id) {
Payment payment = paymentService.getPaymentById(id);
log.info("*****插入結果:" + payment);
if (payment != null) {
return new CommonResult(200, "查詢成功", payment);
}else{
return new CommonResult(444, "沒有對應記錄,查詢ID:"+id, null);
}
}
訪問成功,看下效果
-------------------------------------------
個性簽名:獨學而無友,則孤陋而寡聞。做一個靈魂有趣的人!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!
萬水千山總是情,打賞一分行不行,所以如果你心情還比較高興,也是可以掃碼打賞博主,哈哈哈(っ??ω??)っ???!


浙公網安備 33010602011771號