通過調(diào)用不同的API來整合數(shù)據(jù)。首先從評(píng)分API獲取電影ID列表,然后為每個(gè)ID調(diào)用電影信息服務(wù)獲取詳細(xì)信息。

List < Rating > ratings = new ArrayList < > ();
ratings.add(new Rating("1234", 4));
ratings.add(new Rating("5678", 5));

調(diào)用電影信息服務(wù)

為了獲取電影信息,我們將使用REST模板調(diào)用電影信息服務(wù)。

硬編碼示例

為了簡化演示,我們暫時(shí)硬編碼評(píng)分?jǐn)?shù)據(jù)。在實(shí)際應(yīng)用中,這些數(shù)據(jù)將通過API獲取。

public class Rating {
    private String movieId;
    private int rating;

    public Rating(String movieId, int rating) {
        this.movieId = movieId;
        this.rating = rating;
    }

    // Getters and setters
}

創(chuàng)建電影信息模型

創(chuàng)建一個(gè)電影信息模型類,用于存儲(chǔ)電影詳細(xì)信息。

public class Movie {
    private String movieId;
    private String name;

    public Movie(String movieId, String name) {
        this.movieId = movieId;
        this.name = name;
    }

    // Getters and setters
}

循環(huán)調(diào)用API


對于每個(gè)評(píng)分,我們將循環(huán)調(diào)用電影信息服務(wù)獲取電影詳細(xì)信息。

private List < CatalogItem > getCatalogItems(List < Rating > ratings) {
    return ratings.stream()
        .map(this::getCatalogItem)
        .collect(Collectors.toList());
}

private CatalogItem getCatalogItem(Rating rating) {
    Movie movie = restTemplate.getForObject(
        "http://localhost:8080/movies/" + rating.getMovieId(), 
        Movie.class
    );
    return new CatalogItem(
        movie.getName(), 
        "Test Description", 
        rating.getRating()
    );
}

創(chuàng)建REST模板實(shí)例

在代碼中創(chuàng)建REST模板實(shí)例,用于發(fā)送HTTP請求并接收響應(yīng)。

@Bean
public RestTemplate getRestTemplate() {
    return new RestTemplate();
}

調(diào)用API并轉(zhuǎn)換對象

使用REST模板的getForObject方法調(diào)用API,并將響應(yīng)轉(zhuǎn)換為電影信息對象。

Movie movie = restTemplate.getForObject(
    "http://localhost:8080/movies/" + rating.getMovieId(), 
    Movie.class
);

處理對象轉(zhuǎn)換

確保電影信息類中有空構(gòu)造函數(shù),以便正確反序列化。

public class Movie {
    private String movieId;
    private String name;

    public Movie() {}

    public Movie(String movieId, String name) {
        this.movieId = movieId;
        this.name = name;
    }

    // Getters and setters
}

整合數(shù)據(jù)并返回

將獲取的電影信息整合到目錄項(xiàng)中,并返回給用戶。

public class CatalogItem {
    private String name;
    private String description;
    private int rating;

    public CatalogItem(String name, String description, int rating) {
        this.name = name;
        this.description = description;
        this.rating = rating;
    }

    // Getters and setters
}

異步調(diào)用討論


討論如何使用異步方式調(diào)用API,以提高應(yīng)用的性能和響應(yīng)速度。

private List < CatalogItem > getCatalogItemsAsync(List < Rating > ratings) {
    List < CompletableFuture < CatalogItem >> futures = ratings.stream()
        .map(this::getCatalogItemAsync)
        .collect(Collectors.toList());

    return futures.stream()
        .map(CompletableFuture::join)
        .collect(Collectors.toList());
}

private CompletableFuture < CatalogItem > getCatalogItemAsync(Rating rating) {
    return CompletableFuture.supplyAsync(() - > {
        Movie movie = restTemplate.getForObject(
            "http://localhost:8080/movies/" + rating.getMovieId(), 
            Movie.class
        );
        return new CatalogItem(
            movie.getName(), 
            "Test Description", 
            rating.getRating()
        );
    });
}

錯(cuò)誤處理

處理API調(diào)用過程中可能出現(xiàn)的錯(cuò)誤,確保應(yīng)用的健壯性和可靠性。

private CatalogItem getCatalogItemWithErrorHandling(Rating rating) {
    try {
        Movie movie = restTemplate.getForObject(
            "http://localhost:8080/movies/" + rating.getMovieId(), 
            Movie.class
        );
        return new CatalogItem(
            movie.getName(), 
            "Test Description", 
            rating.getRating()
        );
    } catch (RestClientException e) {
        // Handle error
        return new CatalogItem("Movie not found", "Description", 0);
    }
}

總結(jié)

通過本教程,我們學(xué)習(xí)了如何在微服務(wù)架構(gòu)中調(diào)用和整合不同服務(wù)的API。希望這些內(nèi)容對你有所幫助!

原文引自YouTube視頻:https://www.youtube.com/watch?v=WPKv8NA-ZhE

上一篇:

ASP.NET Core Web API DTO 實(shí)踐:Data Transfer Object 全方位解析

下一篇:

使用Laravel 8和Sanctum創(chuàng)建帶認(rèn)證的RESTful API
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對比試用API 限時(shí)免費(fèi)