네트워크

10. REST API + RESTful

ggomjiu 2025. 2. 28. 11:43

REST(Representational State Transfer)

: 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미

- 즉 HTTP URI를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미

 

CRUD Operation

: Create, Read, Update, Delete를 묶어서 일컫는 말

  • Create : 데이터 생성(POST)
  • Read : 데이터 조회(GET)
  • Update : 데이터 수정(PUT, PATCH)
  • Delete : 데이터 삭제(DELETE)

- 구성 요소)

  • 자원(Resource) : HTTP URI
  • 자원에 대한 행위(Verb) : HTTP Method
  • 자원에 대한 행위의 내용(Representations) : HTTP Message Pay Load

- 장점)

  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해줌
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능함
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도한느 바를 쉽게 파악할 수 있음
  • 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화
  • 서버와 클라이언트의 역할을 명확하게 분리함

- 단점)

  • HTTP Method 형태가 제한적임
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구됨
  • 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많음 -> 익스플로어

- 특성)

  • Server - Client(서버 - 클라이언트 구조)
  • Stateless (무상태)
  • Cacheable(캐시 처리 가능)
  • Layerd System(계층화)
  • Uniform Interface(인터페이스 일관성)

API(Application Programming Interface)

: 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙

 

REST API

: REST의 아키텍쳐 스타일을 따르는 API를 의미

1. URI는 명사, 소문자를 사용해야 함

Bad Example http://lsh98.com/Studying/
Good Example http://lsh98.com/study/

 

2. 마지막에 슬래시(/)를 포함하지 않음

Bad Example http://lsh98.com/study/
Good Example http://lsh98.com/study

 

3. 언더바 대신 하이픈을 사용

Bad Example http://lsh98.com/study_blog
Good Example http://lsh98.com/study-blog

 

4. 파일 확장자는 URI에 포함하지 않음

Bad Example http://lsh98.com/photo.png
Good Example http://lsh98.com/photo

 

5. 행위를 포함하지 않음

Bad Example http://lsh98.com/delete-post/1
Good Example http://lsh98.com/post/1

 

RESTful

: REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 함

- RESTful API라는 용어는 일반적으로 RESTful 웹 API를 의미하지만, RESTful API와 REST API라는 용어는 같은 의미로 사용 가능함

- 모든 CRUD 기능을 POST로 처리하는 것은 API 혹은 URI 규칙을 지키지 않음

-> REST API를 사용하였지만 RESTful하지 못한 시스템임

 

- 작동원리)

  1. 클라이언트가 서버에 요청을 전송
  2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인
  3. 서버가 요청을 수신하고 내부적으로 처리
  4. 서버가 클라이언트에 응답을 반환 -> 응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보가 포함 + 클라이언트가 요청한 모든 정보도 포함

1. RESTful API 클라이언트 요청 구성 요소

1) 고유 리소스 식별자

  • 서버는 고유한 리소스 식별자로 각 리소스를 식별
  • REST 서비스의 경우 서버는 일반적으로 URL을 사용하여 리소스 식별을 수행
  • URL은 리소스에 대한 경로를 지정
  • URL은 요청 엔트포인트라고도 하며 클라이언트가 요구하는 사항을 서버에 명확하게 지정

2) 메소드

- GET)

  • 클라이언트는 GET을 사용하여 URL의 리소스에 접근
  • GET 요청을 캐싱하고 RESTful API 요청에 파라미터를 넣어 전송하여 전송 전에 데이터를 필터링하도록 서버에 지시 가능

- POST)

  • 클라이언트는 POST를 사용하여 서버에 데이터를 전송
  • 여기에는 요텅과 데이터 표현이 포함됨
  • 동일한 POST를 여러 번 전송할 경우 동일 리소스를 여러 번 생성하는 부작용이 있음

- PUT)

  • 클라이언트는 PUT을 사용하여 서버의 기존 리소스를 업데이트
  • POST와 달리, RESTful 웹 서비스에서 동일한 PUT 요청을 여러 번 전송해도 결과는 동일

- DELETE)

  • 클라이언트는 DELETE 요청을 사용하여 리소스를 제거
  • DELETE 요청은 서버 상태를 변경할 수 있음
  • 사용자에게 적절한 인증이 없으면 요청은 실패

3) HTTP Header

: Header는 클라이언트와 서버 간 교환되는 메타데이터

- EX) 요청 헤더는 요청 및 응답의 형식을 나타내고 요청 상태 등에 대한 정보를 제공

- Data)

  • REST API 요청에는 POST, PUT 등 기타 HTTP Method가 성공적으로 작동하기 위한 데이터가 포함될 수 있음

- Parameter)

  • RESTful API 요청에는 수행해야 할 작업에 대한 자세한 정보를 서버에 제공하는 파라미터가 포함될 수 있음

2. 파라미터 유형

  • URL 세부 정보를 지정한는 경로 파라미터
  • 리소스에 대한 추가 정보를 요청한느 쿼리 파라미터
  • 클라이언트를 빠르게 인증하는 쿠키 파라미터

3. RESTful API 인증 방법

- RESTful 웹 서비스는 응답 전 요청을 인증해야 함

- 클라이언트는 신분증이나 운전 면허증을 제시하여 자신의 신원을 증명하듯 신뢰를 구축하기 위해 서버에 자신의 신원을 먼저 증명해야 함

 

1) HTTP 인증

: HTTP는 REST API를 구현할 때 직접 사용가능한 일부 인증 체계를 의미

- 기본 인증)

  • 기본 인증에서 클라이언트는 요청 헤더에 사용자 이름과 암호를 넣어 전송
  • 안전한 전송을 위하여 이 페어를 64자의 세트로 변환하는 인코딩 기술인 base64로 인코딩함

- 전달자 인증)

  • 전달자(bearer)인증은 토큰 전달자에 대한 엑세스 제어를 제공한느 프로세스
  • 일반적으로 전달자 토큰은 서버가 로그인 요청에 대한 응답으로 생성하는 암호화된 문자열
  • 클라리언트는 리소스에 엑세스하기 위해 요청 헤더에 토큰을 넣어 전송

2) API key

  • 이 접근 방식에서 서버는 고유하게 생성된 값을 최초 클라이언트에 할당함
  • 클라이언트는 리소스에 접근하려고 할 때마다 고유 API 키를 사용하며 본인을 검증
  • API 키 경우 클라이언트가 이 키를 전송해야 되므로 네트워크 도난에 취약하다는 단점이 있음

3) OAuth

  • OAuth는 모든 시스템에 대해 매우 안전한 로그인 접근을 보장하기 위해 암호와 토큰을 결합함
  • 서버는 먼저 암호를 요청한 다음 권한 부여 프로세스를 완료하기 위해 추가 토큰을 요청
  • 특정 범위와 수명으로 언제든지 토큰 확인 가능

4. RESTful API 서버 응답 구성 요소

1) 상태 표시줄

- 요청 성공 또는 실패를 알리는 3자리 상태 코드가 존재

- 코드 예시)

  • 200 : 일반 성공 응답
  • 201 : POST 메소드 성공 응답
  • 400 : 서버가 처리할 수 없는 잘못된 요청
  • 404 : 리소스를 찾을 수 없음음

2) 메시지 본문

- 응답 본문에는 리소스 표현이 포함됨

- 클라이언트는 데이터 작성 방식을 XML 또는 JSON 방식으로 정보를 요청할 수 있음

 

3) 헤더

- 응답에 대한 추가 컨텍스트를 제공하고 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보를 포함