백엔드 모집공고에 자주 등장한다.
뭘 표현하고 어떤상태를? 어떻게전달해 ?
웹서비스를 만드는데 사용되는 제약(constraint)모음
Roy T.Fielding (라는사람이 박사과정 논문에썻다)
"web을 망가뜨리지않고, 어떻게 HTTP를 개선할수있을까?"
리소스마다 서로 다른 API규칙이라면 그때그때 공부하고 적용하는데에 문제가있엇다.
어떤 조건을 따르면서 API를 만들어보자! (비슷한 스타일)
HTTP : Client-Server
, Stateless
, Cacheable
, Layered system
HTTP를 써서 잘 작성만 하면 별 힘들이지않고 지킬수 있는것이다.
JavaScript : Code on demand(optional)
옵셔널이고 자바스크립트를 써서 내려주기만하면 OK
집중해야할부분은 Uniform interface이다.
"The key abstraction of information in REST is a resource. Any information that can be named can be a resource. - Roy Fielding"
직역 : REST에서 정보의 가장 핵심적인 추상화는 리소스다.
이름붙일수 있는 정보면 어떤것이든 리소스가 될 수 있다.
서버가 뭔가 정보를 내려주면 그것은 리소스
그걸 어떻게 표현하고 그걸 어떻게 조작할것인가.
리소스를 나타내는 데 명사(nouns)를 사용하라
일관성이 핵심!
CRUD기능 이름은 URI에 사용하지 마라
filter가 필요하면 query componenet를 사용하라
리소스의 가이드라인에서는 4가지정도로 분류한다.
/device-management/managed-devices/{device-id} // 디바이스에 접근한다. 각각의
/user-management/users/{id} // 개인 유저 1명의 정보
/user-management/users/admin
/device-management/managed-devices // 디바이스정보들
/user-management/users //사용자 정보들
/user-management/users/{id}/accounts
/cart-management/users/{id}/carts
/song-management/users/{id}/playlists
/cart-management/users/{id}/cart/checkout
/song-management/users/{id}/playlist/play
_
를 사용하지마라CRUD (Create,Read, Update, and Delete):
POST , GET, PUT, DELETE
HTTP GET /device-management/managed-devices
HTTP POST /device-management/managed-devices
HTTP GET /device-management/managed-devices/{id}
HTTP PUT /device-management/managed-devices/{id}
HTTP DELETE /device-management/managed-devices/{id}
별도의 문서없이 API만으로도 충분히 기능을 유추할 수 있다.!
/managed-devices
/managed-devices?region=USA
/managed-devices?region=USA&brand=XYZ
/managed-devices?region=USA&brand=XYZ&sort=installation-date
RESTful한 API는 매우 엄격하다.
위 4가지를 지키면 어느정도는 레스트풀하다고 할수있다.