Retrofit Tutorial — Getting Started and Creating an Android Client

[멋진 음악 소개] 이봐, 모두 무슨 일이야! futurestudio에서 노먼 여기 대학

이 Retrofit 시리즈의 첫 번째 비디오에 오신 것을 환영합니다 시작하기 전에 자습서로 내용을 찾을 수 있어야합니다 웹 사이트에서 쉽게 복사하여 붙여 넣을 수있는 모든 코드 스 니펫을 제공합니다 이 링크는 아래의 설명에서 가장 먼저 나와 있습니다 좋아, 시작하자! 이 비디오에서는 두 가지를 배웁니다

먼저, 개조 서비스가 무엇인지 설명하겠습니다 왜 그것을 사용해야하는지 둘째로 우리는 GitHub API와 상호 작용하는 데 필요한 모든 단계 구체적으로 모든 공개 GitHub 저장소를 사용자의 Android 앱에 표시 할 수 있습니다 Android Studio를 시작하기 전에 Retrofit에 대해 이야기 해 봅시다

개발중인 스퀘어 개조, "Android 및 Java 용 유형 안전 REST 클라이언트"로 설명 그럼 그게 무슨 뜻 이죠? 내가 이야기 해 줄께 2010 년, 내가 안드로이드 개발을 시작한 마커스와 나는 네트워크 요청을하는 방법을 알아 내려고 노력했다 그 당시에는 도서관이 없었습니다

우리는 모든 것을 스스로해야했습니다 낮은 수준의 Java 연결에서 스레딩, JSON 응답 구문 분석 우리의 REST 클라이언트가 작동했습니다 그러나 그것은 복잡하고 지저분했다 개조로 이러한 지저분한 구현 세부 사항이 모두 숨겨집니다 당신은 네트워크 수준에서 물건을 다룰 필요가 없습니다

스레딩에 신경 쓰지 않아도됩니다 요청 및 응답을 구문 분석합니다 Retrofit 만 있으면됩니다 끝점을 설명하는 것입니다 그들은 무엇을 기대하고 무엇을 응답하고 당신은 좋은거야! 이렇게하면 API와 상호 작용하는 앱을 개발하는 것이 훨씬 쉬워집니다

개조는 초기에는 조금 복잡하지만 장기적으로 볼 때 가치가 있습니다 우리는 안드로이드 애플 리케이션에서이 시리즈의 모든 것을 보여줄 것이지만 자바 서버에서도 사용할 수 있습니다 개조는 두 가지 모두에서 가능합니다 이제 우리의 초간편 GitHub 앱을 시작해 보겠습니다 비디오 끝의 목표는 사용자로부터 리포지토리 목록을 표시하는 것입니다

공상에 들지는 않으나, Retrofit을 사용하기 위해 필요한 모든 단계를 밟을 수있는 좋은 방법입니다 그래서 우리는 무엇을해야합니까? 먼저 Retrofit 종속성을 추가해야합니다 다음으로 우리는 말하고 싶은 끝점을 설명해야합니다 그런 다음 GitHub가 JSON을 데이터 형식으로 사용하므로 JSON 매핑을 설정해야합니다 마지막으로 Retrofit 클라이언트를 만들고 요청을 실행합니다

이제 Android Studio로 전환 할 차례입니다! 좋아, Retrofit을 Gradle 종속 항목으로 추가해야합니다 나는 우리 애플 리케이션의 buildgradle에 여기에있다 종속성에서 여기에 두 개의 종속성을 추가 할 것입니다 개조가 자체적으로 네트워킹을 수행하지는 않습니다

개발자가 쉽게 사용할 수 있도록이 레이어 위에 구축되었습니다 개조는 OkHttp를 네트워크 계층으로 사용하고 [의존성으로] 자동으로 가져옵니다 특정 버전의 OkHttp가 필요하면 여기에 다른 종속성을 추가 한 다음 버전을 지정해야합니다 GitHub는 JSON을 응답 및 요청의 데이터 형식으로 사용하기 때문에 변환기를 사용해야합니다 자바 객체를 JSON으로 변환하거나 JSON에서 변환 할 수 있습니다

