Retrofit 2 재연 구

8166 단어
Retrofit 2 재연 구 및 볼 리 와 비교
1. 특성
  • retrofit2.Call<T> 은 서버 에 요청 을 보 내 고 해당 결 과 를 되 돌려 주 며 취소 할 수 있 고 동기 화 요청 도 할 수 있 으 며 비동기 요청 도 할 수 있다.Volley 의 RequestQueue 와 유사 합 니 다.이것 은 형식 이 안전 합 니 다. 모든 Call 은 한 번 만 조정 할 수 있 고 request 와 response 는 일일이 대응 하 며 clone 을 통 해 같은 요청 을 수행 할 수 있 습 니 다.
  • 삽입 가능 한 직렬 화 메커니즘: 현재 JSon, Jackson, Xml, Prorobuf 등 다양한 프로 토 콜 이 실현 되 었 고 사용자 정의 가 쉬 우 며 Converter 인터페이스 만 실현 하면 됩 니 다.하나의 REST adapter 는 여러 개의 Converter 를 연결 할 수 있 고 조회 전략 으로 어떤 컨버터 를 사용 할 지 결정 합 니 다.
    참고: JSON 은 상속 에 대한 제약 이 없 기 때 문 입 니 다.그래서 우 리 는 어떤 정확 한 조건 을 통 해 한 대상 이 JSON 대상 인지 아 닌 지 를 판단 할 수 없다.그래서 JSON 의 converters 는 모든 데이터 에 대해 '내 가 처리 할 수 있어!' 라 고 대답 할 것 이다.이것 은 반드시 기억 해 야 합 니 다. JSON converter 는 반드시 마지막 에 두 어야 합 니 다. 그렇지 않 으 면 당신 의 기대 와 맞지 않 을 것 입 니 다.
  • 유연 한 CallAdapter 는 교체 가능 한 실행 체 제 를 실현 하고 Call 을 필요 한 모든 유형 으로 맞 출 수 있 습 니 다. 쉽게 말 하면 CallAdapter 맞 춤 형 Service 인터페이스의 반환 유형 을 실현 할 수 있 습 니 다. 기본 값 은 Call<T> 입 니 다. 현재 이미 실현 되 었 습 니 다.
  • RxJava - Adapter (Observable 에 적합)
  • Guava - Adapter (ListenableFuture 에 적합)
  • Java8 - Adapter (Complete Future)
  • 주의해 야 할 것 은 이 세 가지 내부 에서 Call 을 자동 으로 호출 하 는 execute () 또는 eque () 방법 입 니 다.
  • 매개 변수 화 응답 대상: Response<T> Response 는 변 환 된 대상 을 가지 고 있 습 니 다. Response. body () 를 통 해 T 형식의 반환 데 이 터 를 얻 을 수 있 습 니 다. Response 대상 에는 응답 코드 (the reponse code), 응답 메시지 (the response message), 응답 헤더 (headers) 도 포함 되 어 있 습 니 다.
  • post 전송 가능 대상 을 매개 변수 로 요청
    @POST("users/new")
    Call<User> createUser(@Body User user);
  • @ Url, 요청 한 url: Example:
    interface GitHubService {
    @GET("/repos/{owner}/{repo}/contributors")
    Call<List<Contributor>> repoContributors(
      @Path("owner") String owner,
      @Path("repo") String repo);
    
    @GET
    Call<List<Contributor>> repoContributorsPaginate(
      @Url String url);
    }
  • 절대 주소 와 상대 주소 Service 인터페이스 방법의 요청 방식 설명 중 "/" 절대 주소 로 시작 하여 전체 url 을 생 성 할 때 host 뒤에 연결 합 니 다. 그렇지 않 으 면 상대 주소 로 baseUrl 뒤에 연결 합 니 다.
  • 응답 헤드 를 분석 하고 연속 요청 을 실현 하 는 데 필요 한 것 은 유창 한 Example: 요청 헤드 의 페이지 데 이 터 를 분석 하여 페이지 기능
    Response<List<Contributor>> response = call.execute();
    // HTTP/1.1 200 OK
    // Link: <https://api.github.com/repositories/892275/contributors?
    page=2>; rel="next", <https://api.github.com/repositories/892275/
    contributors?page=3>; rel="last"
    // ...
    String links = response.headers().get("Link");
    String nextLink = nextFromGitHubLinks(links);
    // https://api.github.com/repositories/892275/contributors?page=2
    Call<List<Contributor>> nextCall =
    gitHubService.repoContributorsPaginate(nextLink);
  • 을 실현 하 는 것 입 니 다.
  • OkHttp 에 있 는 우수한 API 를 통합 하여 Retrofit 2 의 부 피 를 줄 입 니 다. OkHttp 는 현재 매우 작고 초점 을 맞 추 며 사용 하기 좋 은 API 인터페이스 가 많 습 니 다. Retrofit 2 에 서 는 OkHttp 에 대한 인터페이스 맵 도 있 고 우리 가 필요 로 하 는 모든 특성 도 기본적으로 갖 추고 있 습 니 다. 이 는 Retrofit 라 이브 러 리 크기 를 줄 일 수 있 습 니 다. 우 리 는 결국 Retrofit 의 60% 부 피 를 줄 였 습 니 다 (85k 만)., 동시에 더 많은 특성 을 가지 게 되 었 습 니 다.
  • Okio OkHttp 의 실현 은 고성능 의 IO 라 이브 러 리 Okio
  • 를 사용 했다.
  • 차단 기 는 차단기 설정 을 통 해 로그, 복호화, 동적 헤더 추가, 요청 수정 (Url) 등의 기능 을 수행 합 니 다. 메커니즘: 요청 - > 차단기 1 - > 차단기 2 - > 차단기 3 - >... 차단기 n - > HttpEngine 요청 서버 를 통 해 응답 - > 차단기 n - >... - > 차단기 3 - > 차단기 2 - > 차단기 1 - > 응답
  • 시간 초과 메커니즘 OkHttp 에는 기본 시간 초과 메커니즘 이 있 습 니 다. 사용자 정의 가 필요 하지 않 으 면 실제로 어떠한 설정 도 할 필요 가 없습니다.
  • Error Body converter
    // Look up a converter for the Error type on the Retrofit instance.
    Converter<ResponseBody, Error> errorConverter =
        retrofit.responseBodyConverter(Error.class, new Annotation[0]);
    // Convert the error body into our Error type.
    Error error = errorConverter.convert(response.errorBody());
    System.out.println("ERROR: " + error.message);
    
  • Gson 대상 을 사용자 정의 할 수 있 고 TypeAdapter 등 예제
    Gson gson = new GsonBuilder()
        .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
        .create();
    
    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://api.nuuneoi.com/base/")
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();
    
    service = retrofit.create(APIService.class);
  • 를 설정 할 수 있 습 니 다.
  • Response parsing failure case
    On Retrofit 1.9, if the fetched response couldn’t be parsed into the defined Object, failure will be called. But in Retrofit 2.0, whether the response is be able to parse or not, onResponse will be always called. But in the case the result couldn’t be parsed into the Object, response.body() will return as null. Don’t forget to handle for the case.
  • 인증서 고정 (인증서 체인) Https 인증서 HSTS: HTTP Strict Transport Security
  • Mock response OkHttp 는 로 컬 디 버 깅 을 할 수 있 도록 MockWebServer extension 을 제공 합 니 다.
  • 뒤로 호환성 2.0 이후 새로운 버 전 전략 을 채택 합 니 다. 큰 버 전 은 느 리 고 느 리 며 패키지 이름 은 버 전 번호, artifactId 는 버 전 번호 가 있 습 니 다.
  • 구현 방식 은 호출 스 택 순서: adapt - 적합
    call Service method- >serviceMethod.callAdapter.adapt(okHttpCall);
    retrofit 2. Call. execute () 호출 을 수행 하 는 방법, 전송 요청 convert - 변환
    retrofit2.OkHttpCall.execute()->parseResponse(rawCall.execute())
    rawCall. execute () - 실행
    okhttp3.RealCall.execute()
    intercept - 차단 sendRequest - 요청
    ApplicationInterceptorChain.proceed() // in RealCall class
    우선 순위: 적합 - 집행 - 차단 - 요청 - 차단 - 전환
  • proguard
    -dontwarn retrofit2.** -keep class retrofit2.* { ; } -keepattributes Signature -keepattributes Exceptions

  • Volley vs Retrofit2
    Features
    Volley
    Retrofit2
    업로드


    다운로드 하 다.
    ×

    동기 화


    요청 우선 순위

    ×
    다시 시도 하 다


    패 키 징 가능 및 확장 성
    우수 하 다.
    선량 하 다.
    용이 성
    선량 하 다.
    우수 하 다.
    Response
    string/iamge/jsonobject
    대상
    헤더 조작


    문서.
    적다.
    많다
    jar 가방 크기
    92k
    85k
    API
    적다.
    풍부 하 다.
    모델 코드
    많다
    적다.
    Okhttp


    Http Cache


    Okhttp


    동적 Url


    Restful Api
    ×

    차단기
    ×

    rxjava/guava/java8
    ×

    버 전 업데이트
    느리다
    빠르다.
    최신 버 전
    1.0.19(2015/9)
    2.0.2(2016/4/11)
    플랫폼
    android
    java/android
    Restful API
    지원 가능
    지원 됨
    Retrofit 기본 패키지 방안:https://github.com/simplify20/RetrofitDemos 참고:https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/ https://inthecheesefactory.com/blog/retrofit-2.0/en http://riggaroo.co.za/retrofit-2-mocking-http-responses/ http://vickychijwani.me/retrofit-vs-volley/ http://stackoverflow.com/questions/29119253/retrofit-okhttp-client-how-to-cache-the-response/31097050#31097050https://github.com/square/retrofit/issues/820 http://stackoverflow.com/questions/32579754/retrying-the-request-using-retrofit-2/32840088#32840088

    좋은 웹페이지 즐겨찾기