API , Restful

 API  

 

1) API 란? 

  • 애플리케이션 프로그래밍 인터페이스 ( Application Programming Interface )의 약자
  • 애플리케이션 소프트웨어를 구축하고 통합하기 위한 정의 및 하위 함수, 프로토콜, 도구들의 집합
  • 명확하게 정의되어 있는 다양한 컴포넌트 간 통신 방법
  • 당사자들 간 계약을 나타내는 Documentation을 갖춘 계약으로 비유되기도 함

 

2) API 이점

  • 구현 방식을 모르는 제품 또는 서비스가 서로 커뮤니케이션 가능
  • 애플리케이션 개발 간소화로 시간과 비용 절약
  • 새로운 툴과 제품 설계 또는 기존 툴/제품 관리 실행 시 유연성 제공
  • 설계/ 관리/ 사용 방법을 간소화 하며 혁신 기회 제공

 

3) API 작동 방식

  • 한쪽 당사자가 특정한 방식으로 구성된 원격 요청을 보내면 다른 쪽 당사자의 소프트웨어가 응답하는 방식
  • 클라우드 네이티브 애플리케이션 개발을 통해 자체 인프라를 연결하는 간소화된 방식
  • 그러나 고객 및 다른 외부 사용자와의 데이터 공유를 허용하기도 함
  • 개발자가 새로운 애플리케이션 구성 요소를 기존 아키텍처에 통합하는 방식을 간소화

 

API 관계도

4) API 정책

  • 프라이빗 ( Private )
    • API를 내부에서만 사용할 수 있도록 하며, 기업이 API를 최대한으로 제어할 수 있다.
  • 파트너 ( Partner )
    • API를 특정 비즈니스 파트너와 공유하며, 품질 저하 없이 추가 수익원을 창출할 수 있다.
  • 퍼블릭 ( Public )
    • API가 모두에게 제공되며, 제 3자가 API와 상호 작용하는 애플리케이션을 개발하여 혁신을 끌어낼 수 있다.

 

"Public API 가 될 때 가장 중요한 것은 ‘인터페이스 안정성’이다.
파라미터 하나를 추가하는 것 조차도 기존 고객들의 시스템을 파괴해 버릴 수 있다. 
그래서 Public API 로 배포되는 경우 아직 개발 중이라면 unstable(불안정) 할 수 있다고 반드시 표시를 해 주어야 한다. "

 

 

 

 RESTful 

1) RESTful 이란?

웹 API가 확산되면서 정보 교환 표준화를 위해 개발된 사양으로는 프로토콜인 SOAP ( Simple Object Access Protocol )Architecture 스타일 REST (Representational State Transfer ) 이 두가지가 있다.

   

  SOAP 

  • XML 메시지 형식 사용
  • HTTP / SMTP 를 통한 요청 수신
  • 보다 간편한 방법으로 앱을 다양한 환경에서의 실행, 다양한 언어를 이용한 작성이 가능

 

2) REST 등장 배경

  • 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개
  • HTTP의 주요 저자 중 한 사람으로써 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습을 안타까워 함
  • 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표

 

3) RESTful API

  • RESTful API : REST Architecture의 제약 조건을 준수하는 웹 API
  • 공식적인 표준이 존재하지 않음
  • 규정된 프로토콜보다 간단한 SOAP보다 높은 사용률을 보임

 

 RESTful API 구성 요소 

자원(Resource) : URI 행위(Verb) : HTTP Method 표현(Representations)

 

 

* OpenAPI 사양

  • REST API를 정의하는 공통 표준으로 급부상
  • 언어 독립적 방식 > REST API 인터페이스 구축 > 사용자가 별 추측 없이 사용가능

 

4) RESTful API 제약조건

  • Client - Server Achitecture

    • REST 아키텍처 클라이언트, 서버, 리소스(Resource)로 구성되며 HTTP를 통해 요청을 처리

    • REST 서버 : API제공 / Client : 사용자 인증, 컨텍스트(Session, Login정보)등을 직접 관리
    • 역할이 구분되어 개발 내용의 명확화 및 상호 간 의존성 감소

 

  • 무상태성 ( Stateless )

    • REST 서버에는 들어오는 요청만 처리하도록 되어 있으며, 별도로 세션 및 쿠키 정보를 저장/ 관리 하지 않음
    • 작업을 위한 상태 정보가 저장되지 않으며 이는 클라이언트 측에 저장됨
    • 서비스 자유도 향상 및 서버 내 불필요한 정보의 부재로 단순화된 구현

 

  • 캐시 가능성 ( Cacheable ) 

    • 기존 웹 표준 HTTP 그대로 사용함 > 웹에서 사용한 기존 인프라 그대로 활용 가능
    • HTTP 프로토콜 표준에서 사용하는 Last-modified 태그 또는 E-Tag를 이용한 캐싱 구현 가능

 

  • 계층화된 시스템

    • REST 서버는 다중 계층으로 구성되어 클라이언트-서버 간 상호 작용 조정 가능
    • 보안, 로드 밸런싱, 공유 캐시와 같은 추가 기능 제공으로 구조 상의 유연성 실현 가능
    • Proxy, Gateway 와 같은 네트워크 기반 중간 매체 사용 가능

     

  • 코드 온디맨드(옵션) :

    • 서버가 실행 가능한 코드를 전송하여 클라이언트의 기능 확대 가능

 

  • 통합된 인터페이스 : RESTful API 설계의 핵심으로 다음과 같은 4가지 측면을 포함

    • 요청에서 리소스 식별: 리소스는 요청에서 식별되며 클라이언트로 반환된 표현으로부터 분리

    • 표현을 통한 리소스 조작: 클라이언트가 리소스를 나타내는 파일을 수신

      • 이 표현에는 조작 또는 삭제를 허용할 수 있도록 충분한 양의 정보가 포함되어야 함

    • 자기 기술적(Self-descriptiveness) 메시지

      • 클라이언트로 반환되는 메시지 : 클라이언트가 수행해야 할 정보 처리 방식을 충분히 기술해야 함

    • 애플리케이션 상태 엔진으로서의 하이퍼미디어: 

      • 리소스 할당 후 REST 클라이언트가 하이퍼링크를 통해 현재 사용 가능한 기타 모든 작업을 탐색 가능

 

 

 

 

 

 

 

 

 

참고:

https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces#

 

'Knowledge' 카테고리의 다른 글

하드웨어 / 미들웨어 / 소프트웨어  (0) 2019.08.30
소프트웨어 개발 방법론  (0) 2019.08.15
프로그래밍 언어 종류 10가지  (2) 2019.08.10
DNS  (0) 2019.08.01
절대경로 vs 상대경로  (0) 2019.08.01