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
상태코드
- 자세한 내용은 전에 작성했던 글 참조.... https://yamdurian.tistory.com/54
[웹기초] 01. WEB의 이해 | 02. HTML의 이해 | 03. 도메인의 이해 | 04. 프로토콜의 이해 | 05. 쿠키와 세션
웹 : 서로 다른 환경에서 정보를 공유함에 있어 발생하는 문제 해결을 위해 만들어진 개념특징 : 텍스트, 그림, 소리 영상 등의 정보를 하이퍼텍스트로 연결해 제공 | 하이퍼텍스트를 해석해 우
yamdurian.tistory.com
미디어 타입과 링크 헤더
- Content-Type : Media Type
- Content-Type : 콘텐트 타입의 의미를 나타낼 때 사용
- Media Type : 문서, 파일 형식을 나타냄 | type/subtype 구조로 되어 있음
- 참고문서 : https://developer.mozilla.org/ko/docs/Web/HTTP/MIME_types
- 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 디자인 참고문서
- MS 웹 API 디자인 가이드) https://microsoft.github.io/code-with-engineering-playbook/design/design-patterns/rest-api-design-guidance/
- 구글 API 디자인 가이드) https://cloud.google.com/apis/design?hl=ko
728x90
반응형