innn

[AWS가 알려주는] API와 RESTful API 본문

CS/네트워크

[AWS가 알려주는] API와 RESTful API

33삼 2023. 11. 24. 16:02

aws 홈페이지에서 api와 restful api에 대해 설명하는 글이 있어서 내가 사용해본 api를 떠올리며 1회독 하며 정리해봤다.

aws에 좋은 글 많은듯.

RESTful API란 무엇인가요?

  • RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용되는 인터페이스

우리가 사용하거나 만드는 애플리케이션들(= 앱)은 다양한 기능을 위해 다른 내부 애플리케이션 및 서드 파티 애플리케이션과 통신해야한다.

aws 공홈에서 든 예시로는, 월간 급여 명세서를 생성하려면 인보이스 발행을 자동화하고 내부의 근무 시간 기록 앱과 통신하기 위해 내부 계정시스템이 데이터를 고객의 뱅킹 시스템과 공유해야한다. 이때 RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 이러한 정보 교환을 지원한다.

API란 무엇인가요?

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

개발자는 다른 앱이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성한다. 예를 들어 근무 시간 기록 앱은 직원 전체 이름과 날짜 범위를 요청하는 API를 표시한다. 이 정보가 수신되면 내부적으로 직원의 근무 시간 기록을 처리하고 해당 날짜 범위에서 근무한 시간을 반환한다.

⇒ 즉, 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이 이다.

클라이언트

  • 웹에서 정보를 접근하려는 사용자
  • API를 사용하는 사람 또는 소프트웨어 시스템
  • ex) 개발자는 날씨 시스템에서 날씨 데이터에 접근하는 프로그램을 작성할 수 있다. 또는 사용자가 날씨 웹 사이트를 직접 방문할 때 브라우저에서 동일한 데이터에 접근할 수 있다.

리소스

  • 다양한 애플리케이션이 클라이언트에게 제공되는 정보
  • 이미지, 동영상, 텍스트, 숫자 또는 모든 유형의 데이터
  • 클라이언트에 리소스를 제공하는 시스템을 서버라고도 한다.
  • API를 사용해 리소스를 공유하고 보안, 제어 및 인증을 유지하면서 웹 서비스를 제공한다. 또한 API는 특정 내부 리소스에 접근할 수 있는 클라이언트를 결정하는데 도움이 된다.
    • ex. 임직원몰에 접근하기 위해서는 임직원인지 일반 사용자인지 결정할 때 api를 사용한다.

REST란 무엇인가요?

  • API 작동 방식에 대한 특정 조건을 부과하는 소프트웨어 아키텍처
  • 처음엔 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어짐
  • REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있음
  • 쉽게 구현하고 수정할 수 있어 모든 API 시스템을 파악하고 여러 플랫폼에서 사용할 수 있음

API 개발자는 여러 아키텍처를 사용해 API를 설계할 수 있다. 이때 REST 아키텍처 스타일을 따르는 API를 REST API라고 한다. REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다.

RESTful API라는 용어는 일반적으로 RESTful 웹 API를 나타낸다.

  • aws 공홈에서는 (REST API == RESTful API) 같은 의미로 사용할 수 있다고 한다.

REST 아키텍처 스타일의 원칙

  • 균일한 인터페이스
  • 무상태
  • 계층화 시스템
  • 캐시 가능성
  • 온디맨드 코드

균일한 인터페이스

  • 모든 RESTful 웹 서비스 디자인의 기본.
  • 서버가 표준 형식으로 정보를 전송함
  • 형식이 지정된 리소스를 REST에서 표현이라고 하는데, 이 형식은 서버 애플리케이션에 있는 리소스의 내부 표현과 다를 수 있다. ex) 서버에서는 데이터 text로 저장하되, HTML 표현 형식으로 전송함

균일한 인터페이스의 4가지 아키텍처 제약 조건

  1. 요청은 리소스를 식별해야한다. 이를 위해 균일한 리소스 식별자를 사용한다.
  2. 클라이언트는 원하는 경우 리소스를 수정하거나 삭제하기에 충분한 정보를 리소스 표현에서 가지고 있다. 서버는 리소스를 자세히 설명하는 메타데이터를 전송해 이 조건을 충족한다.
  3. 클라이언트는 표현을 추가로 처리하는 방법에 대한 정보를 수신한다. 이를 위해 서버는 클라이언트가 리소스를 적절하게 사용할 수 있는 방법에 대한 메타데이터가 포함된 명확한 메시지를 전송한다.
  4. 클라이언트는 작업을 완료하는 데 필요한 다른 모든 관련 리소스에 대한 정보를 수신한다. 이를 위해 서버는 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 넣어 전송한다.

