API Application Programming Interface
서버가 클라이언트에게 자원을 잘 활용할 수 있도록 제공하는 인터페이스 interface
ᖜ ‿ᖜ 인터페이스 interface의 사전적 의미
의사소통이 가능하도록 만들어진 접점
REST API Representational State Transfer
ᖜ ‿ᖜ Representational State Transfer의 사전적 의미
대표하는 상태 전송
HTTP URI를 통해 서버와 클라이언트가 통신하는 아키텍쳐
자원을 명시하고 HTTP Method로 해당 자원에 대한 CRUD 명령을 적용
HTTP Method
GET
서버에게 데이터를 달라는 요청(열람)할 때 사용
HEAD
GET과 같지만 서버가 응답할 때 Body 없이 Header만 리턴
POST
서버에게 데이터를 전송하는 요청할 때 사용
PUT
서버에서 요청 *URI의 데이터를 수정하거나 새로 추가하도록 요청할 때 사용
PATCH
서버의 데이터를 일부 수정할 때 사용
DELETE
서버에서 요청 *URI의 데이터를 삭제하도록 요청할 때 사용
TRACE
클라이언트로부터 수신한 요청을 응답에 포함시켜서 전달(디버깅용)
OPTIONS
서버에서 특정 데이터가 어떤 Method를 지원하는지 알아볼 때 사용
CRUD Operation
Create : 생성(POST)
Read : 조회(GET)
Update : 수정(PUT, PATCH)
Delete : 삭제(DELETE)
ᖜ ‿ᖜ 용어정리
HTTP Hypertext Transfer Protocol : 웹에서 서버와 브라우저가 데이터를 주고 받을 때 사용하는 프로토콜
Protocol 프로토콜 : 통신 규약. 데이터를 주고 받는 방식에 대한 규칙
URI Uniform Resource Identifier : 웹에서 사용되는 자원 식별자
Architecture 아키텍쳐 : 애플리케이션을 설계, 제작하는데 사용하는 패턴과 기술의 총칭
3요소
1. 자원 Resource
고유의 URI(URL)을 가진 서버의 모든 데이터
2. 행위 Verb
클라이언트가 HTTP Method로 자원을 조작하는 것
3. 표현 Representation
클라이언트 행위에 서버가 응답(JSON, XML)을 보내는 것
특징
- 자체적인 표현 구조 : 고유한 URI로 식별되며 JSON, XML 등의 형식으로 표현
- 일관된 인터페이스 : HTTP를 사용할 수 있는 환경이라면 플랫폼에 상관없이 사용할 수 있으며 리소스의 타입에 상관 없이 같은 형태의 요청으로 처리
- 상태가 없는 통신(무상태성 stateless) : 각 요청은 서버에서 필요한 모든 정보를 포함하고 있어야 한다. 이를 통해 서버는 각 요청을 개별적으로 처리하여 구현이 쉽고 서버의 부담이 적다.
- 서버-클라이언트 구조 : 서버는 API 제공 및 데이터저장소, 클라이언트는 유저에 관한 처리와 인터페이스로 역할 및 관심사가 분리되어 독립성이 높아진다.
- 캐시 처리 가능 : HTTP를 사용하기 때문에 웹의 기본 인프라를 사용할 수 있다. 따라서 캐싱가능 여부를 통해 성능을 향상시킬 수 있다. 캐시 기능을 이용하면 같은 URI에 대한 반복된 요청을 효율적으로 처리할 수 있다.
- 계층화 : 클라이언트는 어느 서버와 통신하는지 알 수 없으므로 서버와 클라이언트 사이에 다양한 계층(보안, 로드 밸런싱 등)이 존재할 수 있다.
JSON JavaScript Object Notation
경량의 DATA 교환 형식
저장 및 전송에 많이 사용되며 하나의 NAME(String)과 VALUE로 이루어져있다.
JSON 배열은 대괄호[] 내 쉼표로 여러 데이터를 포함한다.
GSON
Google에서 제공하는 오픈소스 라이브러리
JSON 데이터를 프로그래밍 언어로 직렬화 Serialization 또는 역직렬화 Deserialization할 때 최적화된 알고리즘을 사용하여 빠르고 효율적
Retrofit
Square Inc.에서 개발한 HTTP 클라이언트 라이브러리
장점
- 간결성
복잡한 HTTP API 요청을 쉽고 간결하게 만들 수 있다.
간단한 어노테이션을 통해 요청 메서드와 URL 정의 - 안정성과 확장성
내부적으로 OkHttp 라이브러리를 사용하여 통신, 이를 통해 안정적인 통신이 가능
인터셉터를 사용하여 요청/응답 프로세스를 확장하거나 수정할 수 있습니다. - 다양한 플러그인과 컨버터 지원
다양한 데이터 형식(JSON, XML 등)에 대해 데이터 변환 컨버터를 제공합니다.
RxJava, Coroutines와 같은 비동기 프로그래밍 라이브러리와 연동 가능합니다.
@SerializedName 어노테이션annotation
JSON 키는 일반적으로 snake_case 규칙을 따르기 때문에 어노테이션으로 변수명에 대한 camelCase 규칙을 유지할 수 있다.
이름 변경이 없는 경우라도 사용하는 게 좋다. 애플리케이션을 Release 할 때 소스 코드가 난독화 되는 과정에서 Java 필드가 변환되고, 이로 인해 Gson 매핑에 오작동이 일어날 수 있기 때문
API key
외부로 유출되면 안되는 정보는 .properties 파일로 빼서 사용하면 좋다. BuildConfig와 resValue 파일은 generated 파일로 /build 디렉토리 아래에 생기기 때문에 .gitignore 대상으로 노출되지 않는다.
Retrofit으로 RestAPI
1. 라이브러리 추가 & INTERNET 권한 추가
gradle과 manifast에 추가해 라이브러리와 권한허가를 받는다.
2. 응답 데이터 정의
데이터 클래스를 만들어 응답 데이터를 받는다.
3. API 인터페이스 정의
API 통신을 위한 인터페이스를 정의한다.
ᖜ ‿ᖜ 도움받은 곳
https://s2choco.tistory.com/23
https://s2choco.tistory.com/28
https://square.github.io/retrofit/
https://tibetsandfox.tistory.com/19
'안드로이드와 앱 > 안드로이드' 카테고리의 다른 글
SharedPreferences (0) | 2024.08.05 |
---|---|
알림 Notification (0) | 2024.07.29 |
프래그먼트 Fragment (0) | 2024.07.29 |
안드로이드 앱개발 숙련 강의 [View Binding, Adapter View, RecyclerView, Fragment, Dialog, Notification] (0) | 2024.07.11 |
안드로이드 앱개발 4주차 강의 [액티비티] (0) | 2024.06.19 |