昨天我們介紹了兩種可以打外部api的套件,一個是OkHttp,一個則是Feign,今天我們要來實際的玩玩看Feign!
pom檔
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>4.0.4</version>
</dependency>
假設我們要打 https://jsonplaceholder.typicode.com/, 這網站來取得一些資料,我們選擇要打get,/posts/1來取得資料!
首先我們先用Postman來打打看!
Postman可以協助開發人員建立、測試和分享API請求。它可以幫助我們測試與打Api。
接著我們可以用Feign來打同樣的api,它應該要回同樣的結果。這樣就可以確定我們的程式是否真的有打到外部服務XD
@FeignClient(name = "example", url = "https://jsonplaceholder.typicode.com")
interface ExampleFeignClient {
@GetMapping("/posts/1")
fun getPost(): String
}
我們先在Service層定義外部系統的Url,以及我們要打的api。
這邊使用feignClient來把剛剛我們創立的Interface注入進來。
@RestController
class CustomerController @Autowired constructor(
private val customerService: CustomerService,
private val feignClient: ExampleFeignClient,
) {
@GetMapping("/api/v1/test")
suspend fun feignApi(): ResponseEntity<String> {
return ResponseEntity.ok(feignClient.getPost())
}
}
我們設立一個end point是/api/v1/test,然後它會打到外部的服務。
Serivice(https://jsonplaceholder.typicode.com/posts/1),
可以看到我們的Feign成功打到外部的Service! 這樣就可以把外部服務的資料來做一些處理,最後再回給我們的使用者,我們就得到更多的彈性了,有些功能需要的話,可以Call外部的服務,雖然這樣會增加依賴性,會導致對方服務掛了,我們的服務也可能跟著掛彩QQ
在main的檔案加入EnableFeignClients來啟用Feign客戶端
@EnableAutoConfiguration
@EnableFeignClients
@ComponentScan(basePackages = ["controller", "service", "Repo", "utils"])
open class Main
fun main(args: Array<String>) {
runApplication<Main>(*args)
}
今天我們用Feign來打到外部的服務,這樣就可以使用外部服務來擴充我們自己的服務,比如說簽核系統,又或者是計算系統等。