무상태

  • 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법
  • 클라이언트는 임의의 순서로 리소스를 요청할 수 있으며 모든 요청은 무상태이거나 다른 요청과 분리된다.

계층화 시스템

  • 계층화된 시스템 아키텍처에서 클라이언트는 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결할 수 있으며 여전히 서버로부터도 응답을 받는다.
  • 서버는 요청을 다른 서버로 전달할 수도 있다.

캐시 가능성

  • RESTful 웹 서비스는 서버 응답 시간을 개선하기 위해 클라이언트 또는 중개자에 일부 응답을 저장하는 캐싱을 지원한다.
    • ex. 모든 페이지에 공통 헤더와 푸터 이미지가 있는 웹사이트를 방문 ⇒ 새로운 웹 사이트 페이지를 방문할 때마다 서버는 동일한 이미지를 다시 전송해야함 ⇒ 이를 피하기 위해 클라이언트는 첫 번째 응답 후에 해당 이미지를 캐싱하거나 저장한 다음 캐시에서 직접 이미지를 사용함
    • ⇒ RESTful 웹 서비스는 캐시 가능 또는 캐시 불가능으로 정의되는 API 응답을 사용해 캐싱 제어

RESTful API를 사용하면 어떤 이점이 있나요?

  • 확장성
    • REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정할 수 있음
    • 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거함
    • 잘 관리된 캐싱은 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거함
    • 이러한 모든 기능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원한다.
  • 유연성
    • RESTful 웹 서비스는 완전한 클라이언트-서버 분리
    • 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리
    • 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않는다. 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킨다.
      • 예를 들어, 개발자는 애플리케이션 로직을 다시 작성하지 않고도 데이터베이스 계층을 변경할 수 있다.
  • 독립성
    • REST API는 사용되는 기술과 독립적임
    • API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있다.
    • 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있다.

RESTful API는 어떻게 작동하나요?

RESTful API의 기본 기능은 인터넷 브라우징과 동일하다.

클라이언트는 리소스가 필요할 때 API를 사용하여 서버에 접속 ⇒ API 개발자는 서버 애플리케이션 API 문서에서 클라이언트가 REST API를 어떻게 사용해야 하는지 설명

  1. 클라이언트가 서버에 요청을 전송, 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정한다
  2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인.
  3. 서버가 요청을 수신하고 내부적으로 처리
  4. 서버가 클라이언트에 응답을 반환, 응답에는 요청의 성공여부 + 클라이언트가 요청한 모든 정보를 포함한다.

RESTful API 클라이언트 요청에는 무엇이 포함되어 있나요?

RESTful API에는 아래의 구성요소를 포함하는 요청이 필요하다.

  • 고유 리소스 식별자
    • 서버는 고유한 리소스 식별자로 각 리소스를 식별한다.
    • REST 서비스의 경우 서버는 일반적으로 URL(uniform Resource Locator)을 사용하여 리소스 식별을 수행한다. URL은 리소스에 대한 경로를 지정한다.
    • URL은 웹페이지를 방문하기 위해 브라우저에 입력하는 웹 사이트 주소와 유사하다.
    • URL은 요청 엔드포인트라고도 하며 클라이언트가 요구하는 사항을 서버에 명확하게 지정한다.
  • 메서드
    • 개발자는 HTTP(Hypertext Transfer Protocol)을 사용하여 Restful API를 구현한다. HTTP 메서드는 리소스에 수행해야하는 작업을 서버에 알려준다.
    • 4가지의 HTTP 메서드
      • GET⇒ GET 요청을 캐싱하고 RESTful API 요청에 파라미터를 넣어 전송하여 전송 전에 데이터를 필터링 하도록 서버에 지시할 수 있다. (ex. 상품검색할 때)
      • ⇒ 서버의 지정된 URL에 있는 리소스에 엑세스한다.
      • POST⇒ 요청과 함께 데이터 표현이 포함된다.
      • ⇒ POST 요청을 여러 번 전송하면 동일한 리소스를 여러번 생성하는 부작용이 있다.
      • ⇒ 서버에 데이터를 전송한다.
      • PUT⇒ POST와 달리, RESTful 웹 서비스에서 동일한 PUT 요청을 여러 번 전송해도 결과는 동일하다.
      • ⇒ 서버의 기존 리소스를 업데이트한다.
      • DELETE⇒ DELETE 요청은 서버 상태를 변경할 수 있다.
      • ⇒ 사용자에게 적절한 인증이 없으면 요청은 실패한다.
      • ⇒ DELETE 요청을 사용해 리소스를 제거한다.
  • HTTP 헤더
    • 요청 헤더는 클라이언트와 서버 간에 교환되는 메타데이터
    • ex. 요청 헤더는 요청 및 응답의 형식을 나타내고 요청 상태 등에 대한 정보를 제공한다.
      • 데이터
      • ⇒ REST API 요청에는 POST, PUT 및 기타 HTTP 메서드가 성공적으로 작동하기 위한 데이터가 포함될 수 있다.
      • 파라미터⇒ 파라미터 유형 예시 ex 1. URL 세부정보를 지정하는 경로 파라미터ex 3. 클라이언트를 빠르게 인증하는 쿠키 파라미터
      • ex 2. 리소스에 대한 추가 정보를 요청하는 쿼리 파라미터
      • ⇒ RESTful API 요청에는 수행해야 할 작업에 대한 자세한 정보를 서버에 제공하는 파라미터가 포함될 수 있다.

