본문 바로가기

코딩테스트

[RestAPI] 개요

728x90
반응형

RestAPI란?

RestAPI(Representational State Transfer API)는 웹 애플리케이션 간에 데이터 통신을 위한 소프트웨어 인터페이스다.

RestAPI는 HTTP 프로토콜을 기반으로 작동하며, 클라이언트와 서버 간의 상호작용을 단순하고 일관성 있게 처리한다.

RestAPI는 REST 아키텍처 스타일을 따른다.

REST(Representational State Transfer)는 웹 애플리케이션의 아키텍처 디자인 패턴으로, 자원을 고유한 URI(Uniform Resource Identifier)로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 자원을 조작하는 방식을 의미한다.

RestAPI를 통해 클라이언트는 HTTP 메서드를 사용하여 서버에 요청을 보내고, 서버는 그에 따른 응답을 반환한다.

이를 통해 클라이언트와 서버 간에 데이터를 주고받을 수 있으며, 다양한 플랫폼과 언어에서 호환되는 유연하고 표준화된 인터페이스를 제공한다.

 

RestAPI의 특징

플랫폼 독립성

  • RestAPI는 HTTP 프로토콜을 사용하므로 어떤 플랫폼에서든지 동작할 수 있다.
  • 서버와 클라이언트 간의 데이터 교환을 위해 웹 기술을 사용하는 것이기 때문에, 다양한 플랫폼과 언어 간의 통합이 용이하다.


유연성과 확장성

  • RestAPI는 자원 중심적인 아키텍처를 따르므로, 각 자원은 고유한 URI를 가지고 식별된다. 
  • 이러한 구조는 API의 유연성과 확장성을 제공하여 필요에 따라 새로운 자원을 추가하거나 기존 자원을 변경할 수 있다.


클라이언트-서버 분리

  • RestAPI는 클라이언트와 서버 간의 역할을 명확하게 분리한다.
  • 이로써 각각의 역할을 전문화시킬 수 있으며, 서버와 클라이언트가 독립한다.


자체 문서화와 디버깅 용이성

  • RestAPI는 자체적으로 문서화되기 쉽다.
  • 각 API 엔드포인트에 대한 설명, 요청 및 응답 형식, 인증 방법 등을 문서로 제공할 수 있다.
  • RestAPI는 HTTP 프로토콜을 사용하기 때문에 다양한 디버깅 및 테스트 도구를 활용할 수 있다.


개발자 경험 개선

  • RestAPI는 개발자가 다양한 클라이언트 애플리케이션을 개발할 수 있도록 한다.
  • 웹, 모바일, 데스크톱 등 다양한 플랫폼에서 동작하는 클라이언트를 개발하고, 다양한 서비스와 통합할 수 있다.
  • RestAPI는 간결하고 직관적인 인터페이스를 제공하여 개발자가 빠르게 개발할 수 있는 개발 환경을 제공한다.


상호운용성과 표준화

  • RestAPI는 표준 HTTP 프로토콜을 사용하고, 일반적인 웹 기술을 활용하기 때문에 상호운용성이 높다.
  • RestAPI는 개발자들 사이에서 널리 사용되는 표준화된 아키텍처 패턴이다.
  • 다른 개발자와의 협업이 쉽고, 이미 구축된 RestAPI를 쉽게 이해하고 활용할 수 있다.



제약조건

클라이언트-서버 구조

  • RestAPI는 클라이언트와 서버 간의 역할을 명확하게 분리한다.
  • 클라이언트는 서버에게 요청을 보내고, 서버는 그에 대한 응답을 반환한다.
  • 이를 통해 클라이언트와 서버는 독립적으로 진화하고 확장될 수 있다.

 

상태 없음 (Stateless)

  • RestAPI는 요청 간에 클라이언트의 상태를 서버에 저장하지 않는다.
  • 각 요청은 모든 필요한 정보를 포함하고 있으며, 서버는 클라이언트의 상태를 유지하지 않는다.
  • 이는 서버의 확장성과 클라이언트의 독립성을 증가시킨다.

 

캐시 가능 (Cacheable)

  • RestAPI는 HTTP의 캐싱 기능을 활용하여 응답을 캐시할 수 있다. 
  • 이는 네트워크 트래픽을 줄이고 응답 시간을 단축시킬 수 있다.
  •  서버는 캐싱 정책을 제공하고, 클라이언트는 캐시된 데이터를 활용할 수 있다.

 

통일된 인터페이스

  • RestAPI는 통일된 인터페이스를 제공한다.
  • HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 리소스를 조작하고, URI(Uniform Resource Identifier)를 통해 리소스를 식별한다.
  • 또한, 리소스에 대한 표현 형식(JSON, XML 등)을 명시한다.

 

계층 구조

  • RestAPI는 서버의 계층 구조를 지원한다.
  • 서버는 중간 계층(로드 밸런서, 캐시 서버 등)을 통해 요청을 전달하거나, 보안을 위해 방화벽을 설정할 수 있다.
  • 클라이언트는 서버와 직접 통신하며, 중간 계층의 존재를 알 필요가 없다.

 

자체 표현 (Self-descriptive)

  • RestAPI는 응답 메시지에 자체 설명을 포함킨다.
  • 응답은 HTTP 상태 코드, 헤더, 메시지 본문 등으로 구성된다.

 

 

구성요소

자원 (Resource)

  • RestAPI에서 자원은 클라이언트가 요청하고자 하는 대상을 의미한다.
  • 일반적으로 데이터베이스의 엔티티나 서비스의 기능을 자원으로 나타낸다.
  • 예를 들어, 사용자, 제품, 주문 등이 자원의 예시이다.

 

URI (Uniform Resource Identifier)

  • URI는 자원을 고유하게 식별하기 위한 문자열이다. 
  • 자원에 대한 식별자 역할을 하며, 클라이언트는 URI를 통해 특정 자원을 지정하고 접근할 수 있다. 
  • 일반적으로 URI는 웹 상에서 리소스를 가리키는 URL(Uniform Resource Locator)의 일부분이다.

 

HTTP 메서드

  • HTTP 메서드는 클라이언트가 서버에게 요청하는 작업의 종류를 나타낸다. 
  • RestAPI에서는 다음과 같은 주요 HTTP 메서드를 사용한다.
메서드 내용
GET(자원 조회) 서버는 해당 자원을 반환한다.
POST(자원 생성) 서버는 새로운 자원을 생성하고 응답으로 자원의 정보를 반환한다.
PUT(자원 전체 업데이트) 클라이언트는 업데이트할 자원의 전체 내용을 요청에 포함시킨다.
PATCH(자원의 부분적 업데이트) 클라이언트는 업데이트할 자원의 일부 내용을 요청에 포함시킨다.
DELETE(자원의 삭제) 서버는 해당 자원을 삭제하고 응답으로 성공 여부를 반환한다.

 

상태 코드 (Status Code)

  • HTTP 응답의 상태를 나타내는 숫자 코드입니다.
  • RestAPI에서는 서버가 클라이언트에게 응답할 때 상태 코드를 함께 반환합니다.
  • 일반적으로 사용되는 상태 코드의 범주는 다음과 같습니다
상태코드 내용 예시
2xx(성공) 요청이 성공적으로 처리되었음을 나타낸다. 200 : OK
201 : Created
3xx(리다이렉션) 추가 동작이 필요함을 나타낸다. 301 : Moved Permanently
302 : Found
4xx(클라이언트 오류) 클라이언트의 요청이 잘못되었거나 처리할 수 없음을 나타낸다. 400 : Bad Request
404 : Not Found
5xx(서버 오류) 서버가 요청을 처리하는 중에 발생하는 오류를 나타내는 HTTP 상태 코드 범주이다. 500 : Internal Server Error
502 : Bad Gateway

 

페이로드 (Payload) 

  • 페이로드는 RestAPI 요청이나 응답에서 전송되는 실제 데이터를 의미한다.
  • 페이로드는 JSON, XML, 텍스트 등의 형식으로 전달될 수 있으며, 요청의 경우 클라이언트가 서버로 데이터를 전달하고 응답의 경우 서버가 클라이언트에게 데이터를 반환한다.

 

쿼리 매개변수 (Query Parameters)

  • 쿼리 매개변수는 URI에 추가되어 특정한 요청의 조건을 지정하는 매개변수이다.
  • 주로 '?' 문자로 시작하며, 키-값 쌍의 형태로 전달된다.
  • 예를 들어, /users?role=admin과 같이 사용자 역할이 "admin"인 사용자를 조회하는 요청에서 "role"은 쿼리 매개변수이다.

 

요청 헤더 (Request Headers)와 응답 헤더 (Response Headers)

  • 요청 헤더와 응답 헤더는 HTTP 요청과 응답에 추가적인 메타데이터를 포함한다.
  • 이러한 헤더는 클라이언트와 서버 간의 통신을 조정하고, 인증, 캐싱, 압축 등의 작업을 수행하기 위해 사용된다.

 

인증 (Authentication)과 권한 부여 (Authorization)

  • RestAPI는 클라이언트의 인증과 권한 부여를 지원하기 위해 다양한 인증 방식과 권한 부여 메커니즘을 제공한다.
  • 예를 들어, OAuth, JWT(JSON Web Token) 등의 인증 방식을 사용하여 클라이언트가 자원에 접근할 수 있는지 확인할 수 있다.

 

버전 관리 (Versioning)

  • RestAPI가 변경되거나 업데이트될 때, 기존의 클라이언트와의 호환성을 유지하기 위해 버전 관리를 수행할 수 있다.
  • 버전 관리를 통해 클라이언트는 원하는 버전의 API를 선택하고 사용할 수 있다.
728x90
반응형

'코딩테스트' 카테고리의 다른 글

[RestAPI] Python에서 RestAPI 사용하기  (0) 2023.05.18
[RestAPI] JSON  (0) 2023.05.18