자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든것을 의미한다.
HTTP URI를 통해 자원을 명시하고 HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Opertation을 적용하는 것을 의미합니다.
Create 생성(POST)
Read 조회(GET)
Update 수정(PUT)
Delete 삭제(DELETE)
쉽게 말하자면 클라이언트와 서버 통신시에 HTTP 메소드를 통해 CRUD를 적용한다.
옛날엔 서버와 클라이언트가 PC 브라우저로 통일이 되어있었다. 그렇다보니 그냥 JSP ASP PHP등의 여러가지 서버언어로 웹페이지를 구성하고 작업했다.
하지만 최근엔 PC뿐만 아니라 핸드폰, 태블릿, TV 다양해졌기 때문에 그에 맞춰 서버를 맞추는건 비효율적이기 때문에 메시지기반 XML,JSON 같은 client단에서 치환가능한 형태로 통신하기로 하면서 서버와 클라이언트의 분리했다.
클라이언트 / 서버 구조
무상태성(Stateless)
캐시 처리 기능(Cacheable)
자체 표현 구조(Self - descriptiveness)
계층화 (Layered System)
유니폼 인터페이스 (Uniform)
슬래시 구분자 ( / )는 계층 관계를 나타내는데 사용한다.
URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.
URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것
역으로 리소스가 다르면 URI도 달라져야 한다.
하이픈 ( - )은 URI 가독성을 높이는데 사용한다.
밑줄 ( _ )은 URI에 사용하지 않는다.
URI 경로에는 소문자가 적합하다.
파일확장자는 URI에 포함하지 않는다.
REST API 에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다.
Accept Header 를 사용한다.
GET
: http://restapi.exam.com/orders/2/Accept: image/jpg
리소스 간에 연관 관계가 있는 경우
/리소스명/리소스ID/관계가 있는 다른 리소스 명
GET
: /users/2/orders (일반적으로 소유의 관계를 표현할 때 사용)