Post

[CS] REST API, RESTful API

[CS] REST API, RESTful API


🌱 API (Application Proframming Interface)


  • 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스 (위키백과)
  • 처음부터 개발하거나 유지보수할 필요가 없는 외부 데이터와 기능에 접속하게 해줌
    • ex) 네이버 서비스에 나의 웹페이지를 공유하고 싶다면, 네이버에서 제공하는 공유하기 API를 이용하면 됨
    • ex) ‘날씨 앱’은 ‘기상청의 소프트웨어 시스템’과 API를 통해 대화하여 매일 최신 날씨 정보를 보여줌
  • 한 프로그램에서 다른 프로그램으로 데이터를 주고받기 위한 방법, 현실에서 ‘메뉴판’ 같은 것 (유튜브 ‘코딩애플’)
    • ex) 웹툰서비스 API: 웹툰서버와 이용객이 웹툰을 주고받기 위한 방법 -> 코드로 이루어져 있음


API가 가져야 할 내용

  • 요청 방식 (method) (get/put)
  • 무슨 자료를 요청할건지 (end point)
  • 자료 요청에 필요한 정보 (parameter) (아이디, 이름 등)


API 생성

  • API 계획: 다양한 사용 사례를 미리 생각하고, API가 현재 API 개발 표준을 준수하는지 확인
  • API 빌드: 상용 코드를 사용하여 API 프로토타입 생성
  • API 테스트: 소프트웨어 테스트와 동일. 버그 및 결함을 방지하기 위해 수행
  • API 문서화: API 문서는 사용 편의성을 높이는 가이드 역할
  • API 마케팅


🌱 REST API


  • REpresentational State Transfer
  • HTTP를 잘 사용하기 위한 아키텍처 스타일
  • 오늘날 웹에서 가장 많이 사용되는 유연한 API
  • 클라이언트가 서버 데이터에 엑세스하는데 사용할 수 있는 GET, PUT, DELETE 등의 함수 집합 정의
  • 클라이언트와 서버는 HTTP를 사용하여 데이터 교환


과정

  • 클라이언트가 서버에 요청을 데이터로 전송
  • 서버가 이 클라이언트 입력을 사용하여 내부 함수 시작
  • 출력 데이터를 다시 클라이언트에 반환


REST API의 필수 제약 조건

  • Client-Server
    • 클라이언트는 서버에서 어떤 일을 수행하더라도 내부 작업을 알지 않아도 됨
    • 이는 플랫폼의 이식성 향상시킴
  • Stateless
    • 클라이언트에서 서버로 하는 각 요청에는 그 요청에 필요한 모든 정보가 포함되어야 함
  • Cache
    • 요청에 대한 응답 내의 데이터에 해당 요청은 캐시가 가능한지 불가능한지 명시해야 함
    • 보통 HTTP Header에 cache-control 헤더 이용
  • Uniform Interface


Uniform Interface

  • URL로 지정된 리소스에 대한 조작을 통일하고 한정된 인터페이스로 수행하는 아키텍처 스타일
  • 제약조건
    • Resource-Based
    • Manipulation Of Resources Through Representations
    • Self-Descriptive Message: API 문서가 REST API 응답 본문에 존재해야 함 (적어도 어디에 있는지)
    • Hypermedia As the Engine Of Application State (HATEOAS)
      • Hypermedia(링크)를 통해서 애플리케이션의 상태 전이가 가능해야 함
      • 또한, Hypermedia(링크)에 자기 자신에 대한 정보가 담겨야 함


REST API 사용의 이점

  • 통합: 새로운 애플리케이션을 기존 소프트웨어 시스템과 통합하는 데 사용
  • 혁신: 새로운 앱의 등장으로 전체 산업이 바뀔 수 있음. 전체 코드를 다시 작성할 필요 없이 API 수준에서 변경 가능
  • 확장: 다양한 플랫폼에서 고객의 요구 사항을 충족할 수 있도록 지원
  • 유지 관리의 용이성: 두 시스템 간의 게이트웨이 역할 -> API가 영향을 받지 않도록 내부적으로 시스템 변경 -> 한 시스템의 코드 변경이 다른 시스템에 영향 미치지 않음


🌱 RESTful API


  • REST한 방식으로 클라이언트와 서버간 상호 데이터 교환을 하는 API
  • HTTP를 잘 사용하기 위해, URI와 HTTP 메소드를 사용해서 URL로 어떤 자원에 접근할 것인지, 메소드로 어떤 행위를 할 것인지 표현하여 설계한 API


RESTful API로 간주되기 위한 조건

  • 클라이언트-서버 커뮤니케이션: 요청 간에 클라이언트 정보가 저장되지 않으며, 각 요청이 분리되어 있고 서로 연결되어 있지 않음
  • Stateless(무상태): 서버가 요청 간에 클라이언트 데이터를 저장하지 않음
  • 즉, 클라이언트는 서버를 신경 쓸 필요 없이 API 호출만 하면 원하는 결과를 받을 수 있음


RESTful API의 장점

  • 보기 좋음: URL만 보고 어떤 자원에 접근할 것인지, 메소드를 보고 어떤 행위를 할 것인지 알 수 있어 개발에 용이함
  • 자원 효율적 이용: 한 개의 URI로 3개의 행위(CRUD)를 명시할 수 있어 효율적
  • 무상태 유지: 다양한 브라우저와 모바일에서 통신할 수 있도록 함. 클라이언트가 서버에 종속되지 않아도 되기 때문에, scale out한 상황에서도 용이함
This post is licensed under CC BY 4.0 by the author.