Programming/CS

REST API란? API부터 알아보자

hodo- 2023. 8. 12. 12:21

API란?

API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체

API 유형

1. private API
제 3자에게 노출되지 않음. 기업 내부에서 사용하는 API

2. public API
누구나 제한없이 사용할 수 있는 개방형 API

3. partner API
기업이 데이터 공유에 동의하는 특정인들만 사용할 수 있는 API

REST란?

Representational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처로
HTTP를 기반으로 필요한 자원에 접근하는 방식을 정해놓은 아키텍처라고 할 수 있음

여기서 자원은 소프트웨어가 관리하는 모든 것(문서, 그림, 데이터 등)을 의미한다

REST는 웹의 기존 기술과 HTTP프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있다.

그리고 이러한 REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다.

 REST의 속성

1. 서버에 있는 모든 자원은 각 자원 당 클라이언트가 바로 접근할 수 있는 고유 URL이 존재함

2. 모든 요청은 클라이언트가 요청할 때마다 필요한 정보를 주기 때문에 서버에서 세션 정보를 보관할 필요가 없음
 -> 서버의 자유도가 높앚고 유연한 아키텍처 적용 가능

3. HTTP 메서드 사용. 모든 자원은 HTTP 인터페이스인 GET, POST, PUT, DELETE 메서드로 접근되어야 한다

REST의 구성 요소

1. 자원
모든 자원에는 고유한 ID가 있고 서버에 존재한다.
REST는 자원에 접근할 때 URL을 이용한다.

2. 메서드
기본적으로 HTTP 메서드를 사용한다.
- GET : 해당 리소스 조회
- POST : 해당 리소스 생성
- PUT : 해당 리소스 수정
- DELETE : 해당 리소스 삭제
위와 같은 연산을 CRUD(create, research, update, delete)라고 함

3. 메시지
메시지는 HTTP header, body, 응답 상태 코드 등으로 구성되어 있다.
header에는 body에 어떤 형식으로 데이터가 담겼는지 표시하고 body는 자원에 대한 정보를 JSON, XML등으로 전달한다.
응답 상태 코드는 200 ~ 500 사이의 숫자로 클라이언트의 요청에 대한 상태를 나타내 준다.

1xx : 정보메시지
2xx : 서버 요청 성공
3xx : 요청 완료를 위해 추가 작업 필요
4xx : 클라이언트의 요청 에러 있음
5xx : 서버측 오류로 클라이언트 요청 수행 불가능

REST의 특징

1. 서버 - 클라이언트 구조
클라이언트는 요청을 하고 서버는 API를 제공하고 비즈니스 로직 처리 및 저장한다.

2. 무상태
HTTP 프로토콜은 기본적으로 무상태이기 때문에 HTTP를 기본으로 하는 REST도 무상태이다.
무상태란 클라이언트 상태를 서버에 저장하지 않는 것이다.
따라서 이전의 요청이 다음의 요청에 연관되지 않는다
이를 통해 서버의 처리 방식에 일관성을 부여하고 부담이 줄게 된다.

3. 캐시 처리 가능
HTTP의 캐싱 기능을 적용할 수 있다.
대량의 요청을 효율적으로 처리할 수 있는 캐시를 사용하면 응답 시간이 빨라지고 성능, 서버의 자원 이용률을 향상시킬 수 있다.

4. 계층화
클라이언트는 REST API 서버만 호출한다. REST 서버는 다중 계층으로 구성될 수 있으며 API 서버는 비즈니스 로직을 수행한다.

5. 인터페이스 일관성
URL로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
특정 언어나 기술에 종속되지 않는다.

6. 온디맨드 코드
서버로부터 스크립트를 받아서 클라이언트에서 실행한다.
이 특징은 반드시 충족할 필요는 없음

REST의 장단점

장점
1. 언어와 플랫폼에 독립적
2. REST API메시지가 의도하는 바를 명확하게 나타내 의도 파악이 쉬움
3. REST가 지원하는 프레임워크나 언어 등 도구들이 없어도 구현 가능
4. HTTP를 사용하므로 기존 웹 인프라 사용 가능
5. 서버와 클라이언트 역할이 명확하게 나뉨
6. 여러 서비스 디자인에서 생길 수 있는 문제 최소화

단점
1. HTTP 프로토콜만 사용 가능
2. 둘 이상을 대상으로 하는 분산 환경에 유용하지 않음
3. 보안, 정책에 대한 표준이 없음

REST API란?

REST를 기반으로 서비스 API를 구현한 것으로 RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따른다.
그러므로 RESTful 하다는 것은 REST API를 제공하는 시스템을 의미한다.

작동방법

1. 클라이언트 > 서버 요청 전송
클라이언트가 API문서에 따라 서버가 이해하는 방식으로 요청 형식 지정

2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에게 있는지 확인
없다면 CORS 발생

CORS란?
SOP(same-origin-policy)를 위한 에러로 요청 브라우저에서 다른 도메인을 가진 서버 호출할 때 생기는 브라우저에 발생하는 보안 정책이다.
출처가 다르다는 것을 판단하는 요소는 프로토콜, 도메인, 포트번호가 있다.

3. 서버가 요청을 수신하고 내부적으로 처리함

4. 서버 > 클라이언트 응답 반환.
응답에는 요청 성공 여부 정보 + 클라이언트가 요청한 정보 포함됨.

세부 정보는 API 개발자가 설계방식에 따라 약간씩 다름

REST API 클라이언트 요청에 무엇이 포함되었을까요?

1. 고유  리소스 식별자
URL을 사용하여 리소스 식별을 수행한다.

2. 메서드
CRUD라고 불리는 GET, POST, PUT, DELETE

3. HTTP 헤더
데이터(메서드가 성공적으로 작동하기 위한 데이터), 파라미터(URL 세부 정보 지정하는 경로 파라미터, 리소스에 대한 추가 정보를 요청하는 쿼리 파라미터, 클라이언트를 빠르게 인증하는 쿠키 파라미터)

REST API 인증 방법

응답을 보내기 전에 먼저 요청을 인증해야한다 (신분증과 같은 개념)
신뢰를 구축하기 위해 서버에 자신의 신원을 증명해야 한다.

일반적으로 아래와 같은 인증 방법이 있다.

1. HTTP 인증
기본 인증 (클라이언트는 요청 헤더에 사용자 이름, 암호 넣어서 전송)
전달자 인증(로그인 요청에 대한 응답으로 생성하는 암호화된 문자열)

2. API 키
서버는 고유하게 생성된 값을 최초 클라이언트에게 할당함
클라이언트가 이 키를 전송해야해서 네트워크 도난에 취약함

3. OAith
암호화 토큰이 결합된 형태.

REST API 서버 응답에는 무엇이 포함되어 있을까?

1. 상태 표시줄 (404, 400, 200과 같은 상태 코드)

2. 메시지 본문 (JSON 표현을 반환)

3. 헤더 (응답에 대한 추가 컨텍스트 제공, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보 포함)


참고

https://aws.amazon.com/ko/what-is/restful-api/

'Programming > CS' 카테고리의 다른 글

HTTP 요청, Axios와 Fetch 중 어떤 걸 쓰지?  (0) 2023.08.10