Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Denna starter förenklar användningen av Feign som REST-klient, via Spring Cloud OpenFeign. För att använda den, lägg till följande i tjänstens pom.xml:

...

[1] Ifall FeignConfiguration från Dept-44 importeras så läggs funktionalitet för loggning av request och response, requestId-hantering samt hantering av truststore för domän sundsvall.se (för hantering av anrop mot andra mikrotjänster i WSO2) till.
[2] Möjliggör ytterligare anpassning av Feign-klienten i de fall stöd saknas i ramverket.
[3] Anger den error decoder som ska användas för att översätta de fel som kastas av integrationen.
[4] Anger de interceptorer som ska användas för att förändra det utgående anropet före det skickas.
[5] Anger de anrops-alternativ som ska gälla för klienten avseende timeouts och follow-redirects
[6] En alternativ metod till [5] där follow-redirects default sätts till true
[7] Anger att ett nytt anrop med förnyat access token ska ske ifall autentiseringsuppgifterna har gått ut.
[8] Skapar den FeignBuilderCustomizer som sedan används av OpenFeign-ramverket när klienten skapas.

Endast ([4] kan användas repetitivt för all lägga till multipla RequestInterceptor).

...

FeignBuilder används, precis som det låter, för att bygga en REST-klient vars metoder definieras i ett interface som annoteras med Spring:s annoteringar för request-mappning, t.ex.:

Code Block
languagejava
public interface GithubClient {

    @GetMapping("users/{user}/repos")
    List<Repo> getRepositories(@PathVariable("user") String user);
}

...

Code Block
languagejava
GithubClient ghClient = new FeignBuilder()
    .withBaseUrl("https://api.github.com/") [1]
    .withLogbook(...)                       [2]
    .withOAuth2Client(...)                  [3]
    .withBasicAuthentication(...)           [4]
    .withConnectTimeout(...)                [5]
    .withReadTimeout(...)                   [6]
    .withFollowRedirects(...)               [7]
    .withClient(...)                        |8]
    .withContract(...)                      [9]
    .withEncoder(...)                       [10]
    .withDecoder(...)                       [11]
    .withRetryer(...)                       [12]
    .build(GithubClient.class);             [13]
    
...
List<Repo> repos = ghClient.getRepositories("Sundsvallskommun");
...

[1] Anger bas-URL för REST-klienten som skapas.
[2] Om angiven sätts request- och response-loggning upp.
[3] Om angiven, sätts OAuth2-autentisering upp. Tar in en ClientRegistration, t.ex.:

Code Block
languagejava
@Bean
ClientRegistration clientRegistration() {
    return ClientRegistration.withRegistrationId("someId")
        .clientId("someClientId")
        .clientSecret("someClientSecret")
        .tokenUri("https://somehost.com/token")
        .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
        .build();
}

...

Alternativ 2 - Annoteringar

Först och främst behövs ett klient-interface:

...