본문 바로가기

개발

REST API

https://rumbling-bear-8d2.notion.site/RESTful-API-API-a2c9507e91ff44b7aa032e5acffa3ac6

 

RESTful API (휴식스러운 API)

📌 REST API란?

rumbling-bear-8d2.notion.site

 

제가 직접 작성한 글입니다. 

 

REST API란?

사람들이 'REST API'라는 용어를 사용할 때 일반적으로 사전 정의된 URL 집합을 HTTP 프로토콜을 사용하여 API를 접근하는 것을 뜻합니다. 출처: How to Use Our REST APIs

 

  • 깨알지식
    • 실제 REST는 하이퍼미디어에 기반한 분산 시스템을 만들기 위한 아키텍쳐 스타일. 고로 HTTP에 꼭 연관 되어 있지 않아도 됨.
    • 하지만 대부분 REST API는 HTTP protocol를 사용함.
  • 역사
    • REST 이전엔 SOAP을 사용함.
    • 2000년도 “로이 필딩”이 박사 논문으로 “Architectural Styles andthe Design of Network-based Software Architectures” 발표함. 챕터 5에 REST 제약조건을 서술. 어떤 서버이든 아무 서버와 통신할 수 있도록 가능케 해주는 아키텍쳐.
    • 2000년 Salesforce라는 “Internet as a Service” 제품에 처음 도입함. 당시에는 XML기반으로 사용함.
    • 그 다음 eBay가 도입함. eBay가 도입 당시 자신들의 API를 접속할 수 있는 모든 웹사이트를 대상으로 시장을 확대함.
    • eBay로 인해 Amazon이 2002년도에 도입함.
    • Flickr가 2004년도 도입. REST API를 도입함으로써 블로거들이 자신들의 사이트에 쉽게 이미지를 embed 할 수 있도록 함.
    • 2006년 AWS가 AWS REST API를 도입하여 개발자들이 데이터 공간을 수분 내에 접근할 수 있도록 함.
    • 오늘날 REST API는 인터넷의 근간이 되었음.
    • 참고:
  • REST의 장점
    • JSON/XML/HTML의 형식이면서, 경량, lightweight임.
    • 클라이언트와 서버의 독립
    • 확장성과 유연성
      • 서버/클라이언트의 독립으로 인해 확장이 용이함.
      • 개발자들은 추가 수고 없이 REST API를 자신들의 소프트웨어 도입할 수 있음.
    • 참고:
  • SOAP vs REST
    • SOAP은 표준화 된 프로토콜
    • REST는 아키텍쳐 스타일

📌 REST API 설계 방법

  • 리소스 중심으로 설계. 웹 API가 노출하는 비즈니스 엔티티에 집중
    • 리소스란?
      • API가 Client에게 제공하는 정보
  • 리소스는 명사 중심, 동사 지양 (가능하면)
  • 구조는 collection/item/collection
    • /customers/1/orders
    • 이 계층 이상으로 넘어가는 것 지양.
    • /customers/1/orders/99 까지는 괜찮지 않을까 개인적으로 생각.
    • /customers/1/orders/99/products 이런 쿼리는
      • /customers/1/orders
      • /orders/99/products
      • 이렇게 나눠서 쿼리
  • 내부 데이터베이스 구조를 그대로 API에 노출 지양
  • 여러 리소스를 여러 request에 나누기 보다는 한번에 불러 올 수 있도록 설계. 단, overfetching은 피하기.
  • 만약, API operation을 특정 리소스에 맵핑 할 수 없다면 query string 사용.
    • 예) GET 요청 /add?operand1=99&operand2=1
  • Media types
    • JSON, XML (주로 JSON)

출처: Web API design best practices - Azure Architecture Center

일반적인 CRUD 형태

  • HTTP Method 요청
  • PUT vs PATCH
    • PUT:
      • item에 대한 전체 업데이트.
      • idempotent (멱등성: 연산을 여러번 적용하더라도 결과가 달라지지 않음.)
    • PATCH:
      • item에 대한 부분 업데이트. * PATCH도 item에 대한 전체 업데이트 가능.
      • idempotent (멱등성 보장하지 않음.)

출처:Web API design best practices - Azure Architecture Center

LIST, 페이지, 검색 필터등에 대한 처리: Query String 으로 처리.

  • 필터
    • /orders?minCost=n
  • 페이징
    • /orders?limit=25&offset=50
  • 디리미터 사용
    • /orders?fields=ProductID,Quantity.

출처: Web API design best practices - Azure Architecture Center

다중 항목 업데이트

📌 REST API for REACT

참고자료: