계발하는 개발자

[네트워크] REST API / Restful API란?(feat. 원칙과 네이밍 규칙) 본문

🖥 Computer Science/Network

[네트워크] REST API / Restful API란?(feat. 원칙과 네이밍 규칙)

dev_genie 2023. 9. 10. 16:40

REST란?

REST는 Representational State Transfer의 약자로 직역하면 "대표로 상태를 전송하는 것"이다. 

한 마디로 "데이터 이름으로 상태를 구분하여 (서버와 클라이언트 간)상태에 대한 정보를 주고받는 방식" 이다.

예를 들자면 아래와 같다.

 

데이터의 이름

"이거 회원에 대한 데이터야" -> /member (멤버라고 이름을 지어 회원 데이터라고 알려줌)

상태

"나 데이터 생성할거야" -> /create (데이터를 생성한다고 알려줌)

전송

"회원 데이터 생성해줘" -> /create/member (회원 데이터를 생성해 달라고 요청함)

이와 같이 데이터의 이름으로 상태를 구분하여 적절한 응답을 전송하는 방식이다.

 

API?

API란 Application Programming Interface의 약자로 직역하면 "응용 프로그램 프로그래밍의 인터페이스"다.

즉 어떤 운영체제나 프로그램 사이에서 데이터를 주고받기 위해 사용되는 언어나 메시지 형식 등을 의미하는 개념이다.

이를 통해 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것이다.

 

REST API 설계 원칙 6가지

REST API를 구현하기 위해선 몇 가지 원칙을 따라야 한다.

 

1. Uniform Interface(일관된 인터페이스)

데이터를 식별 가능하게 해야한다는 원칙이다.

어쩌면 우리가 가장 집중해야 하는 부분이 바로 이 부분이 아닐까싶다.

구체적으로는 간결, 일관적이어야 하며 URL만 보고도 어느 데이터를 어떤 상태로 전송해야 하는지 구별할 수 있어야 한다.

 

 이를 위해

1) URL은 명사를 사용

  • www.devgenie.com/get-feedback (X)
  • www.devgenie.com/feedback (O)

2) URL은 소문자를 사용

  • www.devgenie.com/Feedback (X)
  • www.devgenie.com/feedback (O) 

3) URL은 복수형을 사용

  • www.devgenie.com/photo (X)
  • www.devgenie.com/photos (O) 

4) 구분자는 하이픈(-)을 사용

  • www.devgenie.com/awosome_photos (X)
  • www.devgenie.com/AwosomePhotos (X) 
  • www.devgenie.com/awosome-photos (O) 

5) url 마지막엔 슬래시를 포함하지 않음

  • www.devgenie.com/awosome-photos/ (X) 
  • www.devgenie.com/awosome-photos (O) 

6) 파일 확장자는 포함하지 않음

  • www.devgenie.com/awosome-photos/image.png (X) 
  • www.devgenie.com/awosome-photos/image (O) 

 

2. Client Server

클라이언트와 서버는 반드시 분리되어야 하며,

클라이언트는 데이터를 서버에 요청하고 서버는 클라이언트의 요청에 따른 데이터를 응답해야 한다.

 

3. Stateless HTTP(무상태성)

클라이언트의 모든 요청에는 해당 요청을 이해할 수 있는 모든 정보가 포함되어야한다.

서버는 HTTP 요청에 대한 어떤 것도 저장하지 않는다. 컨텍스트를 유지해야하는 세션, 인증과 인가에 대한 정보 또한 클라이언트에만 보관되며, 각 요청 시 해당 정보를 모두 포함하여 서버에 요청한다.

 

4. Cacheable

요청을 통해 보내는 자료들은 저장되어야 한다. 이를 통해서 저장된 자료들을 주고 받을 때 속도를 향상시킬 수 있다.

 

5. Layered System(다중 계층)

요청된 정보를 검색하는데 계층 구조로 분리되어 있어야 한다. 예를 들어 API 서버와 DB서버 그리고 인증 서버를 둬 서버 확장성을 보장한다.

 

6. Code on Demand

서버가 클라이언트에서 실행시킬 수 있는 로직을 전송하여 클라이언트의 기능을 확장시킬 수 있다.

이를 통해 클라이언트가 사전에 구현해야하는 기능의 수를 줄여 간소화시킬 수 있다.

 

RESTful이란?

REST에는 위 여섯 가지의 기본 원칙이 있고, 이 가이드를 준수한 인터페이스를 RESTful하다고 표현한다.

RESTful의 목적

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
  • RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.


RESTful 하지 못한 경우

  • Ex1) CRUD 기능을 모두 POST로만 처리하는 API
  • Ex2) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)

 


참고문서:

 

What is REST - REST API Tutorial

REST is an acronym for REpresentational State Transfer. It is an architectural style for hypermedia systems and was first presented by Roy Fielding.

restfulapi.net

LIST
profile

dev_genie

@dev_genie

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!