Rest API란? Rest API와 HTTP의 관계는?
참고: https://www.youtube.com/watch?v=fB3MB8TXNXM
참고: https://docs.google.com/document/d/1yAr2U4ZY_7Cowvmd82JDYjSNXP34_ZDx-V0UOg9sIcg/edit
참고: https://www.youtube.com/watch?v=iOueE9AXDQQ
참고: https://kmkunk.tistory.com/139 (RESET API설계 원칙)
REST API란? REST API(=RESTful API, Representational State Transfer API). REST아키텍처 스타일을 따르는 API로 대표적으로 HTTP가 있다. REST란? 웹(분산 하이퍼미디어 시스템)을 위한 아키텍처 스타일. 아키텍처 스타일이란? 제약조건들의 집합. 즉 REST란 웹을 위한 제약조건들의 집합이다.
위에서 uniform interface(통합 인터페이스)에 대해 대충 살펴 보면 uniform interface이기 위해 필요한 조건이 self-descriptive해야 한다는 것이다. 즉, REST API라면 해당 API만 보고도 무슨 뜻인지 해석이 가능해야 한다는 것이다. HTTP message는 이 조건을 충족한다(자칭 요즘 REST API라는 것들이 이것을 지키지 못한다. 예를들면 message body에 JSON형식의 데이터를 넣는것. 하지만 엄밀한 의미에서 REST API가 아니지만 그냥 다 REST API라고 불리고 있는 것뿐이다).
REST API의 가장 중요한 특성은 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청 자체의 모습(Representational)으로 표현이 가능해야 한다는 것에 있다. 이래서 이름이 REST API이다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!표현이 가능한 상태의 전달 Representational State Transfer!!!! 이러한 REST API의 특징 때문에 요청이나 응답메시지에 어떤 리소스를 다루고(URI) 어떤 방법으로 처리할 것인지(HTTP Method)를 HTTP message에 명시(Representational)하는 HTTP가 곧 REST API와 동격인 것처럼 여겨지는 것이다.
RESTful API와 HTTP와의 관계. HTTP가 RESTful API의 필수조건은 아니지만 RESTful API의 설계 조건(이 조건이라는 것은 예를들면 무엇을 하는지는 URI에 나오지 않아야 한다는 것이다)을 구현하기 용이한 프로토콜 이므로 현업에서는 HTTP가 주로 사용된다.
REST API 설계 원칙: URI는 정보의 리소스만을 표현해야 한다. 행위에 대한 표현이 아닌 리소스 자체를 표현해야 하는데 중점을 두어야 한다.
이러한REST API설계 원칙을 잘 지키기 위해 HTTP는 적절한 프로토콜이다. 왜냐 하면 HTTP는 메서드와 URI가 분리되어 있기 때문이다.
REST API의 이러한 설계원칙이 HTTP를 이용하여 잘 지켜져서 만들어졌기 때문에 개발자가 다른 팀과 협업하거나 어떤 public API를 처음으로 사용해야 하는 상황에서도 어려움 없이 새 API의 사용법을 익힐 수 있는 것이다.
HTTP프로토콜 중에서 REST API설계에 주로 사용되는 HTTP메서드는 총5가지다. GET, POST, PUT, PATCH, DELETE. HTTP프로토콜을 우편서비스라고 비유하고 각각의 메서드를 우편물의 종류라고 비유한다면 GET, DELETE는 편지지이고 POST, PUT, PATCH는 소포이다. 와... 정말 비유 끝내준다. 즉 HTTP의 message body에 주로 내용이 올수 있는가 없는가에 따라 편지지인지 소포인지로 나눈 것이다(물론 GET메서드도 message body안에 내용물을 넣을 수 있지만 널리 사용되지는 않는다)
또한 REST API의 요청과 응답에는 구조화된 데이터 표현이 가능하면서도 가벼운 JSON이 많이 사용된다. JSON이 사용된다는 것은 HTTP프로토콜 안에 message body안에 담기는 대상으로써 사용된다는 것이다!!
필터링할 조건이 없는 상태에서도 단순히 https://api.yalcobooks.com/v1/books라고 요청을 보내면 모든 책들의 정보가 오기 때문에 아래와 같이 쿼리 파라미터를 붙여준다. 한 페이지에 10권씩 도서정보를 담고 1페이지에 있는 책들의 정보를 보내달라는 의미이다.
ㅇ
RESTful API설계 원칙에서 권장되는 또다른 설계 원칙은 HATEOAS 이다. 아래와 같이 각 요청의 응답에 가용한 다른 요청들의 정보를 포함시키는 것이다. 'URL에 표시된 리소스에 관해(links) 이러이러한 기능들도 이와 같이 요청할 수 있다' 라고 첨부해 주는 것이다!!
==========================================================================================
HTTP메서드의 속성중 Cacheable(캐시가능)이란? 클라이언트와 서버는 서로에 대해서는 기억하지 않더라도 자신이 어떤 것을 물어보고 어떤 것을 답해 주었는지는 기억해 두는 것.