RESTful API ?

Terror·2025년 1월 18일

개요

  • RESTful API에 대한 고찰과, 명확한 정의를 이해 할 수 있습니다

RESTful API란 무엇인가요?

  • "두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스 입니다"
    • 인터페이스: 두 시스템간의 상호방식 방식을 정의하는 표준화된 경계
  • 대부분의 비즈니스 애플리케이션은 다양한 태스크(일)을 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 (외부 라이브러리) 애플리케이션과 통신 해야합니다
  • RESTful API는 안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 이러한 정보 교환을 지원합니다

API란 무엇인가요?

  • "애플리케이션 프로그래밍 인터페이스는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙"
  • 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성합니다
  • 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라고 생각 할 수 있습니다
    • 웹 API가 클라이언트와 서버 간의 데이터를 주고받는 중간 역할을 한다
    • 라는 의미로 해석 가능

클라이언트

  • "웹에서 정보에 엑세스(이용) 하려는 사용자 입니다"
  • API를 사용하는 사람,소프트웨어 시스템일 수 있습니다

리소스

  • "다양한 애플리케이션이 클라이언트에게 제공하는 정보 입니다"
  • 이미지,동영상,텍스트,숫자와 같은 유형 입니다
  • 클라이언트에 리소스를 제공하는 시스템을 서버라고도 합니다
  • 조직은 API를 사용하여 리소스를 공유하고 보안,제어 및 인증을 유지하면서 웹 서비스를 제공합니다
  • API는 특정 내부 리소스에 엑세스 할 수 있는 클라이언트를 결정하는데 도움이 됩니다

REST란 무엇인가요?

  • "REpresenational State Transfer(REST)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처"입니다
  • REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌습니다
  • REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있습니다
  • 쉽게 구현하고 수정할 수 있어 모든 API 시스템을 파악하고 여러 플랫폼에서 사용할 수 있습니다
  • API 개발자는 여러 아키텍처를 사용하여 API를 설계할 수 있습니다
  • REST 아키텍처 스타일을 따르느 API를 REST API라고 합니다
  • REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스 라고합니다
  • RESTful API라는 용어는 일반적으로 RESTful 웹 API를 나타냅니다
  • 다음은 REST 아키텍처 스타일의 몇 가지 원칙입니다

균일한 인터페이스

  • "모든 RESTful 웹 서비스 디자인의 기본"
  • 이는 서버가 표준 형식으로 정보를 전송함을 나타냅니다
  • 형식이 지정된 리소스를 REST에서 표현이라고 부릅니다
  • 이 형식은 서버 애플리케이션에 있는 리소스의 내부 표현과 다를 수 있습니다
  • ex) 서버는 데이터를 텍스트로 저장하되, HTML 표현 방식으로 전송할 수 있습니다
    • 클라이언트는 서버에게 데이터를 요청할때 Accept 속성을 활용하여 HTML,JSON형태로 받을지 정할 수 있다
    • 즉 서버의 DB에 Text로 저장하였어도, 클라이언트의 요청에따라 HTML로 반환 할 수 있다는 뜻이다
  • 균일한 인터페이스에는 4가지 아키텍처 제약 조건이 존재합니다
    1. 요청은 리소스를 식별 해야한다. 이를 위해 균일한 리소스 식별자를 사용합니다
      • 요청은 리소스를 식별해야한다는 뜻은, Restful 설계원칙에 따랐는지가 관건이다
      • 즉, /users/123이나 /users?id=123 둘다 123의 user를 식별할 수 있지만, 후자는 Restful 설계원칙에 어긋나기 때문에 전자가 맞다고 볼 수 있다
    2. 클라이언트는 원하는 경우 리소스를 수정하거나 삭제하기에 충분한 정보를 리소스 표현에서 가지고 있습니다
      • ex) PUT /users/123
    3. 클라이언트는 표현을 추가로 처리하는 방법에 대한 정보를 수신합니다. 이를 위해 서버는 클라이언트가 리소스를 적절하게 사용할 수 있는 방법에 대한 메타데이터가 포함된 명확한 메세지를 전송합니다
    4. 클라이언트는 작업을 완료하는데 필요한 다른 모든 관련 리소스에 대한 정보를 수신합니다. 이를 위해 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 넣어 전송합니다
      • 3,4번의 예시를 들어보면 아래와 같다
      • 위와같은 식의 데이터를 제공해줌을 의미
      • 리소스와 관련된 다음 동작을 안내하는 메타데이터(링크 등)를 포함

