API : 다른 소프트웨어와 통신하기 위해 따라야 하는 규칙
REpresentational State Transfer API :
HTTP 프로토콜을 통해 대부분 만족하지만, uniform interface 의 일부 조건은 잘 지켜지지 않음
리소스
1. 동사보다는 명사를 사용하며, 2단계 이내로 단순하게 표현한다
(collection: 단일 리소스의 묶음, 복수형으로 사용 / document: 단일 리소스)
/users/sungji
2. 연관관계가 있는 리소스일 경우, 관계를 명시할 수도 있다.
/users/sungji/address
/users/sungji/likes/food
3. 페이징 (100-125 레코드를 조회-페이스북)
/record?offset=100&limit=25
4. 부분 응답 (리소스의 특정 필드만 필요한 경우)
/terry/friends?fields=id, name
5. 전역검색 / 특정 리소스 안에서 검색
/search?q=id%3Dsungji
/users?q=id%3Dsungji
6. 검색 및 페이징
/user?q=name%3Dsungji, region%3Dseoul&offset=20&limit=10
Representation (표현, 대표)
현재 접근하는 자원의 상태에 대한 정보를 담은 표현
자원을 어떻게 조작할지 HTTP메세지에 명시한다.
HTTP 메세지
Method : GET, POST, PATCH, PUT, DELETE
representation data : 자원의 현재 상태(데이터)
representation metadata : representation에 대한 정보 (길이, 형식 등)
1. 요청
GET /users/user1 HTTP/1.1
Host : example.com
2. 응답
HTTP/1.1 200 OK
Contnent-type : application/json
{
"links": [
{
"rel": "detail",
"href": "http://example/items/1234"
},
{
"rel": "order",
"method": "post",
"href": "http://server/api/items/order"
}
]
}