Rest API란 Representational State Transfer 즉, REST라는 아키텍처 스타일을 따르는 API(Application Programming Interface)입니다.
API 개발자는 REST뿐만 아니라 여러 아키텍처를 사용해 API를 설계할 수 있습니다.
다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙이나 형식을 정의한 것입니다. API는 서로 다른 애플리케이션 또는 장치가 서로 데이터나 기능을 교환하고 상호 작용할 수 있도록 도와줍니다.
예를 들어, 웹 사이트 혹은 모바일 장치에서 날씨 정보를 보여주기 위해 날씨 서비스의 API에 요청을 보낼 수 있습니다. 또는 영화 예매를 위해 예매 서비스의 API에 요청을 보낼 수 있습니다.
API는 사용자 인터페이스와 달리 컴퓨터나 소프트웨어끼리만 사용되는 인터페이스입니다. 즉, 사용자가 직접 보거나 조작할 수 없고, 개발자가 소프트웨어에 포함해야만 합니다.
API의 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처로, REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌습니다.
클라이언트-서버 구조
클라이언트는 서버에 요청을 보내고 서버는 요청에 대한 응답을 보냅니다. 클라이언트와 서버는 독립적으로 개발하고 운영할 수 있습니다.
균일한 인터페이스
서버는 표준화된 형식으로 리소스를 표현하고, 클라이언트는 리소스는 식별하고 조작할 수 있습니다. 리소스는 URI(Uniform Resource Identifier)로 식별되고, HTTP 메서드(GET, POST, PUT, DELETE 등)로 조작됩니다.
서버는 자기 기술적인 메시지와 하이퍼링크를 전송해 클라이언트가 리소스를 적절하게 사용할 수 있도록 합니다.
무 상태성
서버는 클라이언트의 상태 정보를 저장하지 않고, 각 요청은 독립적으로 처리됩니다. 클라이언트는 임의의 순서로 리소스를 요청할 수 있으며 모든 요청은 다른 요청과 분리됩니다. 요청에는 필요한 모든 정보가 포함되어야 합니다.
캐시 가능성
서버는 응답에 캐시 가능 여부를 명시하고, 클라이언트는 캐시 된 응답을 재사용할 수 있습니다. 예를 들어 모든 페이지에 공통 머리글 및 바닥글 이미지가 있는 웹 사이트를 방문할 경우, 해당 웹사이트의 다른 페이지에 방문할 때마다 서버는 동일한 이미지를 다시 전송해야 합니다. 이를 피하고자 클라이언트는 첫 번째 응답 후에 해당 이미지를 캐싱하거나 저장한 다음 캐시에서 직접 이미지를 사용합니다. 이를 통해 성능과 확장성을 향상할 수 있습니다.
코드 온 디맨드(선택 사항)
서버는 필요에 따라 클라이언트로 실행할 수 있는 코드(자바스크립트 등)를 전송하여 클라이언트의 기능을 일시적으로 확장하거나 사용자 지정할 수 있습니다.
유연성
확장성
독립성
고유 리소스 식별자
메서드
HTTP 헤더
요청 헤더는 클라이언트와 서버 간에 교환되는 메타데이터입니다.
데이터: Rest API 요청에는 HTTP 메서드가 성공적으로 작동하기 위한 데이터가 포함될 수 있습니다.
파라미터: 수행해야 할 작업에 대한 자세한 정보를 서버에 제공하는 파라미터가 포함될 수 있습니다. 다음은 몇 가지 파라미터 유형입니다.
경로 파라미터 - URL 세부 정보를 지정하기 위해 사용합니다.
예를 들어, 사용자 ID로 사용자를 조회하는 URL /users/{id}의 경우 {id}는 경로 파라미터로서 특정 사용자의 ID를 나타냅니다. 경로 파라미터는 중괄호 {}로 둘러싸여 있으며, API 호출 시에 실제 값으로 대체되어야 합니다. 경로 파라미터는 항상 필수적이므로 required: true를 명시해야 합니다.
쿼리 파라미터 - URL의 끝에 붙어서 요청에 대한 추가적인 정보나 조건을 전달하는 변수를 말합니다. 쿼리 파라미터는 URL과 물음표(?)로 구분되며, 여러 개의 쿼리 파라미터는 앰퍼샌드(&)로 연결됩니다.
쿼리 파라미터는 리소스의 위치를 나타내는 경로 파라미터와 달리 리소스의 정렬, 페이징, 필터링 등의 작업을 정의합니다. 쿼리 파라미터는 필수적이지 않을 수 있습니다.
쿼리 파라미터의 예는 다음과 같습니다.
/users?role=admin : 역할이 admin인 사용자들을 조회하는 API
/notes?offset=100&limit=50 : 노트들을 100번째부터 50개씩 조회하는 API
상태 코드
헤더
바디(메시지 본문)
클라이언트가 서버에게 요청할 때 리소스에 대해 수행하고자 하는 행위를 나타내는 방식을 말합니다.
GET
POST
PUT
PATCH
DELETE
이 외에도 HEAD , OPTIONS 등의 HTTP 메서드가 있지만, Rest API에서는 잘 사용되지 않습니다.