무상태

  • REST 아키텍처에서 무상태는 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법
  • 클라이언트는 임의의 순서로 리소스를 요청할 수 있으며, 모든 요청은 무상태이거나 다른 요청과 분리 됩니다
    • 다른 요청과 분리된다: 각 서버의 요청은 독립적이다
  • 이 REST API 설계 제약 조건은 서버가 매번 요청을 완전히 이해해서 이행할 수 있음을 의미합니다
    • 서버는 클라이언트의 요청만을 보고 요청을 처리할 수 있어야하며, 이전 요청의 맥락이나 상태에 의존하지 않아야한다는 의미

계층화 시스템

  • 시스템 아키텍처에서 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결할 수 있으며, 여전히 서버로부터도 응답을 받습니다
    • 클라이언트 -> 서버 구조가 아닌
    • 클라이언트 -> 승인된 중개자(로드밸런서, ngnix, proxy) -> 서버
    • 일 수도 있다는 의미
  • 서버는 요청을 다른 서버로 전달할 수 있습니다
  • 클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹 서비스를 설계할 수 있습니다
  • 이러한 계층은 클라이언트에 보이지 않는 상태로 유지됩니다

캐시 가능성

  • 서버 응답 시간을 개선하기위해 클라이언트 또는 중개자에 일부 응답을 저장하는 프로세스인 캐싱을 지원
  • Ex)
    • 모든페이지에 공통 머리글 및 바닥글 이미지가 있는 웹 사이트 방문
    • 동일한 웹사이트를 새로고침할 경우, 서버는 동일한 이미지를 다시 전송 해야합니다
    • 이를 피하기 위해 클라이언트는 첫 번째 응답후에 해당 이미지를 캐싱하거나, 저장한 다음 직접 사용합니다
    • RESTful 웹 서비스는 캐시 가능 또는 캐시 불가능으로 정의되는 API 응답을 사용하여 캐싱을 제어합니다
      • 비 RESTful 웹서비스에 비해 캐싱적용이 유리하다라는 의미
      • GET /users/123 은 리소스가 확실하지만
      • /users?id=123 은 리소스가 불확실하여, 캐싱에 모호하다는 의미

온디맨디 코드

  • 필요할때 제공한다 라는 의미
  • REST 아키텍처 스타일에서 서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정 할 수 있습니다
    • 이를 통해 클라이언트는 차트모양을 표현 할 수 있게 되는 것이다

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

확장성

  • REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정할 수 있습니다
  • 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 떄문에 서버 로드를 제거합니다
  • 잘 관리된 캐싱은 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거합니다
  • 이러한 모든 기능은 성능을 저하시키는 병목현상을 일으키지않으면서, 확장을 지원합니다

유연성

  • RESTful 웹 서비스는 완전한 클라이언트-서버 분리를 지원합니다
  • 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리합니다
  • 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않습니다
    • Java에서는 /users/getUser/1 으로 할수있는데,
    • Python으로 변경되면 /users/fetchUsers/1로 될수있다는 이야기
    • 각 기술마다 사용하는 용어가 다르기 떄문에 그러하다
    • 이러한 연유로 플랫폼에 종속되지 않는다는 특징도 있다
  • 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킵니다

독립성

  • REST API는 사용되는 기술과 독립적입니다
  • 유연성에서 이어지는 이야기이다

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

  • 기본기능은 인터넷 브라우징과 동일합니다
  • 클라이언트는 리소스가 필요할 때 API를 사용하여 서버에 접속합니다
  • API개발자는 서버 애플리케이션 API 문서에서 클라이언트가 REST API를 어떻게 사용해야 하는지 설명합니다
    1. 클라이언트가 서버에 요청 전송, 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식 지정
    2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인
    3. 서버가 요청을 수신하고 내부적으로 처리
    4. 서버가 클라이언트에 응답을 반환합니다. 응답에는 요청이 성공했는지 알려주는 정보가 포함되며, 클라이언트가 요청한 모든 정보도 포함됩니다

오늘 나는 무엇을 알았는가?

  • GET /users/123
    • 리소스에 행동이 정의되어 있지않아 RESTful한 API라고 볼 수 있다
  • /users?id=123
    • 반대로 리소스에 id는 123이라는 행동이 정의 되어있어 RESTful한 API라고 볼 수 없다
  • RESTful한 API란?
    • 메소드와 URI를 통해 졍확한 리소스를 가리키는것, URI에는 행동이 정의되어있으면 안됨

참조 문헌

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

profile
테러대응전문가

0개의 댓글