API
API란 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)로,
다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한다.
사실 이러한 정의가 크게 와 닿지 않을 수 있는데,
우리가 크롬을 켜서, naver.com을 입력하여 네이버로 이동하는 것 또한 API 요청의 일종이다.
우리가 naver.com을 입력하면, 크롬이 서버에 해당 주소에 해당하는 데이터를 리턴해달라는 요청을 보내고
해당하는 데이터를 리턴 받아 우리의 컴퓨터 화면에 네이버 메인 화면 페이지가 나타나는 것이다.
REST
REST란 Representational State Tranfer을 뜻하며, API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처이다.
REST는 통신을 관리하기 위한 일종의 기준으로서 만들어졌으며, 대규모의 고성능 통신을 안정적으로 지원할 수 있는 구조이다.
자원
, 행위
, 표현
의 세 가지로 구성되어 있으며
자원은 URI(Uniform Resource Identifier), 행위는 HTTP Method로 구체화한다.
우리가 API를 개발할 때, 이러한 REST 아키텍처 스타일을 따라 API를 설계하면 해당 API를 RESTful API라고 한다.
RESTful API를 설계할 때 지켜야 하는 원칙은 다음과 같다.
Uniform Interface
서버가 표준 형식으로 정보를 전송하기 위해 균일한 인터페이스 규칙을 지켜야한다는 것을 의미한다.
즉 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수정하는 아키텍처 스타일을 의미한다.
예를 들어, Resource Identification에서 Uniform Interface를 지키며 URI를 구성하면 다음과 같다.
사용자 자원: /users
특정 사용자: /users/123
제품 목록: /products
특정 제품: /products/456
Resource Manipulation에서 Uniform Interface 규칙을 지키며 구성하면 다음과 같은 예시를 들 수 있다.
GET: /users - 모든 사용자 조회
POST: /users - 새로운 사용자 생성
PUT: /users/123 - 특정 사용자 정보 수정
DELETE: /users/123 - 특정 사용자 삭제
즉 다음과 같은 HTTP의 Method에 맞는 API를 작성해야 한다.
Resource Representation 시, 다음과 같이 리소스에 대한 정보를 표현에 충분히 포함해야 한다.
서버는 Content-Type 헤더를 사용하여 반환 형식을 알려주며
클라이언트는 Accept 헤더를 사용하여 원하는 표현 형식을 지정한다.
GET /users/123
Accept: application/json
Self-descrptive Message 도 Uniform Interface에서 매우 중요한 개념이다.
HTTP 메세지 자체에 충분한 정보가 포함되어 있어야 하며, 상태코드와 헤더를 통해 메시지의 의미를 이해할 수 있어야 한다.
Stateless
서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 기법을 의미한다.
즉 데이터를 요청받고, 해당 데이터를 전송해주는 행위 자체로 종료되어야 하며, 요청간 context가 서버에 저장되어서는 안 된다는 것을 의미한다.
예를 들어, GET 요청 간에 클라이언트 정보가 저장되지 않으며, 각 요청이 분리되어 있어야 한다.
Layered System
서버는 다중 계층으로 구성될 수 있으며 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있으며 Proxy, 게이트웨이와 같은 네트워크 기반의 middleware를 사용할 수도 있다.
Cacheable
RESTful 웹 서비스는 서버의 응답 시간을 개선하기 위해 클라이언트에 일부 응답을 저장하는 캐싱 방식을 지원한다.
우리가 새로운 웹 페이지에 방문할 때 마다 서버는 동일한 이미지를 다시 전송해주어야 하는데, 캐싱을 사용하면 서버가 다시 전송하지 않고 캐시되었던 이미지를 꺼내 사용함으로써 리소스를 절약할 수 있다.
RESTful API는 API 응답을 캐시 가능 혹은 캐시 불가능으로 정의한 후, 캐싱을 제어한다.
Client-Server
클라이언트, 서버 및 리소스로 구성되어 있으며 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처여야한다.
On-Demand Code
REST 아키텍처 스타일에서 서버는 소스 코드를 클라이언트에 전송하여 기능하게 할 수 있다.
'JavaScript' 카테고리의 다른 글
TypeScript 기초 (0) | 2023.10.31 |
---|---|
NestJS란 (0) | 2023.10.13 |
(Node.js) Express에서 cookie, session 사용 방법 (1) | 2023.09.11 |
ES class와 prototype (0) | 2023.09.11 |
(JavaScript) Fetch API (0) | 2023.09.07 |