Retrofit

Retrofit 网络请求协议:

在 Retrofit 整个网络请求参数主要分成 : scheme, authority, path, query, header, body 六块 。
其中authority可以进一步划分为:host:port
示例:host:www.java2s.com : port: 8080

  • 在整个结构中,将scheme 和 authority 这两者的合体称为 baseurl ,接口方法如下:

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.github.com/")
        .build();
    
  • header 分为两种

第一种,静态header:又分为 a: 单个键值对注解 和 b: 多个键值对注解

第二种:动态header : 又分为 a: 局部动态header(分为单个键值对和多个键值对) 和 b: 全局动态header(适用于项目中的header规则一致的情况)

  • 这里采用 OKHttp 的 interceptor 作例:

    private static void initHttpClient(){
        OKHttpClient.Builder httpClientBuilder = new OKHttpClient.Builder();
        if(httpClientBuilder.interceptors() != null){
            httpClientBuilder.interceptors().clear();
        }
    
        httpClientBuilder.addInterceptor(new Interceptor(){
            @Override
            public Response intercept(Chain chain) throws IOException{
    
                //这里可以获取到请求的request 所有的数据
    
                Request request = chain.request();
                String path = request.url().encodedPath();
                String query = request.url().query();
    
                Request interRequest = chain.request().newBuilder()
                    .headers(Headers.of(Map yourHeader))
                    .build();
    
                return chain.proceed(interRequest);
            }
        })
        .connectTimeout(10, TimeUnit.SECONDS)
        .readTimeout(10, TimeUnit.SECONDS);
    
        mOkHttpClient = httpClientBuilder.build();
    }
    
  • 构建Retrofit 实例:

    public static Retrofit retrofit(){
        if(mRetrofit == null){
            initHttpClient();
            mRetrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(mOKHttpClient)
                    .addConvertFactory(GsonConvertFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .builder();
        }
        return mRetrofit;
    }