JavaScript/JS백엔드

[REST] 웹 API 디자인

염두리안 2025. 1. 16. 01:42
728x90
반응형

REST 제약조건

  • REST(Representational State Transfer) : 표현된 자원의 상태를 주고 받는 방법을 정리한 아키텍처 스타일
  • Client-Server(클라이언트-서버) : API를 통해 정보를 교환하는 주체는 클-서 구조를 가져야 함 | 클라이언트와 서버 분리를 통해 서로 의존하지 않는 구조를 가져야 함
  • Stateless(무상태성) : 클라이언트는 상태를 저장하지 않는다 | 클라이언트의 각 리퀘스트는 서버가 리퀘스트를 이해하는데 필요한 모든 정보를 포함해야 함
  • Cache(캐시) : 데이터 복사본을 임시 저장 위치에 저장해 보다 빠르게 액세스할 수 있도록 하는 프로세스인 캐싱을 통해 네트워크 효율성을 높임 | 리퀘스트에 대한 리스폰스에 캐시 가능 및 불가능 여부가 들어 있어야 함
  • Uniform Interface(일관된 인터페이스) : 전체 시스템을 잘 파악할 수 있도록 일관된 인터페이스 제공 | 구현체가 서비스와 별도로 독립적으로 진화할 가능성을 얻게 됨(낮은 결합도)
  • Layered System(계층화된 시스템) : 클라이언트는 서버에 직접 연결 됐는지, 중간 서버를 통해 연결 됐는지 알 수 없어야 함
  • Code on Demand(주문형 코드) : 서버에서 보낸 코드를 클라이언트에서 실행할 수 있어야 함 | 선택적 제약 조건이며 안 지켜도 REST에 문제 없음

URI : 자원에 대한 식별을 함

  • 규칙) 명사형 사용 | 반환하는 자원의 종류에 따라 단수/복수형 사용하기 | 계층 표현을 위해 슬래시(/) 사용 | 마지막 슬래시(/) 붙이지 않기 | 모두 소문자로 작성, 띄어쓰기 대신 대시(-) 사용 | 파일 확장자 포함 X | 목록에 필터가 필요할 땐, 쿼리 문자열 사용 | URI에 동사 사용 X

HTTP 메소드 : 자원을 다루는 행동

  • GET : 자원 가져오기 || 가져오기 때문에 자원은 변화하지 않도록 함 | 여러번 리퀘스트 보내도 같은 리스폰스 돌려줌 | 안전한 메소드 
  • POST : 자원 조작 || 자원의 변화 有 | 자원 목록에 데이터를 전송해 새로운 자원 생성 요청 
  • PUT/PATCH : 자원 수정
    • PUT : 교체
    • PATCH : 부분 수정
  • DELETE : 자원 삭제
  • 조작의 표현 → HTTP Method | 자원의 표현 → JSON

상태코드

 

[웹기초] 01. WEB의 이해 | 02. HTML의 이해 | 03. 도메인의 이해 | 04. 프로토콜의 이해 | 05. 쿠키와 세션

웹 : 서로 다른 환경에서 정보를 공유함에 있어 발생하는 문제 해결을 위해 만들어진 개념특징 : 텍스트, 그림, 소리 영상 등의 정보를 하이퍼텍스트로 연결해 제공 | 하이퍼텍스트를 해석해 우

yamdurian.tistory.com

 

미디어 타입과 링크 헤더

  • Content-Type : Media Type
  • Link : Profile
    • 링크 헤더에 프로필 릴레이션과 함께 API 설명서 링크를 작성하는 것

HATEOAS(Hypermedia as the engine of application state) : 하이퍼미디어를 사용한 앱 상태 표현 및 변경

  • 리스폰스 바디에 상태 변경을 위한 링크 포함) HAL(리소스+링크 구조) 사용
  • 링크 헤더) < > 를 통해 표현 

캐싱 : 재사용을 위해 데이터를 저장해 사용하는 것

  • 헤더) 캐싱할 자원 판단 | 클라이언트-서버의 자원 정보를 전달
  • Cache-Control) 캐싱 방식
    • max-age : 시간 제약
  • Last-Modified) 마지막으로 수정된 날짜
    • 단점) 날짜, 시간 기반 ~> 1초보다 작은 단위 캐시 관리 불가능 | 자원이 변하지 않더라도 수정된 시간만 변경된 경우 다른 데이터로 인식
  • ETag) 자원마다 부여된 식별자(문자열)... Last-Modified 단점 보완

API 버전 명시하기(버저닝) : URI, 쿼리스트링, 리퀘스트 헤더에 버전 명시

 

페이지네이션 : 번호를 붙여 응답 받는 것(게시판 하단 페이지 번호 버튼 생각하면 됨) | 사용자들이 사용할수록 늘어나는 서브스에 적합

 

웹API 디자인 참고문서

728x90
반응형