REST
Representational State Transfer 의 약자로 어떤 자원에 대한 대표값을 사용하여 상태(지속적 변경되는 값)를 전달 하는 것
- 넓은 의미 : 자원을 이름으로 구분하고 해당 자원의 상태를 주고 받는 모든 것
- 좁은 의미 : HTTP를 통해 CRUD를 실행하는 API
- 자원 (Resource) - URI
- 행위 (Verb) - HTTP Method
- 표현 (Representations)
Uniform :
모든 플랫폼에 사용 가능하며, URI로 지정한 리소스에 대한 조작이 가능Stateless :
HTTPSession과 같은 컨텍스트 저장소에 상태정보 저장/관리하지 않음
API 서버는 들어오는 요청 단순 처리Cacheable :
HTTP 기존의 웹 표준을 그대로 사용하므로, 웹에서 사용하는 기존 인프라 그대로 활용 가능
대량의 요청을 효율적으로 처리하기 위함Self-descriptiveness :
동사(Method) + 명사(URI)로 이루어져있어 어떤 Method에 무슨 행위를 하는지 알 수 있음
JSON 포맷으로 직관적 이해 가능 구조Client - Server 구조 :
서버 - API 제공
Client - 사용자 인증, 컨텍스트(세션, 로그인 정보 등) 관리계층형 구조 :
사용자 인증, 로드밸런싱, 암호화 계층 추가가 가능하여 구조상의 유연성을 둘 수 있고, PROXY, GW 같은 네트워크 기반의 중간매체를 사용할 수 있게 함
RESTFull API
이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
- URI는 정보의 자원을 표현해야 함
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현
POST 와 PUT의 차이
POST
클라이언트가 리소스의 위치를 지정하지 않았을때 리소스를 생성하기 위해 사용하는 연산
PUT
리소스의 위치가 명확히 지정된 요청의 리소스를 생성하기 위해 사용하는 연산
- 슬래시(/) 구분자는 계층 관계를 나타내는 데 사용
ex) hxxp://secmon.com/macos/test - URI는 마지막 문자로 슬래시(/) 포함하지 않음
- 하이픈(-)은 URI 가독성 높임 / 밑줄(_) 사용하지 않음
- URI 경로에는 소문자가 적합
- 파일확장자는 URI에 포함하지 않음