REST
- REST는 서버에 존재하는 데이터에 접근하기 위한 규칙의 모음으로 행위, 자원, 표현으로 이루어져 있다.
이러한 REST원칙을 잘 준수하는 API를 RESTful API라고 한다.
- REST API는 HTTP를 설계할 때 지켜야 할 아키텍처인데 OkHttp랑 Retrofit은 이걸 간편하게 구현할 수 있도록 해준다. (REST API를 쉽게 사용하기 위한 도구로 생각해도 된다.)
- Okhttp는 REST API, HTTP 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 라이브러리이다. Retrofit이라는 라이브러리의 베이스가 된다. 그리고 Retrofit은 OkHttp를 기반으로 만들어졌다.
Retrofit 이란?
- Retrofit은 앱 개발 시 서버통신에 사용되는 HTTP API를 자바, 코틀린의 인터페이스 형태로 변환해 안드로이드 개발 시 API를 쉽게 호출할 수 있도록 지원하는 라이브러리입니다.
- 예를들어 https://~~/user/{user}/repos라는 HTTP API가 존재한다고 가정했을 때 Retrofit 라이브러리를 사용하면 HTTP API를 아래 코드와 같은 인터페이스 형태로 변환할 수 있음.
interface GitHubService {
@GET("users/{user}/repos")
fun getRepoList(@Path("user") user: String): Call<List<Repo>>
}
Retrofit을 사용해 서버와 통신하기 전, 개발자가 준비할 단계
- 안드로이드 프로젝트에 Intent 퍼미션 추가하기
- Retrofit 라이브러리 프로젝트에 추가
- 서버개발자와 필요한 데이터에 대해서 논의
- 서버 개발자가 만들어준 API 문서 확인.
1. 안드로이드 프로젝트에 Internet 퍼미션 추가
- 서버와의 통신은 인터넷을 거쳐야 하기 때문에 안드로이드 Manifest 파일에 internet 퍼미션을 추가해줘야 한다.
<uses-permission android:name="android.permission.INTERNET" />
2. Retrofit 라이브러리를 프로젝트에 추가.
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
- Retrofit2는 HTTP API를 자바 인터페이스 형태로 사용하는 라이브러리이고 응답 데이터가 json형식이라서 java <-> gson파싱을 위한 Gson라이브러리와 Gson컨버터 라이브러리를 추가해야 한다.
- 서버와 응답하는 데이터 형식은 JSON 형식이기 때문에 Retrofit에서 Call<>객체 안에서 응답될 Body 타입의 데이터 클래스와 호환되지 않는다.
- 따라서 서버에서 응답되는 json 포맷의 데이터를 데이터 클래스 객체로 파싱해주어야 한다. 이는 클라이언트에서 서버에 데이터를 보낼때도 데이터 클래스 객체를 json 형식으로 보내야 서버가 받아볼 수 있다.
- 데이터 클래스 <-> json 간의 파싱을 위해 Retrofit 라이브러리에 Gson이라는 Java 라이브러리를 추가로 묶어서 사용하면 된다.(Gson은 json 문자열과 java 객체를 서로 변환해주는 라이브러리)
3. 서버 개발자와 필요한 데이터에 대해서 논의하는 시간 가지기
- UI를 보면서 화면을 구현하기 위해 필요한 정보들을 논의 후, 이러한 정보들을 서버에 요청해 받아와야 한다.
4. 서버 개발자가 만들어 준 API 문서 확인하기
- RESTful 통신에 관한 사전지식
- REST는 서버에 존재하는 데이터에 접근하기 위한 규칙들의 모음입니다.
- REST는 3가지의 구성 요소로 이루어져 있는데 1. 행위(HTTP method) + 2. 자원(URL) = 3.표현(GET https://~)
- 이러한 REST 원칙을 잘 준수하는 API를 Restful API라고 한다.
- RESTful하게 짜여진 API는 URL로 서버에 있는 데이터나 서버의 행위를 식별 할 수 있고, GET/POST/PUT/DELETE 이렇게 4가지 행위를 할 수 있다.
- GET : 데이터를 서버에서 얻는 행위(조회)
- POST : 데이터를 서버에 제출하는 행위(저장)
- PUT : 서버의 데이터를 변경하는 행위(정보수정/갱신)
- DELETE : 서버의 데이터를 삭제하는 행위
- 위 4가지 행위로 데이터 처리 기능인 CRUD를 할 수 있다.
- BASE URL 이란 데이터를 요청할 서버의 이름을 말한다. 이 BASE URL 뒤에 붙는 것이 어떤 것인지에 따라 이 서버에 어떤 서비스를 요청하는 API인지 정해지게 된다.