GeekFactory

int128.hatenablog.com

宣言的APIクライアントSpring Cloud Feignを使ってみる

Spring Cloud Feignを利用すると、Spring MVCと同じアノテーション(@RequestMapping)を使ってAPIクライアントを定義できます。同じアノテーションが使えるので学習コストを抑えられるメリットがあるでしょう。また、APIサーバとAPIクライアントの仕様が同じ場合は共通の宣言が使えます。APIレスポンスを加工して返すといった単純な場合に役立ちそうです。

GitHub APIクライアントの例を以下に示します。

import org.springframework.cloud.netflix.feign.FeignClient
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestMethod

@FeignClient(name = 'github', url = 'https://api.github.com')
interface GitHubClient {

    @RequestMapping(method = RequestMethod.GET, value = '/users/{userName}/events')
    List<GHEvent> findUserEvents(@PathVariable('userName') String userName)

}

@FeignClientを付けるとHystrixも有効になります。デフォルトのタイムアウト(1秒)は以下の設定で変更できます。

# application.yml
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000

以下の依存関係を追加するとFeignが利用できるようになります。

// build.gradle
dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-feign:1.2.1.RELEASE'
}

Spring Cloud Feignの詳細は下記のドキュメントを参照してください。

http://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.2.1.RELEASE/#spring-cloud-feign

参考までに、サンプルプロジェクトを少しずつ作ってたりします。

github.com