【SpringCloud】微服務前置知識點:restful API dependencies和dependencyManager的區別
微服務前置知識點
1.Restful Api
1.1介紹
1.Representational State Transfer 直接翻譯:表現層狀態轉移
2.REST描述的是在網路中client和server的一種互動形式;REST本身不實用,實用的是如何設計 RESTful API(REST風格的網路介面);
3.Server提供的RESTful API中,URL中只使用名詞來指定資源,原則上不使用動詞。“資源”是REST架構或者說整個網路處理的核心
1.2 以前URL與Rest的URL的區別
以前的URL,結尾一般是動詞來體現動作
http://localhost:8080/demo01/person/add.do(動詞,體現動作)
現在的Restful的URL,結尾是資源,比如id的值, 遮蔽了因為語言的不同,而導致多個系統之間不統一,就不要考慮帶不帶jsp,或者php字尾
根據請求方式來區分來表示不同的動作
method = {RequestMethod.GET}) 查詢/獲取資源
method = {RequestMethod.POST}) 新建資源(也可以用於更新資源)
method = {RequestMethod.DELETE}) 刪除資源
method = {RequestMethod.PUT}) 更新資源
http://localhost:8080/demo01/person/newuser(名詞 體現資源)
對比程式碼
{id} {}表示在地址上的佔位符 與# $類似
@PathVariable註解 表示取地址上的值 如@PathVariable int id
特別提醒
一般path = “user/{id}” 與 @PathVariable int id 要欄位要相同都是id
如果不相同 可以@PathVariable(“id”) int userid 來補救
package com.zx.demo01restful.controller;
import com.zx.demo01restful.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class UserController {
@RequestMapping(path = "user/find.do",method = {RequestMethod.GET})
public Object test01(int id){
User user= new User();
user.setId(id);
user.setUsername("jack");
user.setPassword("123456");
return user;
}
@RequestMapping(path = "user/{id}",method = {RequestMethod.GET})
public Object test02(@PathVariable int id){
log.info("取到的id為:"+id);
User user= new User();
user.setId(id);
user.setUsername("jack");
user.setPassword("123456");
return user;
}
@RequestMapping(path = "user/{id}",method = {RequestMethod.DELETE})
public Object test03(@PathVariable int id){
log.info("刪除了id:"+id);
User user= new User();
user.setId(id);
user.setUsername("jack");
user.setPassword("123456");
return user;
}
}
1.3 RestTemplate
RestTemplate類似postman 可以模擬http請求
介紹
1.spring 提供了RestTemplate的工具類對上述的3種http客戶端工具類進行了封裝,可在spring專案中使用RestTemplate進行服務呼叫。
2.三種http客戶端工具類包都
httpClient apache
okHttp
JDK原生URLConnection java
3.使用restTemplate訪問restful介面非常的簡單粗暴無腦。
請求地址 + 請求方式
請求引數
返回值
使用restTemplate訪問restful介面非常的簡單粗暴無腦。
postForObject(url, requestMap, ResponseBean.class)
參1 請求地址
參2 請求引數
參3 HTTP響應轉換被轉換成的物件型別
Demo02restTemplateApplicationTests
package com.zx.demo02rest_template;
import com.zx.demo02rest_template.domain.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.client.RestTemplate;
@SpringBootTest
@Slf4j
class Demo02restTemplateApplicationTests {
@Test
void test01() {
RestTemplate template=new RestTemplate();
template.delete("http://localhost:8080/user/3");
}
@Test
void test02() {
RestTemplate template=new RestTemplate();
User user=template.getForObject("http://localhost:8080/user/3", User.class);
log.info("user物件:"+user);
}
}
2.dependencies和dependencyManager的區別(其實我感覺dependencyManager有點雞肋)
2.1dependencise
是pom.xml元素,表示依賴項的集合
在父子工程中使用,所有生命在dependencies裡的依賴都會自動引入,並預設被所有的子專案繼承。
2.2dependencyManager
**用於管理jar包的版本,**讓子專案中引用一個依賴而不用顯示的列出版本號。
原理:Maven會沿著父子層次向上走,直到找到一個擁有dependencyManagement元素的專案,然後它就會使用在這個dependencyManagement元素中指定的版本號
但是子專案還得寫依賴,但不寫版本 本質上是宣告依賴與版本(只是說有這個東西,但沒有真正加進來)
父工程
<!--宣告(鎖定jar的版本)mysql,但是不將mysql引入到父工程中 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
</dependencies>
</dependencyManagement>
子工程不用寫版本號
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2.3區別
(1)dependencies即使在子專案中不寫該依賴項,那麼子專案仍然會從父專案中繼承該依賴項(全部繼承)
(2)dependencyManagement裡只是宣告依賴,並不實現引入,因此子專案需要顯示的宣告需要用的依賴。
如果不在子專案中宣告依賴,是不會從父專案中繼承下來的;
只有在子專案中寫了該依賴項,並且沒有指定具體版本,才會從父專案中繼承該項,並且version和scope都讀取自父pom;
另外如果子專案中指定了版本號,那麼會使用子專案中指定的jar版本。
相關文章
- Java 反射【前置知識點】Java反射
- OData API 和 Restful API 這兩個概念的區別和聯絡APIREST
- 【知識點】 gcc和g++的聯絡和區別GC
- SpringCloud微服務的那點事SpringGCCloud微服務
- webservice和restful的區別WebREST
- 一文秒懂Restful、SOAP、RPC、SOA、微服務的區別RESTRPC微服務
- Java常見知識點彙總(⑫)——==和equals的區別Java
- pwn前置知識
- JUC前置知識
- 前置知識—程式和執行緒執行緒
- 最全的微服務知識科普微服務
- 後端開發必備的 RestFul API 知識後端RESTAPI
- Vue常考知識點--computed 和 watch 區別Vue
- 從 BIO、NIO 到 Netty【前置知識點】Netty
- 微服務基礎知識微服務
- 深入理解微服務架構spring的各個知識點(面試必問知識點)微服務架構Spring面試
- Web前置知識(1)Web
- IBM觀點:SOA與微服務區別?IBM微服務
- SpringCloud(1) ——回顧微服務和微服務架構SpringGCCloud微服務架構
- 史上最全的微服務知識科普微服務
- maven </dependencies>和</dependencyManagement> 有什麼區別Maven
- SpringCloud微服務系列(2): 建立一個基於Springboot的RESTFul服務GCCloud微服務Spring BootREST
- SpringCloud大型企業分散式微服務雲架構原始碼之Springboot 重點知識點整理GCCloud分散式微服務架構原始碼Spring Boot
- SOA架構和微服務架構的區別架構微服務
- Web 前置知識——Git 和 GitHub:① Git、GitHub初認識WebGithub
- 域滲透前置知識
- vue面試題(前置知識)Vue面試題
- SpringCloud和Dubbo區別SpringGCCloud
- 微服務架構 spring boot 那些最基礎的知識點微服務架構Spring Boot
- sap知識-MPS和MRP的區別
- SpringCloud微服務治理SpringGCCloud微服務
- springcloud 微服務面試SpringGCCloud微服務面試
- 【知識分享】伺服器動態ip和靜態ip的區別和特點伺服器
- SpringBoot系列-前置知識Spring Boot
- [雲原生微服務架構](十)微服務架構的基礎知識微服務架構
- SDK和API的區別?API
- .NET雲原生應用實踐(二):Sticker微服務RESTful API的實現微服務RESTAPI
- 知識點,JavaScript與Java之間有什麼區別和聯絡?JavaScript