SpringBoot是搭建微服務(wù)的利器,那么微服務(wù)于微服務(wù)之間如果交互調(diào)用?RPC是一種,但是Restful風(fēng)格的Http請求也是其中一種祠挫。
什么是Restful
REST(英文:Representational State Transfer,簡稱REST)描述了一個架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng)悼沿,比如 web 應(yīng)用程序等舔。它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一糟趾。在目前主流的三種Web服務(wù)交互方案中慌植,REST相比于SOAP(Simple Object Access protocol,簡單對象訪問協(xié)議)以及XML-RPC更加簡單明了义郑,無論是對URL的處理還是對Payload的編碼蝶柿,REST都傾向于用更加簡單輕量的方法設(shè)計和實現(xiàn)。值得注意的是REST并沒有一個明確的標(biāo)準(zhǔn)非驮,而更像是一種設(shè)計的風(fēng)格交汤。-- 摘自百度百科
環(huán)境工具
- JDK1.8
- MySQL5.7
- Postman
- IDEA
- Maven3
當(dāng)前使用的Spring Boot的版本為1.5.8.RELEASE
創(chuàng)建項目
IDEA -> New -> Project -> Spring Initializr -> 填寫Group和Artifact -> Next -> 選擇Web,勾選Web劫笙;選擇SQL芙扎,勾選MyBatis和MySQL -> Next -> Finish
創(chuàng)建相應(yīng)包、類和文件
需要創(chuàng)建一些包填大、類和相應(yīng)的文件
com.roachfu.tutorial
controller
DemoController.java
entity
Demo.java
mapper
DemoMapper.java
service
impl
DemoServiceImpl.java
DemoService.java
SpringBootRestfulApplication.java
Restful 風(fēng)格
我們知道Http是有很多種請求方式的:
GET
戒洼、HEAD
、POST
允华、PUT
圈浇、PATCH
寥掐、DELETE
、OPTIONS
磷蜀、TRACE
召耘。
我們常用的有POST
、DELETE
蠕搜、PUT
怎茫、GET
收壕,分別對應(yīng)我們的增刪改查妓灌。
-
GET
/users:獲取用戶列表 -
GET
/users/{uid} 獲取某個用戶信息 -
POST
/users 新增一個用戶 -
PUT
/users/{uid} 修改某個用戶信息 -
DELETE
/users/{uid} 刪除某個用戶
更多資料請看RESTful API 設(shè)計指南
application.properties配置
設(shè)置了上下文路徑,MyBatis配置以及連接MySQL數(shù)據(jù)庫
server.context-path=/tutorial
mybatis.type-aliases-package=com.roachfu.tutorial.entity
mybatis.configuration.map-underscore-to-camel-case=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.56.2:3306/spring_boot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=Fanshu_123456
DemoController
@RestController
@RequestMapping("/demos")
public class DemoController {
@Resource
private DemoService demoService;
@PostMapping
public int add(@RequestBody Demo demo){
return demoService.save(demo);
}
@GetMapping
public List<Demo> queryList(){
return demoService.getList();
}
@GetMapping("/{id}")
public Demo queryOne(@PathVariable("id")Integer id){
return demoService.getOne(id);
}
@PutMapping("/{id}")
public int update(@PathVariable("id")Integer id, @RequestBody Demo demo){
demo.setId(id);
demo.setUpdateTime(new Date());
return demoService.update(demo);
}
@DeleteMapping("/{id}")
public int delete(@PathVariable("id")Integer id){
return demoService.delete(id);
}
}
-
@GetMapping
等價于@RequestMapping(method = RequestMethod.GET)
-
@GetMapping("/{id}")
等價于@RequestMapping(value = "/{id}", method = RequestMethod.GET)
-
@PostMapping
等價于@RequestMapping(method = RequestMethod.POST)
以此類推蜜宪。
DemoServiceImpl
@Service
public class DemoServiceImpl implements DemoService {
@Resource
private DemoMapper demoMapper;
@Override
public List<Demo> getList() {
return demoMapper.selectList();
}
@Override
public Demo getOne(Integer id) {
return demoMapper.selectOne(id);
}
@Override
public int save(Demo demo) {
return demoMapper.insert(demo);
}
@Override
public int update(Demo demo) {
return demoMapper.update(demo);
}
@Override
public int delete(Integer id) {
return demoMapper.delete(id);
}
}
至于entity虫埂,mapper等在前面的教程中已經(jīng)有展示過了,也可以查看項目源碼
演示結(jié)果
由于直接在瀏覽器中輸入URL圃验,請求只支持GET請求掉伏,這樣就無法看到其他請求方式的效果。
所以我們要借助Postman來進(jìn)行測試澳窑。需要設(shè)置content-type
為application/json
- 運行
SpringBootRestfulApplication.java
中的main
方法斧散。 - 打開Postman,并設(shè)置對應(yīng)的方法摊聋,例如用
POST
請求新增一個Demo
- 測試其他的方法并查看結(jié)果
GET http://localhost:8080/tutorial/demos
GET http://localhost:8080/tutorial/demos/1
PUT http://localhost:8080/tutorial/demos/1
DELETE http://localhost:8080/tutorial/demos/1
好吧鸡捐,優(yōu)雅的Restful API 我們就搞定了