: Application Programming Interface 두 애플리케이션이 서로 통신하는 방법을 정의
: Rest 아키텟처 스타일로 요청과 응답을 하는 API
Http 프로토토콜 ?
: 클라이언트와 서버 간의 데이터를 주고받기 위해 사용되는 표준 (클라이언트 요청 -> 서버 응답)
로이 필딩은 HTTP의 주요 저자 (웹 표준화에 상당히 기여)
HTTP 프로토콜이 표준화가 되어있긴하지만 클라이언트의 종류(웹, 모바일 등) 에 따라, 또한 개발자의 해석에 따라 다르게 구현될수 있다. 구현 방식이 각기 다르게 서버에 요청하게 되면 서버가 매우 복잡하게 됨
이를 개선하기 위해 로이 필딩은 Rest 아키텍처를 개발하게 됨
Rest 를 알기 전 각 통신 방식을 간략하게 보면..
@Get(android/group) android 그룹 정보 조회
@Get(android/group/1) android 1번째 그룹 정보 조회
@DELETE(android/group/1)android 1번째 그룹 정보 삭제
Rest API 가장 큰 특징 : 요청 메시지만 보고도 무엇을 원하는지 파악 가능 !
: 자원을 이름(표현)으로 구분하여 자원의 상태(정보)를 전달한다.
@GET(/android/group/1/show)
@GET(/android/group/1/delete)
이렇게 사용은 가능하지만 RestApi 규칙에 어긋남.
@GET(/android/group/1)
@DELETE(/android/group/1)
URI 는 명사로 표현되어야 하고 자원에 대한 조작은 HTTP Method로 해야한다.
슬래시 구분자를 통해 자원 간의 계층 관계를 나탬
언더바(_) 대신 하이폰(-)을 사용해야한다. ( 컴퓨터 폰트에 따라 언더바를 지원하지 않는 경우가 있어 혼란을 줄수 있다.)
대문자 대신 소문자 (대문자를 사용하면 일관성이 떨어진다.)
URI의 마지막은 슬래시는 포함하지 않는다.(아무런 의미가 없기떄문에 혼란만 야기한다.)
: HTTP Method (GET/POST/PUT/DELETE)
GET : 조회
DELETE: 삭제
PUT: 업데이트 (빈 정보는 null)
PATCH: 업데이트 (빈 정보는 기존 데이터 유지)
POST: 생성
: 요청 Header(text/html, image/gif, text/*)
Uniform Interface
Stateless(무상태성)
Cacheable(캐시 가능)
Client Server
Layered System(계층형 구조)
개발자들은 Uniform Interface를 지키기 위해 노력하면 된다. 나머지는 인터넷 제약사항에서 자동적으로 지켜진다.
로이 필딩
" 시스템 전체를 통제할 수 있다고 생각하거나, 진화에 관심이 없다면 REST에 대해 따지느라 시간 낭비하지 마라"
시스템 통제가 가능 : 서버와 클라이언트, 시스템 전체를 내가 개발할 때,
진화에 관심이 없다: 오랜시간에 걸쳐 진화하는 시스템에 관심이 없음