우리는 이후 비디오에서 변환기에 대해 자세히 설명 할 것입니다 좋아요,이 프로젝트를 동기화 할 차례입니다 API 끝점에 대해 설명하기 전에 AndroidManifestxml을 확인해야합니다 실제로 네트워크 요청을 할 수있는 권한이있는 경우 우리는 여기에 가기 좋습니다

Retrofit을 더 자주 사용하면 API 엔드 포인트를 설명하는 데 대부분 시간을 할애 할 수 있습니다 이제 우리는 정확한 구현이 실제로 우리에게 중요하지 않으므로 인터페이스를 만들고 있습니다 이 GitHub 클라이언트를 호출했습니다 우리의 목표는 사용자의 저장소 목록을 표시하는 응용 프로그램을 구현하는 것이 었으므로 해당 끝점과 메서드가 필요합니다 한 사용자에 대한 저장소를 확보 할 수 있습니다

이 끝점을 설명하기 시작합니다 우리는 사용자로부터 리파지토리를 갖고 싶기 때문에 [reposForUser]를 호출하자 [강렬한 타이핑 노이즈] 또한 리포지토리를 요청하려는 사용자에 대한 매개 변수를 전달하려고합니다 그래서 우리는 String 사용자와 같은 것을 갖게 될 것입니다 마지막으로 우리는 응답이 무엇인지 설명하고 GitHub 저장소의 목록입니다

그래서 "List <>"이고 이미 "GitHubRepo"클래스를 준비했습니다 이것이 바로이 종말점에 대한 우리의 높은 수준의 이해입니다 물론, 실제 구현을 위해서는이 정보가 충분하지 않습니다 따라서 메소드에 더 많은 [메타] 정보를 주석으로 추가해야합니다 먼저 GET 요청임을 지정해야합니다

그리고 우리는 @GET () 주석에 의해 그렇게합니다 그런 다음 요청의 끝점을 알려줍니다 따라서 우리는 GitHub API를 확인하여 / users 아래에 있는지 확인합니다 우리는 사용자 / fs-opensource가 될 것입니다 및 / repos 일반적으로 전체 URL이 아닌 상대 URL을 사용하려고합니다

하지만 나중에 비디오에서 더 이 정적 URL을 사용할 수는 있지만 사용자의 동적 매개 변수를 전달하기 때문에 다소 괴롭습니다 우리는이 사용자 이름을 동적으로이 사용자 이름으로 대체하려고합니다 개조에는 "경로 매개 변수"라는 것이 있습니다 자세한 내용은 이후 비디오에서 자세히 설명합니다

하지만 기본적으로 우리는 이것을 여기에서 대체합니다 {user}를 대괄호로 묶은 다음이 [@String] 매개 변수에 @Path 주석을 달아 주석 처리합니다 Retrofit에게 우리가 여기서 통과하는 것이 여기에서 교체 될 것이라고 말하십시오 이제 런타임 중에 저장소를 요청할 사용자를 결정할 수 있습니다 거의 완료되었습니다 이런 식으로 남겨두면 동기식 메서드가됩니다

따라서 앱에서 GitHub 저장소를 요청하면 네트워크 연결이 시작되고 서버가 응답하고, 응답을 구문 분석 한 다음 초 후에 우리의 응용 프로그램으로 돌아옵니다 이렇게하면 UI가 완전히 멈추고 Android 40 이상에서 [앱]이 다운되기 시작합니다 UI 스레드로부터 요청을하려면 비동기 적으로 처리해야합니다 개조하면이 [async]가 숨겨 지지만 Call <> 객체로 반환해야합니다

따라서 반환 값은 List <>가 아니며 GitHub 저장소 목록으로 형식화 된 Call <List <>>입니다 다음으로 실제로 GitHub 저장소 란 무엇인지 설명해야합니다 그래서 우리는 GitHubRepo 클래스로 뛰어갑니다 이 클래스에서는 GitHub 저장소와 함께 제공되는 데이터의 종류를 설명합니다 이것은 단지 작은 예제 일 뿐이므로 저장소의 이름 인 하나만 지정합니다

우리는 UI에 실제로 사용할 수 있도록 getter를 빠르게 추가 할 것입니다 우린 끝났어 실제로는 더 많은 속성을 여기에 추가해야하지만 지금은 충분합니다 자, 이제 주요 활동으로 갈 시간입니다 이미 데이터를 표시하는 데 사용할 작은 ListView를 준비했습니다

