Study/기술 및 용어 정리

REST와 RESTful API

토기발 2023. 8. 11. 16:27

이전에 면접질문 용어정리에서 짧게 정리했지만 확실하게 알아두고 싶어서 다시 정리하기로 한다.

 

 


REST (Representational State Transfer)

REST는 웹 기반 애플리케이션 간의 통신을 위한 아키텍처 스타일로, 리소스(자원)를 정의하고 이 리소스에 대한 상태를 전송 및 조작하기 위한 규칙을 제공한다.

 

주요 개념

1. 리소스(자원)

웹 서비스에서 제공하는 모든 것을 리소스로 간주한다.

(ex: 사용자, 댓글 이미지 등)

 

2. HTTP 메서드

HTTP메서드를 사용하여 리소스에 대한 작업을 수행한다.

  • GET: 리소스를 조회한다.
  • POST: 새로운 리소스를 생성한다.
  • PUT: 기존 리소스를 업데이트한다.
  • DELETE: 리소스를 삭제한다.

3. URI(Uniform Resource Identifier)

각 리소스는 고유한 URI를 가지며, 이를 통해 리소스를 식별한다.

 

4. 상태 표현

리소스의 상태는 텍스트, XML, JSON등의 형식으로 표현된다.

 

5. 상태 전달

클라이언트는 서버로부터 받은 리소스의 상태를 조작하거나 변경된 상태를 서버에 전달하여 상호작용한다.

 

특징

클라이언트-서버 구조 (Client-Server): 

클라이언트와 서버는 독립적으로 개발되어야 하며, 클라이언트는 사용자 인터페이스와 관련된 역할을, 서버는 데이터 저장 및 처리와 같은 역할을 수행한다.

-> 서로간의 역할과 책임을 분리하여 확장성과 유연성을 높인다.

 

무상태성 (Statelessness):

서버는 클라이언트의 상태를 관리하지 않으며, 각 요청은 모든 필요한 정보를 포함해야 한다.

-> 서버는 클라이언트 간의 세션 정보를 관리하지 않아도 되고, 클라이언트와 서버 간의 독립성과 확장성을 유지할 수 있다.

 

캐시 가능성 (Cachable):

클라이언트는 응답을 캐시할 수 있으며, 캐시된 리소스를 재사용함으로써 성능을 향상시킬 수 있다. 서버는 응답에 캐시 가능성 여부를 명시하여 클라이언트가 효율적으로 캐시를 관리하도록 도와준다.

 

계층화 (Layered System):

클라이언트는 서버와 직접 통신하며, 서버는 다른 서버로부터 리소스를 가져오거나 데이터베이스와 통신할 수 있다.

-> 확장성과 보안 향상

 

인터페이스 일관성 (Uniform Interface):

일관된 인터페이스를 통해 리소를 조작하고 검색할 수 있다. 

 


 

RESTful API

RESTful API는 REST의 원칙을 따르며 웹 서비스 간의 통신을 위한 API 디자인 스타일이다. API 사용자가 HTTP 메서드와 URI를 통해 리소스를 조작하고 상태를 전달하는 방식으로 동작한다.

 

주요 개념

엔드포인트 (Endpoints)

API의 각 기능은 엔드포인트로 표현되며, URI를 통해 식별된다. 엔드포인트는 리소스의 종류와 작업을 나타낸다.

 

RESTful API는 일관성 있고 효율적인 웹 서비스를 설계하기 위한 규칙을 따르는 것이 중요하다.

 

주요 규칙

1. 명사를 사용한 리소스 식별:

엔드포인트의 URI는 리소스를 나타내는 명사로 구성되어야 한다. 

->명사를 사용함으로써 어떤 리소스를 다루는지 명확하게 표현할 수 있다.

 

2. 복수형 사용:

리소스의 컬렉션을 나타내는 경우 복수형 명사를 사용하여 엔드포인트를 구성한다. 

(ex: /users)

 

3. HTTP 메서드 사용:

올바른 HTTP 메서드를 사용하여 각 리소스에 대한 액션을 정의한다.

  • GET: 리소스 조회
  • POST: 리소스 생성
  • PUT: 리소스 수정
  • DELETE: 리소스 삭제

4. URI 계층 구조:

/를 통해 계층 구조를 나타낼 수 있다.

(ex: http://restapi.example.com/houses/apartments)

 

설계 예시

모든 포스트 조회:

  • 메서드: GET
  • 엔드포인트: /posts

특정 포스트 조회:

  • 메서드: GET
  • 엔드포인트: /posts/{post_id}

새로운 포스트 생성:

  • 메서드: POST
  • 엔드포인트: /posts

포스트 업데이트:

  • 메서드: PUT
  • 엔드포인트: /posts/{post_id}

포스트 삭제:

  • 메서드: DELETE
  • 엔드포인트: /posts/{post_id}

 

 

 

[참고 출처]

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

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