SW 공부노트
REST API란? 본문
4학년 1학기 때 시작한 졸업 프로젝트로 졸업 전시까지 마무리한 뒤, 프로젝트를 함께 진행했던 동기와 프로젝트 내 아쉽거나 부족했던 기능들을 보완하고 있다. 시간적으로 여유로운 상태에서 학기 중 진행했던 프로젝트를 되돌아보니 당장의 기능 구현이 급하다는 핑계로 얼렁뚱땅 지나간 부분이 많이 보여 나의 부족한 점을 다시 한번 깨닫고 있다. 여러 가지 검색하다 많이 마주쳤지만 간단하게 흝어보고 말았던 여러 키워드들을 공부하기 위해 이 카테고리를 만들었다. 주로 안드로이드 개발과 관련된 분야나 통신 관련 분야에 대해 공부할 예정이다 😀
REST API
첫 번째는 REST API이다. 서버와 안드로이드간 데이터를 주고 받기 위해 API를 만들었어야 했는데 이때 REST API를 알게 되었다.
다음은 REST API에 대해 이해하기 위해 알아야 할 내용들이다.
- REST의 개념 및 특징
- REST API의 개념 및 설계규칙
- RESTful의 개념
1. REST의 개념 및 특징
REST란 Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.
즉, HTTP URI를 통해 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 말한다.
더 쉽게 말하면 웹 어플리케이션의 어떤 상태(정보)를 전송하는 표현 방식을 말한다.
URI란 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미한다.
URL은 흔히 웹 주소라고도 하며 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약으로 URI의 서브셋이다.
쉽게 설명하자면, URI는 식별하고, URL은 위치를 가리킨다는 것이다
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기존벅인 데이터 처리기능인 Create, Read, Update, Delete를 일컫는 말로 REST에서는 HTTP Method를 통해 이를 구현한다.
Create - POST : 데이터 생성
Read - GET : 데이터 조회
Update - PUT : 데이터 수정
Delete - DELETE : 데이터 삭제
- REST 구성 요소
REST의 구성요소는 다음 3가지이다.
- 자원(Resource) = HTTP URI
- 자원에 대한 행위 = HTTP METHOD
- 자원에 대한 행위의 내용 = HTTP Message Payload
REST를 사용하면 HTTP 프로토콜의 인프라를 그대로 사용하므로 별도의 인프라를 구축할 필요가 없으며 서버와 클라이언트의 역할을 명확하게 분리한다는 장점이 있다. REST를 사용하는 서버는 다양한 클라이언트(브라우저, 안드로이드 / iOS와 같은 모바일 환경)와 통신이 가능하다.
- REST 특징
1) 서버-클라이언트 구조
- 자원이 있는 쪽이 서버, 자원을 요청하는 쪽이 클라이언트가 된다.
- REST Server : API 제공 / Client : 사용자 인증 및 context 관리
2) Stateless(무상태)
- HTTP 프로토콜을 Stateless Protocol이므로 REST 역시 무상태성을 갖는다.
- 클라이언트의 context를 서버에 저장하지 않고, API 서버 또한 클라이언트의 요청을 별개의 것으로 인식하고 단순 처리한다.
=> 구현이 단순해지고, 서비스의 자유도가 높아진다.
3) Cacheable(캐시 처리 기능)
4) Layered System(계층화)
- 클라이언트는 단순이 REST API Server만 호출하면 된다.
- REST Server는 보안, 사용자인증 등 다중 계층으로 구성해 유연하게 운영할 수 있다.
5) Uniform Interface(인터페이스 일관성)
- URI로 지정한 자원의 조작을 통일되고 한정적인 인터페이스로 수행해 HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용할 수 있다. => 특정 언어나 기술에 종속되지 않는다.
2. REST API의 개념 및 설계규칙
REST API란 REST의 원리를 따르는 API를 의미한다.
API(Application Programming Interface)란 애플리케이션 소프트웨어를 구축하고 통합하기 위한 정의 및 프로토콜 세트이다. API는 정보 제공자와 정보 사용자간의 계약으로 지칭되며 소비자에게 필요한 콘텐츠(호출)와 생산자에게 필요한 콘텐츠(응답)를 구성한다.
하지만 REST API를 올바르게 설계하기 위해서는 지켜야하는 몇 가지 규칙이 있다.
1) URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
실제 프로젝트를 진행할 때 REST API에 대해 모르고 로그인 및 회원가입에 사용하는 URI로 Login/Join을 사용했었다.
다행히 중간에 REST API 설계 규칙을 알게되어 수정하여 사용하였다.
2) 마지막에 슬래시(/)를 포함하지 않는다.
3) 언더바 대신 하이폰을 사용한다.
4) 파일 확장자는 URI에 포함하지 않는다.
예를 들면, http://localhost:3000/user/profile/image.jpg와 같이 작성하지 말라는 의미이다.
5) 행위를 포함하지 않는다.
예를 들면, http://localhost:3000/update-user와 같이 update(행위)를 포함하지 말라는 의미이다.
3. RESTful의 개념
RESTful이란 REST의 원리를 따르는 시스템을 말한다. 하지만 REST를 사용했다고 모두 RESTful 한 것은 아니며 REST API의 설계 규칙을 올바르게 지킨 시스템을 RESTful 하다고 할 수 있다. REST API를 사용했더라도 기능 별 메소드 처리가 알맞지 않거나 URI 규칙을 올바르게 사용하지 않은 경우 RESTful 하지 못한 시스템이라고 할 수 있다.
[Reference]
- https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
- https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces
'공부' 카테고리의 다른 글
[안드로이드] 클린 아키텍쳐(Clean Architecture) (0) | 2023.04.28 |
---|---|
리포지터리(repository) 생성 및 파일 추가 (0) | 2023.02.04 |
레이아웃(Layout)의 여러 속성 (0) | 2023.01.28 |