Code on demand (optional) -> 서버에서 코드를 서버로 보내서 실행시킬 수 있어야 한다. ex)javascript
Uniform interface 란?
Identification of resources : 리소스가 URL로 식별되어야 한다.
Manipulation of resources through representations : HTTP Message 표현을 담아서 보내야 한다.
Self-descriptive messages : 메시지가 스스로를 설명해야한다.
GET / HTTP/1.1
Host : www.example.org // 목적지가 빠져있다.
HTTP/1.1 200 OK
[{ “op”: “remove”, “path”: “/a/b/c” }] // Client 가 해독해야하는데, 어떤 문법인지 알 수가 없다.
Content-Type : application/json // op, path 뜻이 뭐지? Message 내용만으로 해독하지 못한다.
* Hypermedia as the engine of application state (HATEOUS)
- Application 상태의 전이
- 페이지에 있던 링크를 따라가며 정의했기 때문에 HATEOUS
- HATEOUS : 하이퍼링크를 통한 전의
a tag를 통해 하이퍼링크를 통해 가므로, HATEOUS를 만족한다.
Json 으로도 만족가능할 수 있지만, `self-descriptive messages` : title, contents 뭔지 알 수가 없다.
HTTP/1.1 200 OK
Content Type : application/json
Link </articles/1> rel=“previous”
</articles/3> rel=“next”
{
“title”: “The second article”,
“contents”: “Blah Blah..”
}
**Uniform interface 를 해야되는 이유?**
독립적 진화
* 서버와 클라이언트가 각각 독립적으로 진화한다.
* 서버의 기능이 변경되어도 클라이언트를 업데이트할 필요가 없다.
* REST를 만들게 된 계기: “How do I improve HTTP without breaking the Web"
REST 가 지켜지고 있는가?
* 웹 페이지를 변경했다고 웹 브라우저를 업데이트 할 필요없다.
* 웹 브라우저를 업데이트했다고 웹 페이지를 변경할 필요없다.
* HTTP 명세가 변경되어도 웹은 잘 동작한다.
* HTML 명세가 변경되어도 웹은 잘 동작한다.
REST API 는?
REST 아키텍처 스타일을 지켜야 한다.
하이퍼텍스트를 포함한 `self-descriptive` 한 메시지의 uniform interface를 통해 리소스에 접근하는 API
JSON
* IANA media-type 에 id 가 뭐고 정의(https://www.iana.org/assignments/media-types/media-types.xhtml)
* Profile 의미가 뭔지 정보가 담긴 문서를 링크를 달기
* HATEOUS 를 이용하여 data 에 link 같은걸로 추가해서 하는 방법
* HTTP 헤더로 link, location 을 이용하여 해결
즉, HATEOUS 는 HTTP 헤더나 본문에 링크를 담아 만족시킬 수 있다.
>> 특히 PUT, DELETE 메소드로는 WebDAV 서비스와 함께 원격지 웹 서버에 파일을 생성하거나 삭제하는 FTP와 >> 유사한 기능을 구현할 수 있다. 이는 웹 콘텐츠 디렉터리 및 httpext.dll 권한 할당 오류로 인해 인증 절차 없이 원격지 서버에 파일을 생성하거나 삭제할 수 있다.
http://coashanee5.blogspot.com/2017/03/http.html?m=1
REST 란?
ex)javascript
Uniform interface 란?
HTTP/1.1 200 OK [{ “op”: “remove”, “path”: “/a/b/c” }] // Client 가 해독해야하는데, 어떤 문법인지 알 수가 없다. Content-Type : application/json // op, path 뜻이 뭐지? Message 내용만으로 해독하지 못한다.
HTTP/1.1 200 OK Content Type: text/html
testHTTP/1.1 200 OK Content Type : application/json Link </articles/1> rel=“previous” </articles/3> rel=“next” { “title”: “The second article”, “contents”: “Blah Blah..” }