URL의 Collection, Element
SOAP | REST |
---|---|
복잡 | 단순 |
많은 규칙 | 적은 규칙 |
어려움 | 쉬움 |
왜 필요할까?
어떻게 uniform-interface를 만족할 수 있을까?
Identication Of Resources
자원은 url 로 식별 가능해야함
manipulation of resources through representations
자원에 대한 작업에 대해 상태를 설명할 수 있는 정보 포함해야함.
메시지(자원)은 스스로 표현할 수 있어야 함
HTTP 헤더에 타입
명시
HTTP 헤더에 도메인
명시
각 메시지(자원)는 MIME 타입에 맞춰 표현해야함.
거의 대부분의 REST 호소인들이 지키지 못한다고 함
// Self-Descriptive 하지 않은 응답
HTTP/1.1 200 OK
[{"op":"remove", "path":"/a/b/c"}]
// Self-Descriptive 한 응답
// 메시지 내용으로 모든 응답을 수신측이 이해가능
HTTP/1.1 200 OK
Host: www.example.org
Content-Type: application/json.patch+json
[{"op":"remove", "path":"/a/b/c"}]
Hypermedia as the Engine of Application State
자원에 대해서 할 수 있는 행위를 명시해줘야 한다는 관점
하이퍼링크에 따라 다른 페이지를 보여줘야 함.
데이터마다 어떤 URL 에서 원했는지 명시해야함.
보통 href, links, link, url 속성 중 하나에 해당 데이터의 URL 담아서 표기
거의 대부분의 REST 호소인들이 지키지 못한다고 함
아래 그림 처럼 하이퍼링크를 통한 상태 전이가 있는 경우 REST
HTTP/1.1 200 OK
Content-Type: application/json
Link: </articles/1>; rel="previous",
</articles/3>; rel="next";
{
"title": "The second article",
"content": "어쩌구 저쩌구"
}
행위 포함하면 안 됨
확장자는 표시하면 안 됨
명사로만
표현계층적
내용 포함소문자
로만 작성_(언더바)
말고 그냥 -(대시)
사용/
포함 금지/api/v1/…
마이그레이션을 편하게 하기 위함.
개발 당시에는 버전 별로 패키지를 나누지 말고, VCS 사용해 관리할 것
로이필딩 : “버저닝 하지마”
흔한 웹 페이지 | HTTP API | |
---|---|---|
Protocol | HTTP | HTTP |
커뮤니케이션 | 사람 ↔ 기계 | 기계 ↔ 기계 |
Media Type | HTML | JSON |
HTML | JSON | |
---|---|---|
Hyperlink | 가능 (a 태그) | 정의 없음 |
Self-descriptive | 가능 (HTML 명세) | 불완전 문법 해석은 가능 의미 해석위해선 API 문서 필요 |