서로 커뮤니케이션하는 클라이언트와 서버, 가령 모바일 어플리케이션의 동작 방식과 API를 제공한는 서버의 동작 방식에 대해 분리해서 생각해야 한다
리퀘스트를 처리하는데 필요한 모든 정보는 상호작용을 할 때, 오직 서버만을 알고 있어야 한다. 서버는 리퀘스트를 처리하는데 필요한 클라이언트의 그 어떤 컨텍스트도 서버의 세션에 담지 않는다.
🤦♀️보내는 계좌의 목록 전송(클라이언트)
-> 서버측에서 세션에 저장(서버)
-> 저장되어있던 계좌를 이용하여 기능 구현(서버)
-> 해당 정보를 들고 있는 특정 인스터스만이 리퀘스트를 처리할 수 있다.
💁♀️서버와 리퀘스트 사이에 (세션 등을 통해) 중간에 저장하는 컨텍스트가 존재하지 않아야 한다.
-> API 목표를 독립적으로 사용할 수 있게 해주고, 해당 API의 재사용성을 높인다.
리퀘스트에 대한 리스폰스는 저장 가능 여부(클라이언트가 동일한 요청을 다시 하지 않고 재사용할 수 있도록)및 기간을 표시해야 한다.
클라이언트가 서버와 상호작용을 할 때, 오직 서버만을 알고 있어야 한다. 서버를 이루는 인프라스트럭쳐는 계속 뒷단에 숨겨져 있어야 한다. 클라이언트는 시스템에서 오직 하나의 레이어만을 볼 수 있어야 한다.
서버는 필요하다면 클라이언트에 실행 가능한 코드를 전송할 수 있어야 한다. 이 제약사항은 선택적 이다.
모든 상호작용은 식별된 리소스의 개념에 따라 이루어져야 한다. 이는 식별된 리소소의 조작은 리소스의 상태 표현들과 표준 메서드들을 통해서만 이뤄짐을 의미한다. 또한, 상호작용은 리소스의 표현이 무엇을 의미하는지와 이 리소스들로 무엇을 할 수 있는 모든 메타데이터를 제공해야 한다.
💁일관된 API를 디자인하면 API의 사용을 용이하게 할 뿐만 아니라 디자인도 더 단순하게 만든다.