RESTful API 인증 방법이란 무엇인가요?

  • RESTful 웹 서비스는 응답을 보내기 전에 먼저 요청을 인증해야 한다.
  • 인증은 예를 들어, 신분증이나 운전면허증을 제시하여 신원을 증명할 수 있는 것처럼 신원을 확인하는 프로세스이다.
  • 마찬가지로 RESTful 서비스 클라이언트는 신뢰를 구축하기 위해 서버에 자신의 신원를 증명해야 한다.

RESTful API의 4가지 일반적인 인증 방법

  • HTTP 인증 ⇒ REST API를 구현할 때 직접 사용할 수 있는 일부 인증 체계를 정의
    • 기본 인증
      • 클라이언트는 요청 헤더에 사용자 이름과 암호를 넣어 전송
      • 안전한 전송을 위해 이 페어를 64자의 세트로 변환하는 인코딩 기술인 base 64로 인코딩한다. (로그인 절차 같다)
    • 전달자 인증
      • 전달자(bearer) 인증이라는 용어는 토큰 전달자에 대한 엑세스 제어를 제공하는 프로세스다.
      • 일반적으로 전달자 토큰은 서버가 로그인 요청에 대한 응답으로 생성하는 암호화된 문자열이다. 클라이언트는 리소스에 엑세스 하기 위해 요청 헤더에 토큰을 넣어 전송한다.
      • 나의 경우, 스포티파이 api 사용할 때 요청 헤더의 Autorization에 Bearer ${token} 형태로 넣어서 권한을 확인했었다.
  • API 키 인증
    • REST API 인증을 위한 또 다른 옵션
    • 서버는 고유하게 생성된 값을 최초 클라이언트에 할당
    • 클라는 리소스에 엑세스하려고 할 때 마다 고유한 API 키를 사용하여 본인을 검증함
    • API 키의 경우 클라이언트가 이 키를 전송해야해서 네트워크 도난에 취약하기 때문에 덜 안전하다.
  • OAuth 인증
    • 암호와 토큰을 결합
    • 서버는 먼저 암호를 요청한 다음 권한 부여 프로세스를 완료하기 위해 추가 토큰을 요청
    • 특정 범위와 수명으로 언제든지 토큰을 확인할 수 있다.

RESTful API 서버 응답에는 무엇이 포함되어 있나요?

  • 상태 표시줄
    • 상태 표시줄에는 요청 성공 또는 실패를 알리는 3자리 상태 코드가 있다.
    • ex. 2XX 코드는 성공을 나타내고 4XX 및 5XX 코드는 오류를 나타낸다. 3XX코드는 URL 리디렉션을 나타낸다. 나는 보통 서버 에러에선 500번대 에러가 나왔었다.
      • 일반적인 상태 코드 예시
      • 200: 일반 성공 응답
      • 201: POST 메서드 성공 응답
      • 400: 서버가 처리할 수 없는 잘못된 요청
      • 404: 리소스를 찾을 수 없음
  • 메시지 본문
    • 응답 본문에는 리소스 표현이 포함된다.
    • 서버는 요청 헤더에 포함된 내용을 기반으로 적절한 표현 형식을 선택한다.
    • 클라이언트는 데이터 작성 방식을 일반 텍스트로 정의하는 XML 또는 JSON형식으로 정보를 요청할 수 있다.
    • ex. 클라이언트가 John이라는 사람의 이름과 나이를 요청하면 서버는 다음과 같이 JSON 표현을 반환한다.
      • '{"name":"John", "age":30}’
  • 헤더
    • 응답에 대한 헤더 또는 메타데이터도 포함된다.
    • 응답에 대한 추가 컨텍스트를 제공하고, 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보를 포함한다.

 

 

 

출처 : https://aws.amazon.com/ko/what-is/restful-api/