개장의 심장은 "개장 (Retrofit)"이라고 불리는 수업입니다 쉽게 구성 할 수 있도록 개발자는 유창한 API를 추가했습니다 RetrofitBuilder [개조] 빌더를 만들기 시작하겠습니다

[강렬한 프로그래밍] 일반적으로 지정해야 할 한 가지는 기본 URL입니다 처음에는 상대적 URL 만 사용했음을 기억합니까? 이렇게하면 원하는 때마다 기본 URL을 간단히 변경할 수 있고 모든 끝점을 변경할 필요가 없다는 장점이 있습니다 GitHub의 경우 https://apigithubcom/입니다

다음으로 변환기를 추가해야합니다 이미 GitHub가 JSON을 데이터 형식으로 사용한다고 언급했습니다 우리는 Gson이 자바 객체와 JSON간에 변환 할 필요가있다 그것을 추가합시다addConverterFactory를 사용하여 표준 Gson 인스턴스를 전달하려고합니다 조금 더 멋지게 포맷 해 봅시다 우리는 여기서 끝났어 좀 더 복잡해 보이지만 몇 번이나 개조를하면 이해할 수 있습니다 우리는 건축업자를 얻었으므로 실제 개보수 물체를 만들 차례입니다

Retrofit을 말하고 "개장"이라고하며 간단히 "builderbuild ()"라고합니다 나는 그것이 다소 비어있는 것처럼 보지만, 장래에 우리는 인증과 전역 오류 처리와 같은 것들을 추가 할 것입니다 우리의 준비가 끝났기 때문에 실제 요청을 할 때가되었습니다 먼저 GitHub 클라이언트의 인스턴스가 필요합니다

retrofitcreate ()를 사용하면 GitHubClient 클래스 [인터페이스] 만 전달할 것입니다 이것은 GitHubClient 여야합니다 이 "클라이언트"라고 부르 자 다음 단계는 클라이언트에서 reposForUser () 메소드를 호출하는 것입니다

우리는 우리 자신의 GitHub 사용자 이름 "fs-opensource"를 전달할 것입니다 아시다시피 이것은 작은 Call <> 객체를 반환합니다 마지막 단계는이 Call <> 객체를 활용하는 것입니다 여기에 두 가지 옵션이 있습니다 동 기적으로 또는 비동기 적으로 실행할 수 있습니다

UI 스레드에서 활동 중이므로 "대기열에 넣기"라는 메소드로 비동기로 처리해야합니다 우리는 callenqueue ()라고 말하고 콜백을 기대합니다 콜백은 서버에서 응답을 받으면 실행됩니다 여기서는 두 가지 주요 옵션을 다루어야합니다

onFailure () : 인터넷에 연결되지 않은 것처럼 네트워크에 문제가있는 경우 호출됩니다 서버에서 실제로 응답을 받으면 onResponse ()를 호출합니다 실패 상황을 먼저 다루겠습니다 우리는 단순히 사용자에게 무언가 잘못되었다는 사실을 보여줄뿐입니다 분명히,이 문제를 다루는 가장 좋은 방법은 아니지만 지금은 충분합니다

우리는 응답 객체를 사용할 것입니다 body ()가 List <GitHubRepo> 인 것을 볼 수 있습니다 마지막 단계는 ListView에 데이터를 전달하는 것입니다 나는 이것이 실제로 효과가 있는지보기 위해 기쁩니다! 겁탈 자 : 그것은하지 않습니다 : ( 불행히도, 그것은 작동하지 않았고 기본 URL에 약간의 오타가 있었기 때문입니다 그것을 고치고이 일을 다시 시작합시다

자, 가자 오픈 소스 계정의 모든 GitHub 저장소를 볼 수 있습니다 우리가 배운 것을 빨리 재검토합시다 Retrofit을 사용하여 개요 및 초기 구현을 보았습니다 몇 가지 질문이있는 부분이 많았지 만 걱정하지 않으셔도됩니다

향후 동영상에서 그 부분을 참조하겠습니다 관심을 가져 주셔서 감사합니다 새로운 것을 배운 적이 있다면 비디오를 좋아하십시오 이 연재에서 더 많은 비디오를보고 싶다면 구독하십시오 그것을 바위처럼 만들고 코딩을 즐기십시오! [멋진 아웃로 뮤직]