최근 HTTP/URL 등 다시 공부하면서 REST에 대해서 정리. REST API는 REST를 기반으로 만들어진 API를 의미함

REST(Representational state transfer) = 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미.

  1. HTTP URI를 통해 자원을 명시하고
  2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 이용하여
  3. 해당 자원에 CRUD 적용(Representations)하는 것
CRUD
Create 데이터 생성(POST)
Read 데이터 조회(GET)
Update 데이터 수정(PUT, PATCH)
Delete 데이터 삭제(DELETE)

중심 규칙은 – URI는 정보의 자원을 표기해야한다 – 자원에 대한 행위는 HTTP Method로 표현한다.

worst)GET /users/show/1

best)GET /users/1

REST에서는 앞의 예시와 같이 collection과 element로 나누어 표현함

RESTful Web Service HTTP methods
Resource GET PUT POST DELETE
Collection URI, such as http://example.com/resources/ 컬렉션에 속한 자원들의 URI나 그 상세사항의 목록을 보여준다. 전체 컬렉션은 다른 컬렉션으로 교체한다. 해당 컬렉션에 속하는 새로운 자원을 생성한다. 자원의 URI는 시스템에 의해 할당된다. 전체 컬렉션을 삭제한다.
Element URI, such as http://example.com/resources/item17 요청한 컬렉션 내 자원을 반환한다. 해당 자원을 수정한다. 해당 자원에 귀속되는 새로운 자원을 생성한다. 해당 컬렉션내 자원을 삭제한다.

UPDATE하는경우 PATCH가 권장

입력 form 받아오기

Form 자체도 정보로 취급하면 된다. 서버로부터 아이템을 작성하기 위한 Form을 Get한다라고 생각하면 된다.

기본적인 REST 인터페이스 예시

HTTP Verb Path action used for
GET /item index 보기
GET /item/new new 새 아이템 생성을 위한 페이지 보기
PUT /item/:id update 상세 정보 보기
POST /item create 생성
DELETE /item/:id destroy 삭제

모바일 환경

모바일 환경에 따라 다르게 인터페이스를 보여주는 것이라면 REST하게 만든다면 URI는 플랫폼 중립적이라, 정보를 보여줄때는 여러 플랫폼을 구별할때 Request HeaderUser-agent를 참조하여 확인하면 된다.

언어

언어별로 다른 URI 서비스를 가지고 있는 경우가 있다. 하지만 REST에서는 Request HeaderAccept-Language의 값에 따라 처리함. 브라우저나 os에서 사용자가 사용하는 언어를 header에 포함하여 요청을 만들고 있기 떄문에 해당 header를 참조하여 맞는 언어를 제공하는 것이 정확한 서비스를 만들수 있다.

물론 다른 언어로 보고싶어할 수도 있고, 어떤 이유로 지정해서 봐야할 수도 있으므로 변경 옵션 서비스를 만들 수도 있다.

언어별로 다른 URI 서비스의 경우 : domain.com이나 domain.com등

웹 프레임워크에서는 로케일 설정에서 내부적으로 Accept-language를 확인하여 처리하는 것이다.

REST API

REST API 설계 예시

  1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
Bad  Example  http://domain.com/Running/
Good Example  http://domain.com/run/  
  1. 마지막에 슬래시 (/)를 포함하지 않는다.
Bad  Example  http://domain.com/test/  
Good Example  http://domain.com/test
  1. 언더바 대신 하이폰을 사용한다.
Bad  Example http://domain.com/test_blog
Good Example http://domain.com/test-blog  
  1. 파일확장자는 URI에 포함하지 않는다.
Bad  Example  http://domain.com/photo.jpg  
Good Example  http://domain.com/photo  
  1. 행위를 포함하지 않는다.
Bad  Example  http://domain.com/delete-post/1  
Good Example  http://domain.com/post/1