You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手如何用Retrofit调用Pexels API并在同项目中接入多套API?

基于Retrofit对接Pexels API及多API适配方案

对接Pexels API基础实现逻辑

1. 定义数据实体类

根据你需要的字段定义对应实体类,字段名需和接口返回参数匹配,不匹配的可以用@SerializedName做映射:

// 图片地址嵌套实体
public class Src {
    private String original;
    private String medium;
    private String thumbnail;
    // 按需补充其他尺寸字段,省略getter、setter方法
}

// 图片核心信息实体
public class Photo {
    private long id;
    private String url;
    private String photographer;
    private Src src;
    // 省略getter、setter方法
}

// 列表接口返回外层包装实体
public class PhotoResponse {
    private List<Photo> photos;
    // 省略getter、setter方法
}

2. 定义API请求接口

对应Pexels的精选、搜索接口定义请求方法,注意接口需要传入授权密钥:

public interface PexelsApi {
    // 获取精选图片
    @GET("curated")
    Call<PhotoResponse> getCuratedPhotos(@Header("Authorization") String apiKey, 
                                         @Query("page") int page, 
                                         @Query("per_page") int pageSize);

    // 搜索图片
    @GET("search")
    Call<PhotoResponse> searchPhotos(@Header("Authorization") String apiKey, 
                                     @Query("query") String keyword, 
                                     @Query("page") int page, 
                                     @Query("per_page") int pageSize);
}

3. 单API场景调用逻辑

把Pexels的根地址赋值给ROOT_URL,直接调用原有getApiService()方法拿到PexelsApi实例,即可发起请求。


多套API接入的RetrofitClient改造方案

你现有代码硬绑定了固定baseUrl,仅支持单套API,调整后可支持多套API共存,核心思路是按baseUrl缓存不同的Retrofit实例,通用化Service创建逻辑:

public class RetrofitClient {
    // 缓存不同baseUrl对应的Retrofit实例,避免重复创建
    private static final HashMap<String, Retrofit> retrofitCache = new HashMap<>();

    private RetrofitClient() {}

    private static Retrofit getRetroClient(String baseUrl) {
        // 已有对应实例直接返回
        if (retrofitCache.containsKey(baseUrl)) {
            return retrofitCache.get(baseUrl);
        }
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                // 若不同API需要不同拦截器、转换器,可在此处加分支逻辑区分配置
                .build();
        retrofitCache.put(baseUrl, retrofit);
        return retrofit;
    }

    // 泛型通用方法,传入对应API的baseUrl和Service接口Class即可生成实例
    public static <T> T getApiService(String baseUrl, Class<T> serviceClass) {
        return getRetroClient(baseUrl).create(serviceClass);
    }
}

改造后使用方式

  • 接入Pexels API:定义Pexels根地址常量,调用RetrofitClient.getApiService(PEXELS_BASE_URL, PexelsApi.class)获取接口实例
  • 接入第二套API:单独定义第二套API的根地址、对应的Service接口类,传入对应参数调用上述通用方法即可生成对应接口实例,两套API互不干扰。

内容的提问来源于stack exchange,提问作者Abed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:45:03