티스토리 뷰
728x90
Rest API
- REST 아키텍쳐 아키텍쳐 스타일을 따르는 API
- RepresenTational State Transfer
- 아키텍쳐 스타일
- 제약조건들의 집합
- 6가지 제약 조건
- Client-Server
- Stateless
- cache
- uniform interface
- layered system
- code-on-demand (optional)
- Client-Server, Stateless, cache, layerd system은 http만 사용해도 대부분 만족한다.
Client-Server
- 클라이언트와 서버가 서로 의존하지 않고 별도로 진화할 수 있다.
Stateless
- 클라이언트에서 서버로의 각 요청에는 그 요청을 이해하는데 필요한 정보가 포함되어야 한다.
- 서버에 저장된 환경정보를 이용해서 이득(서버에서 클라이언트 정보 유지등)을 취하면 안된다.
- 세션의 정보는 전적으로 클라이언트가 가지고 있어야 한다.
Cacheable
- 요청에 대한 응답 내의 데이터에 해당 요청은 캐시가 가능한지 불가능한지 명시해야 한다.
- 캐시를 사용한다면, 동일한 요청이 왔을 때 응답 데이터를 재사용할 수 있어야 한다.
- cache-control 헤더를 통하여 캐시 여부 명시
Uniform Interface
- 전체적인 시스템 아키텍처를 간단하고 잘 파악할 수 있도록 하기 위한 약속된 Interface
- 4가지 제약조건
- identification of resources
- resources가 URI로 식별될 수 있어야 한다.
- manipulation of resources through representations
- resource를 만들거나, 수정하거나, 삭제하거나 할 때, http message에 표현을 담는다.
- self-descriptive message
- 해당 데이터에 대한 파싱까지는 가능하지만, 이것이 어떤값인지에 대한 명세가 없기때문에 대부분 만족하지 못한다.
- REST 하게 만드는법
- MediaType 추가 : IANA에 등록한다.
- 누구나 쉽게 사용할 수 있다.
- 어렵다
- Profile : link 헤더에 profile relation으로 명세를 링크한다.
- 명세를 찾아갈 수 있게된다.
- 클라이언트가 Link 헤더와 profile을 이해해야 한다.
- Content negotiation을 할 수 없다.
- Content negotiation
- 사용자에게 적절한 리소스를 제공해주는 방법 (언어등)
- MediaType 추가 : IANA에 등록한다.
- HATEOAS (Hypermedia As The Engine Of Application State)
- data에 다양한 방법으로 하이퍼 링크를 표현한다.
- JSON으로 하이퍼링크를 표현하는 방법을 정의한 명세들을 활용한다.
- JSON API
- HAL
- UBER
- Siren
- Collection+json
- ...
- Link, Location 헤더 활용
- data와 header를 모두 활용하면 좋다.
- identification of resources
Layered System
- 계층화된 시스템 아키텍처를 사용하여 각 구성들 간의 계층을 마음대로 상호 작용 할 수 없도록 제한함으로써 Interface를 일원화 할 수 있다.
Code on demand(optional)
- 서버가 네트워크를 통해 클라이언트에 전달한 javascript 등과 같은 프로그램들은 그 자체로 실행이 될 수 있어야 한다.
- client에 보내는 데이터를 바로 실행 가능한 코드를 보내서 이것을 Client에서 실행하는 것을 말한다.
- javascript 같이 코드를 실행
결론
- 대부분의 제약조건은 http를 사용하는것으로 만족된다.
- Uniform Interface 제약조건의 self-description, hateoas 만 불만족한다.
- self-description을 만족하려면..
- Custom Media Type 추가하거나
- profile link relation을 설정
- hateoas를 만족하려면..
- HTTP 헤더나 본문에 링크를 담아 만족할 수 있다.
참고
728x90
'Spring > RestAPI' 카테고리의 다른 글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday